Scalr\Modules\Platforms\Ec2\Observers\EbsObserver::OnBeforeInstanceLaunch PHP Method

OnBeforeInstanceLaunch() public method

See also: Scalr\Observer\AbstractEventObserver::OnBeforeInstanceLaunch()
public OnBeforeInstanceLaunch ( BeforeInstanceLaunchEvent $event )
$event BeforeInstanceLaunchEvent
    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)));
                    }
                }
            }
        }
    }