Scalr\Farm\Role\FarmRoleStorageConfig::apply PHP Method

apply() public method

Apply properties from config to object
public apply ( array $config ) : FarmRoleStorageConfig
$config array Storage config
return FarmRoleStorageConfig
    public function apply(array $config)
    {
        $settings = [];
        $type = $config['type'];
        if ($type == self::TYPE_CSVOL || $type == self::TYPE_RAID_CSVOL) {
            $settings[self::SETTING_CSVOL_SNAPSHOT] = $config['settings'][self::SETTING_CSVOL_SNAPSHOT];
            $settings[self::SETTING_CSVOL_SIZE] = intval($config['settings'][self::SETTING_CSVOL_SIZE]);
            $settings[self::SETTING_CSVOL_DISK_OFFERING] = $config['settings'][self::SETTING_CSVOL_DISK_OFFERING];
            $settings[self::SETTING_CSVOL_DISK_OFFERING_TYPE] = $config['settings'][self::SETTING_CSVOL_DISK_OFFERING_TYPE];
        } elseif ($type == self::TYPE_CINDER || $type == self::TYPE_RAID_CINDER) {
            $settings[self::SETTING_CINDER_SNAPSHOT] = $config['settings'][self::SETTING_CINDER_SNAPSHOT];
            $settings[self::SETTING_CINDER_VOLUME_TYPE] = $config['settings'][self::SETTING_CINDER_VOLUME_TYPE];
            $settings[self::SETTING_CINDER_SIZE] = intval($config['settings'][self::SETTING_CINDER_SIZE]);
        } elseif ($type == self::TYPE_GCE_PD || $type == self::TYPE_RAID_GCE_PD) {
            $settings[self::SETTING_GCE_PD_SNAPSHOT] = $config['settings'][self::SETTING_GCE_PD_SNAPSHOT];
            $settings[self::SETTING_GCE_PD_SIZE] = intval($config['settings'][self::SETTING_GCE_PD_SIZE]);
            if (isset($config['settings'][self::SETTING_GCE_PD_TYPE])) {
                $settings[self::SETTING_GCE_PD_TYPE] = $config['settings'][self::SETTING_GCE_PD_TYPE];
            }
        } elseif ($type == self::TYPE_EBS || $type == self::TYPE_RAID_EBS) {
            $settings[self::SETTING_EBS_SIZE] = intval($config['settings'][self::SETTING_EBS_SIZE]);
            $settings[self::SETTING_EBS_TYPE] = $config['settings'][self::SETTING_EBS_TYPE];
            $settings[self::SETTING_EBS_SNAPSHOT] = $config['settings'][self::SETTING_EBS_SNAPSHOT];
            if ($settings[self::SETTING_EBS_TYPE] == 'io1') {
                $settings[self::SETTING_EBS_IOPS] = intval($config['settings'][self::SETTING_EBS_IOPS]);
            }
            if ($type == self::TYPE_EBS) {
                $settings[self::SETTING_EBS_ENCRYPTED] = !empty($config['settings'][self::SETTING_EBS_ENCRYPTED]) ? 1 : 0;
                if ($settings[self::SETTING_EBS_ENCRYPTED] && !empty($config['settings'][self::SETTING_EBS_KMS_KEY_ID])) {
                    $settings[self::SETTING_EBS_KMS_KEY_ID] = $config['settings'][self::SETTING_EBS_KMS_KEY_ID];
                }
            }
        } elseif ($type == self::TYPE_EC2_EPHEMERAL) {
            $settings[self::SETTING_EC2_EPHEMERAL_NAME] = $config['settings'][self::SETTING_EC2_EPHEMERAL_NAME];
            $settings[self::SETTING_EC2_EPHEMERAL_SIZE] = intval($config['settings'][self::SETTING_EC2_EPHEMERAL_SIZE]);
        } elseif ($type == self::TYPE_GCE_EPHEMERAL) {
            $settings[self::SETTING_GCE_EPHEMERAL_NAME] = $config['settings'][self::SETTING_GCE_EPHEMERAL_NAME];
            $settings[self::SETTING_GCE_EPHEMERAL_SIZE] = intval($config['settings'][self::SETTING_GCE_EPHEMERAL_SIZE]);
        }
        $settings[self::SETTING_RAID_LEVEL] = $config['settings'][self::SETTING_RAID_LEVEL];
        $settings[self::SETTING_RAID_VOLUMES_COUNT] = $config['settings'][self::SETTING_RAID_VOLUMES_COUNT];
        $this->id = $config['id'];
        $this->type = $type;
        $this->fs = $config['fs'];
        $this->status = $config['status'];
        $this->reUse = !empty($config['reUse']) ? 1 : NULL;
        $this->rebuild = !empty($config['rebuild']) ? 1 : NULL;
        $this->mount = !empty($config['mount']) ? 1 : NULL;
        $this->mountPoint = $config['mountPoint'];
        $this->mountOptions = $config['mountOptions'];
        $this->label = $config['label'];
        $this->settings = $settings;
        return $this;
    }

Usage Example

Example #1
0
 /**
  * Save storage configs
  *
  * @param   array   $configs    Array of storage config
  * @param   bool    $validate   optional    If true validate config before save
  * @throws  FarmRoleStorageException
  */
 public function setConfigs($configs, $validate = true)
 {
     $configs = is_array($configs) ? $configs : [];
     $ephemeralEc2 = [];
     $ephemeralGce = [];
     foreach ($configs as $value) {
         if (!is_array($value) || !is_array($value['settings'])) {
             continue;
         }
         $object = new FarmRoleStorageConfig($this->farmRole);
         $object->apply($value);
         if ($validate) {
             $r = $object->validate();
             if ($r !== true) {
                 throw new FarmRoleStorageException($r);
             }
         }
         $config = new FarmRoleStorageConfig($this->farmRole);
         $config->create($object);
         if ($config->type == FarmRoleStorageConfig::TYPE_EC2_EPHEMERAL) {
             $ephemeralEc2[$config->settings[FarmRoleStorageConfig::SETTING_EC2_EPHEMERAL_NAME]] = $config->id;
         } else {
             if ($config->type == FarmRoleStorageConfig::TYPE_GCE_EPHEMERAL) {
                 $ephemeralGce[$config->settings[FarmRoleStorageConfig::SETTING_GCE_EPHEMERAL_NAME]] = $config->id;
             }
         }
     }
     // validate ephemeral configs
     foreach (self::getConfigs() as $config) {
         if ($config->type == FarmRoleStorageConfig::TYPE_EC2_EPHEMERAL) {
             $name = $config->settings[FarmRoleStorageConfig::SETTING_EC2_EPHEMERAL_NAME];
             if (!isset($ephemeralEc2[$name]) || $ephemeralEc2[$name] != $config->id) {
                 $config->delete();
             }
         } else {
             if ($config->type == FarmRoleStorageConfig::TYPE_GCE_EPHEMERAL) {
                 $name = $config->settings[FarmRoleStorageConfig::SETTING_GCE_EPHEMERAL_NAME];
                 if (!isset($ephemeralGce[$name]) || $ephemeralGce[$name] != $config->id) {
                     $config->delete();
                 }
             }
         }
     }
 }