示例#1
0
文件: Volumes.php 项目: recipe/scalr
 public function xListVolumesAction()
 {
     $aws = $this->getEnvironment()->aws($this->getParam('cloudLocation'));
     $this->request->defineParams(array('sort' => array('type' => 'json', 'default' => array('property' => 'volumeId', 'direction' => 'DESC')), 'volumeId'));
     if ($this->getParam('volumeId')) {
         $filter = array(array('name' => VolumeFilterNameType::volumeId(), 'value' => $this->getParam('volumeId')));
     } else {
         $filter = null;
     }
     // Rows
     $volumeList = $aws->ec2->volume->describe(null, $filter);
     $vols = array();
     /* @var $pv VolumeData */
     foreach ($volumeList as $pv) {
         /* @var $att AttachmentSetResponseData */
         if (count($pv->attachmentSet)) {
             $att = $pv->attachmentSet[0];
         } else {
             $att = null;
         }
         $item = array('volumeId' => $pv->volumeId, 'size' => (int) $pv->size, 'snapshotId' => $pv->snapshotId, 'availZone' => $pv->availabilityZone, 'type' => $pv->volumeType, 'status' => $pv->status, 'attachmentStatus' => $att !== null ? $att->status : null, 'device' => $att !== null ? $att->device : null, 'instanceId' => $att !== null ? $att->instanceId : null);
         $item['autoSnaps'] = $this->db->GetOne("SELECT id FROM autosnap_settings WHERE objectid=? AND object_type=? LIMIT 1", array($pv->volumeId, AUTOSNAPSHOT_TYPE::EBSSnap)) ? true : false;
         $dbEbsVolume = false;
         try {
             $dbEbsVolume = DBEBSVolume::loadByVolumeId($pv->volumeId);
             $item['farmId'] = $dbEbsVolume->farmId;
             $item['farmRoleId'] = $dbEbsVolume->farmRoleId;
             $item['serverIndex'] = $dbEbsVolume->serverIndex;
             $item['serverId'] = $dbEbsVolume->serverId;
             $item['mountStatus'] = $dbEbsVolume->mountStatus;
             $item['farmName'] = DBFarm::LoadByID($dbEbsVolume->farmId)->Name;
             $item['roleName'] = DBFarmRole::LoadByID($dbEbsVolume->farmRoleId)->GetRoleObject()->name;
             $item['autoAttach'] = true;
         } catch (\Exception $e) {
         }
         if (!$dbEbsVolume && !empty($item['instanceId'])) {
             try {
                 $dbServer = DBServer::LoadByPropertyValue(EC2_SERVER_PROPERTIES::INSTANCE_ID, $item['instanceId']);
                 $item['farmId'] = $dbServer->farmId;
                 $item['farmRoleId'] = $dbServer->farmRoleId;
                 $item['serverIndex'] = $dbServer->index;
                 $item['serverId'] = $dbServer->serverId;
                 $item['farmName'] = $dbServer->GetFarmObject()->Name;
                 $item['mountStatus'] = false;
                 $item['roleName'] = $dbServer->GetFarmRoleObject()->GetRoleObject()->name;
             } catch (\Exception $e) {
             }
         }
         $vols[] = $item;
     }
     $response = $this->buildResponseFromData($vols, array('instanceId', 'volumeId', 'snapshotId', 'farmId', 'farmRoleId', 'availZone', 'type'));
     $this->response->data($response);
 }
