Scalr\Modules\Platforms\Openstack\OpenstackPlatformModule::determineServerIps PHP Method

determineServerIps() public method

public determineServerIps ( OpenStack $client, $server )
$client Scalr\Service\OpenStack\OpenStack
    public function determineServerIps(OpenStack $client, $server)
    {
        $publicNetworkName = 'public';
        $privateNetworkName = 'private';
        $remoteIp = null;
        $localIp = null;
        $publicNetworkIpAddresses = null;
        $privateNetworkIpAddresses = null;
        if (!empty($server->addresses->{$publicNetworkName})) {
            $publicNetworkIpAddresses = $server->addresses->{$publicNetworkName};
        }
        if (!empty($server->addresses->{$privateNetworkName})) {
            $privateNetworkIpAddresses = $server->addresses->{$privateNetworkName};
        }
        // Use this method only if network has 1 IP address
        if (is_array($publicNetworkIpAddresses) && count($publicNetworkIpAddresses) == 1) {
            foreach ($server->addresses->{$publicNetworkName} as $addr) {
                if ($addr->version == 4) {
                    $remoteIp = $addr->addr;
                    break;
                }
            }
        }
        // Use this method only if network has 1 IP address
        if (is_array($privateNetworkIpAddresses) && count($privateNetworkIpAddresses) == 1) {
            foreach ($server->addresses->{$privateNetworkName} as $addr) {
                if ($addr->version == 4) {
                    $localIp = $addr->addr;
                    break;
                }
            }
        }
        if (empty($localIp) && !empty($remoteIp)) {
            $localIp = $remoteIp;
        }
        if (empty($localIp) && empty($remoteIp)) {
            $addresses = (array) $server->addresses;
            $addresses = array_shift($addresses);
            if (is_array($addresses)) {
                foreach ($addresses as $address) {
                    if ($address->version == 4) {
                        if (isset($address->{'OS-EXT-IPS:type'}) && $address->{'OS-EXT-IPS:type'} == 'floating') {
                            $remoteIp = $address->addr;
                        } else {
                            if (strpos($address->addr, "10.") === 0 || strpos($address->addr, "192.168") === 0) {
                                $localIp = $address->addr;
                            } else {
                                $remoteIp = $address->addr;
                            }
                        }
                    }
                }
            }
        }
        return array('localIp' => $localIp, 'remoteIp' => $remoteIp);
    }