Scalr\Farm\Role\FarmRoleStorage::getVolumesConfigs PHP Method

getVolumesConfigs() public method

public getVolumesConfigs ( DBServe\DBServer $dbServer, $isHostInit = true )
$dbServer DBServe\DBServer
    public function getVolumesConfigs(DBServer $dbServer, $isHostInit = true)
    {
        $volumes = [];
        $configs = $this->getConfigs();
        foreach ($configs as $config) {
            //Check for existing volume
            $createFreshConfig = true;
            $volume = null;
            $dbVolume = FarmRoleStorageDevice::getByConfigIdAndIndex($config->id, $dbServer->index);
            if ($dbVolume) {
                $volume = $dbVolume->config;
                $createFreshConfig = false;
                $volume->mpoint = $config->mount == 1 ? $config->mountPoint : null;
            }
            if ($createFreshConfig || $config->rebuild) {
                $volumeConfigTemplate = new stdClass();
                $volumeConfigTemplate->scalrStorageId = $config->id;
                $volumeConfigTemplate->type = stristr($config->type, "raid.") ? FarmRoleStorageConfig::TYPE_RAID : $config->type;
                $volumeConfigTemplate->fstype = $config->fs;
                $volumeConfigTemplate->mpoint = $config->mount == 1 ? $config->mountPoint : null;
                if ($config->mount == 1) {
                    if ($config->fs == 'ntfs' && !empty($config->label)) {
                        $volumeConfigTemplate->label = $config->label;
                    }
                    if ($config->fs != 'ntfs' && !empty($config->mountOptions)) {
                        $volumeConfigTemplate->mount_options = array_map('trim', explode(',', $config->mountOptions));
                    }
                }
                switch ($config->type) {
                    case FarmRoleStorageConfig::TYPE_EC2_EPHEMERAL:
                        $volumeConfigTemplate->name = $config->settings[FarmRoleStorageConfig::SETTING_EC2_EPHEMERAL_NAME];
                        $volumeConfigTemplate->size = $config->settings[FarmRoleStorageConfig::SETTING_EC2_EPHEMERAL_SIZE];
                        break;
                    case FarmRoleStorageConfig::TYPE_GCE_EPHEMERAL:
                        $volumeConfigTemplate->size = $config->settings[FarmRoleStorageConfig::SETTING_GCE_EPHEMERAL_SIZE];
                        $volumeConfigTemplate->name = $config->settings[FarmRoleStorageConfig::SETTING_GCE_EPHEMERAL_NAME];
                        break;
                    case FarmRoleStorageConfig::TYPE_CINDER:
                        $volumeConfigTemplate->size = $config->settings[FarmRoleStorageConfig::SETTING_CINDER_SIZE];
                        if (!empty($config->settings[FarmRoleStorageConfig::SETTING_CINDER_VOLUME_TYPE])) {
                            $volumeConfigTemplate->volumeType = $config->settings[FarmRoleStorageConfig::SETTING_CINDER_VOLUME_TYPE];
                        }
                        // SNAPSHOT
                        if ($config->settings[FarmRoleStorageConfig::SETTING_CINDER_SNAPSHOT] != '') {
                            $volumeConfigTemplate->snap = new stdClass();
                            $volumeConfigTemplate->snap->type = FarmRoleStorageConfig::TYPE_CINDER;
                            $volumeConfigTemplate->snap->id = $config->settings[FarmRoleStorageConfig::SETTING_CINDER_SNAPSHOT];
                        }
                        break;
                    case FarmRoleStorageConfig::TYPE_CSVOL:
                        $volumeConfigTemplate->diskOfferingId = $config->settings[FarmRoleStorageConfig::SETTING_CSVOL_DISK_OFFERING];
                        $volumeConfigTemplate->diskOfferingType = $config->settings[FarmRoleStorageConfig::SETTING_CSVOL_DISK_OFFERING_TYPE];
                        if ($volumeConfigTemplate->diskOfferingType == 'custom' || !$volumeConfigTemplate->diskOfferingId) {
                            $volumeConfigTemplate->size = $config->settings[FarmRoleStorageConfig::SETTING_CSVOL_SIZE];
                        }
                        // SNAPSHOT
                        if ($config->settings[FarmRoleStorageConfig::SETTING_CSVOL_SNAPSHOT] != '') {
                            $volumeConfigTemplate->snap = new stdClass();
                            $volumeConfigTemplate->snap->type = FarmRoleStorageConfig::TYPE_CSVOL;
                            $volumeConfigTemplate->snap->id = $config->settings[FarmRoleStorageConfig::SETTING_CSVOL_SNAPSHOT];
                        }
                        break;
                    case FarmRoleStorageConfig::TYPE_GCE_PD:
                        $volumeConfigTemplate->size = $config->settings[FarmRoleStorageConfig::SETTING_GCE_PD_SIZE];
                        if (!empty($config->settings[FarmRoleStorageConfig::SETTING_GCE_PD_TYPE])) {
                            $volumeConfigTemplate->diskType = $config->settings[FarmRoleStorageConfig::SETTING_GCE_PD_TYPE];
                        }
                        // SNAPSHOT
                        if ($config->settings[FarmRoleStorageConfig::SETTING_GCE_PD_SNAPSHOT] != '') {
                            $volumeConfigTemplate->snap = new stdClass();
                            $volumeConfigTemplate->snap->type = FarmRoleStorageConfig::TYPE_GCE_PD;
                            $volumeConfigTemplate->snap->id = $config->settings[FarmRoleStorageConfig::SETTING_GCE_PD_SNAPSHOT];
                        }
                        break;
                    case FarmRoleStorageConfig::TYPE_EBS:
                        $volumeConfigTemplate->size = $config->settings[FarmRoleStorageConfig::SETTING_EBS_SIZE];
                        $volumeConfigTemplate->encrypted = !empty($config->settings[FarmRoleStorageConfig::SETTING_EBS_ENCRYPTED]) ? 1 : 0;
                        $volumeConfigTemplate->tags = $dbServer->getAwsTags();
                        // IOPS
                        $volumeConfigTemplate->volumeType = $config->settings[FarmRoleStorageConfig::SETTING_EBS_TYPE];
                        if ($volumeConfigTemplate->volumeType == 'io1') {
                            $volumeConfigTemplate->iops = $config->settings[FarmRoleStorageConfig::SETTING_EBS_IOPS];
                        }
                        if (!empty($config->settings[FarmRoleStorageConfig::SETTING_EBS_KMS_KEY_ID])) {
                            $volumeConfigTemplate->kmsKeyId = $config->settings[FarmRoleStorageConfig::SETTING_EBS_KMS_KEY_ID];
                        }
                        // SNAPSHOT
                        if ($config->settings[FarmRoleStorageConfig::SETTING_EBS_SNAPSHOT] != '') {
                            $volumeConfigTemplate->snap = new stdClass();
                            $volumeConfigTemplate->snap->type = FarmRoleStorageConfig::TYPE_EBS;
                            $volumeConfigTemplate->snap->id = $config->settings[FarmRoleStorageConfig::SETTING_EBS_SNAPSHOT];
                        }
                        break;
                    case FarmRoleStorageConfig::TYPE_RAID_CSVOL:
                    case FarmRoleStorageConfig::TYPE_RAID_CINDER:
                    case FarmRoleStorageConfig::TYPE_RAID_EBS:
                    case FarmRoleStorageConfig::TYPE_RAID_GCE_PD:
                        $volumeConfigTemplate->level = $config->settings[FarmRoleStorageConfig::SETTING_RAID_LEVEL];
                        $volumeConfigTemplate->vg = $config->id;
                        $volumeConfigTemplate->disks = [];
                        for ($i = 1; $i <= $config->settings[FarmRoleStorageConfig::SETTING_RAID_VOLUMES_COUNT]; $i++) {
                            $disk = new stdClass();
                            if ($config->type == FarmRoleStorageConfig::TYPE_RAID_EBS) {
                                $disk->size = $config->settings[FarmRoleStorageConfig::SETTING_EBS_SIZE];
                                $disk->encrypted = !empty($config->settings[FarmRoleStorageConfig::SETTING_EBS_ENCRYPTED]) ? 1 : 0;
                                $disk->type = FarmRoleStorageConfig::TYPE_EBS;
                                $disk->tags = $dbServer->getAwsTags();
                                // IOPS
                                $disk->volumeType = $config->settings[FarmRoleStorageConfig::SETTING_EBS_TYPE];
                                if ($disk->volumeType == 'io1') {
                                    $disk->iops = $config->settings[FarmRoleStorageConfig::SETTING_EBS_IOPS];
                                }
                                if (!empty($config->settings[FarmRoleStorageConfig::SETTING_EBS_KMS_KEY_ID])) {
                                    $disk->kmsKeyId = $config->settings[FarmRoleStorageConfig::SETTING_EBS_KMS_KEY_ID];
                                }
                            } elseif ($config->type == FarmRoleStorageConfig::TYPE_RAID_CSVOL) {
                                $disk->diskOfferingId = $config->settings[FarmRoleStorageConfig::SETTING_CSVOL_DISK_OFFERING];
                                $disk->diskOfferingType = $config->settings[FarmRoleStorageConfig::SETTING_CSVOL_DISK_OFFERING_TYPE];
                                if ($disk->diskOfferingType == 'custom' || !$disk->diskOfferingId) {
                                    $disk->size = $config->settings[FarmRoleStorageConfig::SETTING_CSVOL_SIZE];
                                }
                                $disk->type = FarmRoleStorageConfig::TYPE_CSVOL;
                            } elseif ($config->type == FarmRoleStorageConfig::TYPE_RAID_GCE_PD) {
                                $disk->size = $config->settings[FarmRoleStorageConfig::SETTING_GCE_PD_SIZE];
                                $disk->type = FarmRoleStorageConfig::TYPE_GCE_PD;
                            } elseif ($config->type == FarmRoleStorageConfig::TYPE_RAID_CINDER) {
                                $disk->size = $config->settings[FarmRoleStorageConfig::SETTING_CINDER_SIZE];
                                $disk->type = FarmRoleStorageConfig::TYPE_CINDER;
                                if (!empty($config->settings[FarmRoleStorageConfig::SETTING_CINDER_VOLUME_TYPE])) {
                                    $disk->volumeType = $config->settings[FarmRoleStorageConfig::SETTING_CINDER_VOLUME_TYPE];
                                }
                            }
                            $volumeConfigTemplate->disks[] = $disk;
                        }
                        break;
                }
            }
            if (!$volume) {
                $volume = $volumeConfigTemplate;
            } elseif ($config->rebuild && $volume->id) {
                $volume->template = $volumeConfigTemplate;
                $volume->fromTemplateIfMissing = 1;
            }
            $volumes[] = $volume;
        }
        return $volumes;
    }