示例#2
0
文件: Volumes.php 项目: scalr/scalr
 /**
  * List volumes
  *
  * @param string $cloudLocation          The location of a cloud
  * @param string $volumeId      optional Volume ID
  * @param int    $farmId        optional Farm ID
  * @param int    $farmRoleId    optional Role ID tied to the farm
  */
 public function xListVolumesAction($cloudLocation, $volumeId = null, $farmId = null, $farmRoleId = null)
 {
     $filter = [];
     $filterFields = ["instanceId", "volumeId", "snapshotId", "availZone", "type"];
     $env = $this->getEnvironment();
     $aws = $env->aws($cloudLocation);
     if (!empty($volumeId)) {
         $filter = [["name" => VolumeFilterNameType::volumeId(), "value" => $volumeId]];
     }
     $filteringDecision = $this->request->getCloudResourceFilteringDecision(Acl::RESOURCE_AWS_VOLUMES, SERVER_PLATFORMS::EC2, !empty($farmId) ? $farmId : null);
     if ($filteringDecision->emptySet) {
         //This user hasn't any managed Farm. We should return empty result set.
         $response = $this->buildResponseFromData([], $filterFields);
         return $this->response->data($response);
     } elseif (!empty($filteringDecision->filter)) {
         $filter = array_merge($filter, $filteringDecision->filter);
     }
     // Rows
     $startTime = microtime(true);
     $volumeList = $aws->ec2->volume->describe(null, empty($filter) ? null : $filter);
     $describeTime = round(microtime(true) - $startTime) * 1000;
     $startTime = microtime(true);
     $vols = [];
     $needFilter = !empty($farmId) || !empty($farmRoleId);
     foreach ($volumeList as $pv) {
         /* @var $pv VolumeData */
         /* @var $att AttachmentSetResponseData */
         $att = count($pv->attachmentSet) ? $pv->attachmentSet[0] : null;
         $tags = [];
         $scalrMetaTag = null;
         foreach ($pv->tagSet as $tag) {
             /* @var $tag ResourceTagSetData */
             $tg = "{$tag->key}";
             if ($tag->value) {
                 $tg .= "={$tag->value}";
             }
             if ($tag->key == Scalr_Governance::SCALR_META_TAG_NAME) {
                 $scalrMetaTag = $tag->value;
             }
             $tags[] = $tg;
         }
         if (!$filteringDecision->matchScalrMetaTag($scalrMetaTag)) {
             continue;
         }
         $item = ["volumeId" => $pv->volumeId, "size" => (int) $pv->size, "snapshotId" => $pv->snapshotId, "availZone" => $pv->availabilityZone, "type" => $pv->volumeType, "status" => $pv->status, "attachmentStatus" => $att !== null ? $att->status : null, "device" => $att !== null ? $att->device : null, "instanceId" => $att !== null ? $att->instanceId : null, "tags" => implode(",", $tags), "encrypted" => $pv->encrypted, "kmsKeyId" => $pv->kmsKeyId];
         if (!empty($item["instanceId"])) {
             try {
                 if (isset($this->listCache["instances"][$item["instanceId"]])) {
                     $dbServer = $this->listCache["instances"][$item["instanceId"]];
                 } else {
                     $dbServer = DBServer::LoadByPropertyValue(EC2_SERVER_PROPERTIES::INSTANCE_ID, $item["instanceId"]);
                     $this->listCache["instances"][$item["instanceId"]] = $dbServer;
                 }
                 if ($dbServer) {
                     $item["farmId"] = $dbServer->farmId;
                     $item["farmRoleId"] = $dbServer->farmRoleId;
                     $item["serverIndex"] = $dbServer->index;
                     $item["serverId"] = $dbServer->serverId;
                     $item["mountStatus"] = false;
                     if (isset($this->listCache["farms"][$item["farmId"]])) {
                         $item["farmName"] = $this->listCache["farms"][$item["farmId"]];
                     } else {
                         $item["farmName"] = $dbServer->GetFarmObject()->Name;
                         $this->listCache["farms"][$item["farmId"]] = $item["farmName"];
                     }
                     if (isset($this->listCache["farmRoles"][$item["farmRoleId"]])) {
                         $item["roleName"] = $this->listCache["farmRoles"][$item["farmRoleId"]];
                     } else {
                         $item["roleName"] = $dbServer->GetFarmRoleObject()->GetRoleObject()->name;
                         $this->listCache["farmRoles"][$item["farmRoleId"]] = $item["roleName"];
                     }
                     /* Waiting for bugfix on scalarizr side
                        if ($dbServer->IsSupported("2.5.4")) {
                            $item["mounts"] = $dbServer->scalarizr->system->mounts();
                        }
                        */
                 }
             } catch (\Exception $e) {
             }
         }
         if ($needFilter === true) {
             foreach (["farmId", "farmRoleId"] as $var) {
                 if (!empty(${$var}) && (!isset($item[$var]) || $item[$var] != ${$var})) {
                     continue 2;
                 }
             }
         }
         $vols[] = $item;
     }
     $volumesTime = round(microtime(true) - $startTime) * 1000;
     $startTime = microtime(true);
     $response = $this->buildResponseFromData($vols, $filterFields);
     foreach ($response["data"] as &$item) {
         $item["autoSnaps"] = (bool) $this->db->GetOne("SELECT id FROM autosnap_settings WHERE objectid=? AND object_type=? LIMIT 1", [$item["volumeId"], \AUTOSNAPSHOT_TYPE::EBSSnap]);
     }
     $responseTime = round(microtime(true) - $startTime) * 1000;
     $response["performanceMeasurements"] = ["describe" => $describeTime, "volumes" => $volumesTime, "response" => $responseTime];
     $this->response->data($response);
 }
