public function OnBeforeInstanceLaunch(\BeforeInstanceLaunchEvent $event)
{
if ($event->DBServer->platform != \SERVER_PLATFORMS::EC2) {
return;
}
$DBFarm = $event->DBServer->GetFarmObject();
$DBFarmRole = $event->DBServer->GetFarmRoleObject();
// Create EBS volume for MySQLEBS
if (!$event->DBServer->IsSupported("0.6")) {
// Only for old AMIs
if ($DBFarmRole->GetRoleObject()->hasBehavior(\ROLE_BEHAVIORS::MYSQL) && $DBFarmRole->GetSetting(Entity\FarmRoleSetting::MYSQL_DATA_STORAGE_ENGINE) == \MYSQL_STORAGE_ENGINE::EBS) {
$server = $event->DBServer;
$masterServer = $DBFarm->GetMySQLInstances(true);
$isMaster = !$masterServer || $masterServer[0]->serverId == $server->serverId;
$farmMasterVolId = $DBFarmRole->GetSetting(Entity\FarmRoleSetting::MYSQL_MASTER_EBS_VOLUME_ID);
$createEbs = $isMaster && !$farmMasterVolId;
if ($createEbs) {
\Scalr::getContainer()->logger(\LOG_CATEGORY::FARM)->info(new FarmLogMessage($event->DBServer, sprintf("Need EBS volume for MySQL %s instance...", $isMaster ? "Master" : "Slave")));
$req = new CreateVolumeRequestData($event->DBServer->GetProperty(\EC2_SERVER_PROPERTIES::AVAIL_ZONE), $DBFarmRole->GetSetting(Entity\FarmRoleSetting::MYSQL_EBS_VOLUME_SIZE));
$aws = $event->DBServer->GetEnvironmentObject()->aws($DBFarmRole->CloudLocation);
$res = $aws->ec2->volume->create($req);
if (!empty($res->volumeId)) {
$DBFarmRole->SetSetting(Entity\FarmRoleSetting::MYSQL_MASTER_EBS_VOLUME_ID, $res->volumeId, Entity\FarmRoleSetting::TYPE_LCL);
\Scalr::getContainer()->logger(\LOG_CATEGORY::FARM)->info(new FarmLogMessage($event->DBServer, sprintf("MySQL %S volume created. Volume ID: %s...", $isMaster ? "Master" : "Slave", !empty($res->volumeId) ? $res->volumeId : null)));
}
}
}
}
}