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);
}