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

validate() public method

Validate current object
public validate ( ) : string | true
return string | true Return true if object valid or string on error
    public function validate()
    {
        if (!in_array($this->type, [self::TYPE_RAID_EBS, self::TYPE_RAID_CSVOL, self::TYPE_RAID_CINDER, self::TYPE_EBS, self::TYPE_CSVOL, self::TYPE_CINDER, self::TYPE_GCE_PD, self::TYPE_RAID_GCE_PD, self::TYPE_EC2_EPHEMERAL, self::TYPE_GCE_EPHEMERAL])) {
            return '[Storage] Invalid type';
        }
        if ($this->type == self::TYPE_CINDER || $this->type == self::TYPE_RAID_CINDER) {
            if ($this->settings[self::SETTING_CINDER_SIZE] < 1 || $this->settings[self::SETTING_CINDER_SIZE] > 1024) {
                return 'Volume size should be from 1 to 1024 GB';
            }
        } elseif (($this->type == self::TYPE_GCE_PD || $this->type == self::TYPE_RAID_GCE_PD) && isset($this->settings[self::SETTING_GCE_PD_TYPE])) {
            if (!in_array($this->settings[self::SETTING_GCE_PD_TYPE], ['pd-standard', 'pd-ssd'])) {
                return 'Invalid GCE disk type';
            }
        } elseif ($this->type == self::TYPE_EBS || $this->type == self::TYPE_RAID_EBS) {
            if (!in_array($this->settings[self::SETTING_EBS_TYPE], [CreateVolumeRequestData::VOLUME_TYPE_STANDARD, CreateVolumeRequestData::VOLUME_TYPE_GP2, CreateVolumeRequestData::VOLUME_TYPE_IO1, CreateVolumeRequestData::VOLUME_TYPE_SC1, CreateVolumeRequestData::VOLUME_TYPE_ST1])) {
                return 'EBS type should be standard, gp2 or io1';
            }
            if ($this->settings[self::SETTING_EBS_TYPE] == CreateVolumeRequestData::VOLUME_TYPE_STANDARD && ($this->settings[self::SETTING_EBS_SIZE] < 1 || $this->settings[self::SETTING_EBS_SIZE] > 1024)) {
                return 'EBS size should be from 1 to 1024 GB';
            }
            if (in_array($this->settings[self::SETTING_EBS_TYPE], [CreateVolumeRequestData::VOLUME_TYPE_GP2, CreateVolumeRequestData::VOLUME_TYPE_SC1, CreateVolumeRequestData::VOLUME_TYPE_ST1]) && ($this->settings[self::SETTING_EBS_SIZE] < 1 || $this->settings[self::SETTING_EBS_SIZE] > 16384)) {
                return 'EBS size should be from 1 to 16384 GB';
            }
            if ($this->settings[self::SETTING_EBS_TYPE] == CreateVolumeRequestData::VOLUME_TYPE_IO1) {
                if ($this->settings[self::SETTING_EBS_IOPS] < 100 || $this->settings[self::SETTING_EBS_IOPS] > 20000) {
                    return 'EBS iops should be from 100 to 20000';
                }
                if ($this->settings[self::SETTING_EBS_IOPS] / $this->settings[self::SETTING_EBS_SIZE] > 30) {
                    return sprintf('Invalid ratio. You should increase volume size to %d GB or decrease volume iops to %d', (int) $this->settings[self::SETTING_EBS_IOPS] / 30, $this->settings[self::SETTING_EBS_SIZE] * 30);
                }
            }
            // TODO: validate KMS_KEY_ID
        }
        // TODO: validate raid, cvsol
        return true;
    }

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