示例#3
0
 public function xListVolumesAction()
 {
     $aws = $this->getEnvironment()->aws($this->getParam('cloudLocation'));
     $this->request->defineParams(array('sort' => array('type' => 'json', 'default' => array('property' => 'volumeId', 'direction' => 'DESC')), 'volumeId'));
     if ($this->getParam('volumeId')) {
         $filter = array(array('name' => VolumeFilterNameType::volumeId(), 'value' => $this->getParam('volumeId')));
     } else {
         $filter = null;
     }
     // Rows
     $volumeList = $aws->ec2->volume->describe(null, $filter);
     $vols = array();
     /* @var $pv VolumeData */
     foreach ($volumeList as $pv) {
         /* @var $att AttachmentSetResponseData */
         if (count($pv->attachmentSet)) {
             $att = $pv->attachmentSet[0];
         } else {
             $att = null;
         }
         $tags = array();
         foreach ($pv->tagSet as $tag) {
             /* @var $tag ResourceTagSetData */
             $tg = "{$tag->key}";
             if ($tag->value) {
                 $tg .= "={$tag->value}";
             }
             $tags[] = $tg;
         }
         $item = array('volumeId' => $pv->volumeId, 'size' => (int) $pv->size, 'snapshotId' => $pv->snapshotId, 'availZone' => $pv->availabilityZone, 'type' => $pv->volumeType, 'status' => $pv->status, 'attachmentStatus' => $att !== null ? $att->status : null, 'device' => $att !== null ? $att->device : null, 'instanceId' => $att !== null ? $att->instanceId : null, 'tags' => implode(',', $tags));
         $item['autoSnaps'] = $this->db->GetOne("SELECT id FROM autosnap_settings WHERE objectid=? AND object_type=? LIMIT 1", array($pv->volumeId, AUTOSNAPSHOT_TYPE::EBSSnap)) ? true : false;
         if (!empty($item['instanceId'])) {
             try {
                 $dbServer = DBServer::LoadByPropertyValue(EC2_SERVER_PROPERTIES::INSTANCE_ID, $item['instanceId']);
                 if ($dbServer) {
                     $item['farmId'] = $dbServer->farmId;
                     $item['farmRoleId'] = $dbServer->farmRoleId;
                     $item['serverIndex'] = $dbServer->index;
                     $item['serverId'] = $dbServer->serverId;
                     $item['farmName'] = $dbServer->GetFarmObject()->Name;
                     $item['mountStatus'] = false;
                     $item['roleName'] = $dbServer->GetFarmRoleObject()->GetRoleObject()->name;
                     /* Waiting for bugfix on scalarizr side
                        if ($dbServer->IsSupported('2.5.4')) {
                            $item['mounts'] = $dbServer->scalarizr->system->mounts();
                        }
                        */
                 }
             } catch (\Exception $e) {
             }
         }
         $vols[] = $item;
     }
     $response = $this->buildResponseFromData($vols, array('instanceId', 'volumeId', 'snapshotId', 'farmId', 'farmRoleId', 'availZone', 'type'));
     $this->response->data($response);
 }