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;
}
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; }