Usage Example

Example #1
0
 public function extendMessage(Scalr_Messaging_Msg $message, DBServer $dbServer)
 {
     if (in_array(ROLE_BEHAVIORS::BASE, $message->handlers)) {
         return $message;
     }
     if ($dbServer->farmRoleId) {
         $dbFarmRole = DBFarmRole::LoadByID($dbServer->farmRoleId);
     }
     switch (get_class($message)) {
         case "Scalr_Messaging_Msg_BeforeHostTerminate":
             //Storage
             try {
                 if ($dbFarmRole) {
                     $storage = new FarmRoleStorage($dbFarmRole);
                     $volumes = $storage->getVolumesConfigs($dbServer, false);
                     if (!empty($volumes)) {
                         $message->volumes = $volumes;
                     }
                 }
             } catch (Exception $e) {
                 $this->logger->error(new FarmLogMessage($dbServer->farmId, "Cannot init storage: {$e->getMessage()}"));
             }
             break;
         case "Scalr_Messaging_Msg_HostInit":
             $configuration = $this->getBaseConfiguration($dbServer, true, true);
             $message->base = $configuration->base;
             break;
         case "Scalr_Messaging_Msg_HostInitResponse":
             //Deployments
             try {
                 if ($dbFarmRole) {
                     $appId = $dbFarmRole->GetSetting(self::ROLE_DM_APPLICATION_ID);
                     if ($appId) {
                         $application = Scalr_Dm_Application::init()->loadById($appId);
                         $deploymentTask = Scalr_Dm_DeploymentTask::init();
                         $deploymentTask->create($dbServer->farmRoleId, $appId, $dbServer->serverId, Scalr_Dm_DeploymentTask::TYPE_AUTO, $dbFarmRole->GetSetting(self::ROLE_DM_REMOTE_PATH), $dbServer->envId, Scalr_Dm_DeploymentTask::STATUS_DEPLOYING);
                         $message->deploy = $deploymentTask->getDeployMessageProperties();
                     }
                 }
             } catch (Exception $e) {
                 $this->logger->error(new FarmLogMessage($dbServer->farmId, "Cannot init deployment: {$e->getMessage()}"));
             }
             $configuration = $this->getBaseConfiguration($dbServer, true);
             if ($configuration->volumes) {
                 $message->volumes = $configuration->volumes;
             }
             $message->base = $configuration->base;
             break;
     }
     $message->handlers[] = ROLE_BEHAVIORS::BASE;
     return $message;
 }
All Usage Examples Of Scalr\Farm\Role\FarmRoleStorage::getVolumesConfigs