Scalr\System\Zmq\Cron\Task\ScalarizrMessaging::onHello PHP Method

onHello() private method

private onHello ( $message, DBServer $dbserver )
$dbserver DBServer
    private function onHello($message, DBServer $dbserver)
    {
        $logger = \Scalr::getContainer()->logger(__CLASS__);
        $update = [];
        if ($dbserver->status == SERVER_STATUS::TEMPORARY) {
            $bundleTask = BundleTask::LoadById($dbserver->GetProperty(SERVER_PROPERTIES::SZR_IMPORTING_BUNDLE_TASK_ID));
            $bundleTask->status = SERVER_SNAPSHOT_CREATION_STATUS::PENDING;
            $bundleTask->Log("Received Hello message from scalarizr on server. Creating image");
            $bundleTask->osFamily = $message->dist->distributor;
            $bundleTask->osName = $message->dist->codename;
            $bundleTask->osVersion = $message->dist->release;
            $bundleTask->designateType($dbserver->platform, $bundleTask->osFamily, null, $bundleTask->osVersion);
            $bundleTask->save();
        }
        if ($dbserver->status == SERVER_STATUS::IMPORTING) {
            if (!$dbserver->remoteIp || !$dbserver->localIp) {
                if (!$dbserver->remoteIp && $message->remoteIp && $dbserver->platform != SERVER_PLATFORMS::IDCF) {
                    $update['remoteIp'] = $message->remoteIp;
                }
                if (!$dbserver->localIp && $message->localIp) {
                    $update['localIp'] = $message->localIp;
                }
                if (!$message->behaviour) {
                    $message->behaviour = array('base');
                }
            }
            if (count($message->behaviour) == 1 && $message->behaviour[0] == ROLE_BEHAVIORS::CHEF) {
                $message->behaviour[] = ROLE_BEHAVIORS::BASE;
            }
            $dbserver->SetProperty(SERVER_PROPERTIES::SZR_IMPORTING_BEHAVIOR, @implode(",", $message->behaviour));
            if (!empty($update)) {
                $dbserver->update($update);
            }
            $importVersion = $dbserver->GetProperty(SERVER_PROPERTIES::SZR_IMPORTING_VERSION);
            if ($importVersion == 2) {
                $dbserver->SetProperties(array(SERVER_PROPERTIES::ARCHITECTURE => $message->architecture));
            } else {
                if ($dbserver->isOpenstack()) {
                    $env = $dbserver->GetEnvironmentObject();
                    $os = $env->openstack($dbserver->platform, $dbserver->GetProperty(OPENSTACK_SERVER_PROPERTIES::CLOUD_LOCATION));
                    $list = $os->servers->list(true);
                    do {
                        foreach ($list as $_tmp) {
                            $ipaddresses = array();
                            if (!is_array($_tmp->addresses)) {
                                $_tmp->addresses = (array) $_tmp->addresses;
                            }
                            foreach ($_tmp->addresses as $net => $addresses) {
                                foreach ($addresses as $addr) {
                                    if ($addr->version == 4) {
                                        array_push($ipaddresses, $addr->addr);
                                    }
                                }
                            }
                            if ($_tmp->accessIPv4) {
                                array_push($ipaddresses, $_tmp->accessIPv4);
                            }
                            if (in_array($dbserver->localIp, $ipaddresses) || in_array($dbserver->remoteIp, $ipaddresses)) {
                                $osServer = $_tmp;
                            }
                        }
                    } while (false !== ($list = $list->getNextPage()));
                    if (!$osServer) {
                        $logger->error(sprintf("Server not found on Openstack (server_id: %s, remote_ip: %s, local_ip: %s)", $dbserver->serverId, $dbserver->remoteIp, $dbserver->localIp));
                        return;
                    }
                    $dbserver->SetProperties(array(OPENSTACK_SERVER_PROPERTIES::SERVER_ID => $osServer->id, OPENSTACK_SERVER_PROPERTIES::NAME => $osServer->name, OPENSTACK_SERVER_PROPERTIES::IMAGE_ID => $osServer->image->id, OPENSTACK_SERVER_PROPERTIES::HOST_ID => $osServer->hostId, SERVER_PROPERTIES::ARCHITECTURE => $message->architecture));
                    $dbserver->setType($osServer->flavor->id);
                } elseif ($dbserver->isCloudstack()) {
                    $dbserver->SetProperties(array(CLOUDSTACK_SERVER_PROPERTIES::SERVER_ID => $message->cloudstack->instanceId, CLOUDSTACK_SERVER_PROPERTIES::CLOUD_LOCATION => $message->cloudstack->availZone, SERVER_PROPERTIES::ARCHITECTURE => $message->architecture));
                } else {
                    switch ($dbserver->platform) {
                        case SERVER_PLATFORMS::EC2:
                            $dbserver->SetProperties(array(EC2_SERVER_PROPERTIES::AMIID => $message->awsAmiId, EC2_SERVER_PROPERTIES::INSTANCE_ID => $message->awsInstanceId, EC2_SERVER_PROPERTIES::AVAIL_ZONE => $message->awsAvailZone, EC2_SERVER_PROPERTIES::REGION => substr($message->awsAvailZone, 0, -1), SERVER_PROPERTIES::ARCHITECTURE => $message->architecture));
                            $dbserver->setType($message->awsInstanceType);
                            break;
                        case SERVER_PLATFORMS::GCE:
                            $dbserver->SetProperties(array(GCE_SERVER_PROPERTIES::CLOUD_LOCATION => $message->{$dbserver->platform}->cloudLocation, GCE_SERVER_PROPERTIES::SERVER_ID => $message->{$dbserver->platform}->serverId, GCE_SERVER_PROPERTIES::SERVER_NAME => $message->{$dbserver->platform}->serverName, SERVER_PROPERTIES::ARCHITECTURE => $message->architecture));
                            $dbserver->setType($message->{$dbserver->platform}->machineType);
                            break;
                    }
                }
            }
            //TODO: search for existing bundle task
            // Bundle image
            $creInfo = new ServerSnapshotCreateInfo($dbserver, $dbserver->GetProperty(SERVER_PROPERTIES::SZR_IMPORTING_ROLE_NAME), SERVER_REPLACEMENT_TYPE::NO_REPLACE, $dbserver->GetProperty(SERVER_PROPERTIES::SZR_IMPORTING_OBJECT));
            $bundleTask = BundleTask::Create($creInfo);
            $bundleTask->osFamily = $message->dist->distributor;
            $bundleTask->osName = $message->dist->codename;
            $bundleTask->osVersion = $message->dist->release;
            $bundleTask->designateType($dbserver->platform, $bundleTask->osFamily, null, $bundleTask->osVersion);
            $bundleTask->setDate("started");
            $bundleTask->createdByEmail = $dbserver->GetProperty(SERVER_PROPERTIES::LAUNCHED_BY_EMAIL);
            $bundleTask->createdById = $dbserver->GetProperty(SERVER_PROPERTIES::LAUNCHED_BY_ID);
            if ($importVersion == 2) {
                $bundleTask->status = SERVER_SNAPSHOT_CREATION_STATUS::ESTABLISHING_COMMUNICATION;
            }
            $bundleTask->Save();
            $dbserver->SetProperty(SERVER_PROPERTIES::SZR_IMPORTING_BUNDLE_TASK_ID, $bundleTask->id);
        }
    }