Scalr\Modules\Platforms\Cloudstack\Observers\CloudstackObserver::OnHostInit PHP Метод

OnHostInit() публичный Метод

public OnHostInit ( HostInitEven\HostInitEvent $event )
$event HostInitEven\HostInitEvent
    public function OnHostInit(HostInitEvent $event)
    {
        if (!in_array($event->DBServer->platform, array(\SERVER_PLATFORMS::CLOUDSTACK, \SERVER_PLATFORMS::IDCF))) {
            return;
        }
        if ($event->DBServer->farmRoleId) {
            $dbFarmRole = $event->DBServer->GetFarmRoleObject();
            if ($dbFarmRole->GetSetting(Entity\FarmRoleSetting::CLOUDSTACK_USE_STATIC_NAT)) {
                CloudstackHelper::setStaticNatForServer($event->DBServer);
                return true;
            }
            $networkType = $dbFarmRole->GetSetting(Entity\FarmRoleSetting::CLOUDSTACK_NETWORK_TYPE);
            $networkId = $dbFarmRole->GetSetting(Entity\FarmRoleSetting::CLOUDSTACK_NETWORK_ID);
            if ($networkType == 'Direct' || !$networkId) {
                return true;
            }
            if ($networkId == 'SCALR_MANUAL') {
                $map = $dbFarmRole->GetSetting(Entity\FarmRoleSetting::CLOUDSTACK_STATIC_NAT_PRIVATE_MAP);
                $map = explode(";", $map);
                foreach ($map as $ipMapping) {
                    $ipInfo = explode("=", $ipMapping);
                    if ($ipInfo[0] == $event->DBServer->localIp) {
                        $event->DBServer->remoteIp = $ipInfo[1];
                        $event->DBServer->Save();
                    }
                }
            }
            $sharedIpId = $dbFarmRole->GetSetting(Entity\FarmRoleSetting::CLOUDSTACK_SHARED_IP_ID);
        }
        try {
            $environment = $event->DBServer->GetEnvironmentObject();
            $cloudLocation = $event->DBServer->GetCloudLocation();
            if (empty($sharedIpId)) {
                $sharedIpId = $environment->keychain($event->DBServer->platform)->properties[Entity\CloudCredentialsProperty::CLOUDSTACK_SHARED_IP_ID . ".{$cloudLocation}"];
            }
            if (!$sharedIpId) {
                return;
            }
            $cs = $environment->cloudstack($event->DBServer->platform);
            // Create port forwarding rules for scalarizr
            $port = $environment->keychain($event->DBServer->platform)->properties[Entity\CloudCredentialsProperty::CLOUDSTACK_SZR_PORT_COUNTER . ".{$cloudLocation}.{$sharedIpId}"];
            if (!$port) {
                $port1 = 30000;
                $port2 = 30001;
                $port3 = 30002;
                $port4 = 30003;
            } else {
                $port1 = $port + 1;
                $port2 = $port1 + 1;
                $port3 = $port2 + 1;
                $port4 = $port3 + 1;
            }
            $cs->firewall->createPortForwardingRule(array('ipaddressid' => $sharedIpId, 'privateport' => 8014, 'protocol' => "udp", 'publicport' => $port1, 'virtualmachineid' => $event->DBServer->GetProperty(\CLOUDSTACK_SERVER_PROPERTIES::SERVER_ID)));
            $cs->firewall->createPortForwardingRule(array('ipaddressid' => $sharedIpId, 'privateport' => 8013, 'protocol' => "tcp", 'publicport' => $port1, 'virtualmachineid' => $event->DBServer->GetProperty(\CLOUDSTACK_SERVER_PROPERTIES::SERVER_ID)));
            $cs->firewall->createPortForwardingRule(array('ipaddressid' => $sharedIpId, 'privateport' => 8010, 'protocol' => "tcp", 'publicport' => $port3, 'virtualmachineid' => $event->DBServer->GetProperty(\CLOUDSTACK_SERVER_PROPERTIES::SERVER_ID)));
            $cs->firewall->createPortForwardingRule(array('ipaddressid' => $sharedIpId, 'privateport' => 8008, 'protocol' => "tcp", 'publicport' => $port2, 'virtualmachineid' => $event->DBServer->GetProperty(\CLOUDSTACK_SERVER_PROPERTIES::SERVER_ID)));
            $cs->firewall->createPortForwardingRule(array('ipaddressid' => $sharedIpId, 'privateport' => 22, 'protocol' => "tcp", 'publicport' => $port4, 'virtualmachineid' => $event->DBServer->GetProperty(\CLOUDSTACK_SERVER_PROPERTIES::SERVER_ID)));
            $event->DBServer->SetProperties(array(SERVER_PROPERTIES::SZR_CTRL_PORT => $port1, SERVER_PROPERTIES::SZR_SNMP_PORT => $port1, SERVER_PROPERTIES::SZR_API_PORT => $port3, SERVER_PROPERTIES::SZR_UPDC_PORT => $port2, SERVER_PROPERTIES::CUSTOM_SSH_PORT => $port4));
            $environment->keychain($event->DBServer->platform)->properties->saveSettings([Entity\CloudCredentialsProperty::CLOUDSTACK_SZR_PORT_COUNTER . ".{$cloudLocation}.{$sharedIpId}" => $port4]);
        } catch (Exception $e) {
            $this->Logger->fatal(new FarmLogMessage(!empty($this->FarmID) ? $this->FarmID : null, sprintf(_("Cloudstack handler failed: %s."), $e->getMessage()), !empty($event->DBServer->serverId) ? $event->DBServer->serverId : null, !empty($event->DBServer->envId) ? $event->DBServer->envId : null, !empty($event->DBServer->farmRoleId) ? $event->DBServer->farmRoleId : null));
        }
    }