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