Google Compute API: новый экземпляр с внешним IP - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь динамически создавать экземпляры Compute в Google Cloud через PHP с помощью API.

Используя пример csmartinez Cloud API , мне удалось создать свой экземпляр и увидеть, что он работает в консоли Google.

Мне нужно назначить внешний IP-адрес этому новомусозданный экземпляр.Основываясь на API и библиотеке Google PHP, я добавил:

$ipName = "foo";
$addr = new Google_Service_Compute_Address();
$addr->setName($ipName);
$response = $service->addresses->insert($project, $ipZone, $addr);

Поскольку этот вызов сначала имеет статус «ожидающий», я добавил sleep (5), чтобы затем получить вновь созданную статическуюIP:

$response = $service->addresses->get($project, $ipZone, $ipName);
$ip = $response->address;

, который работает хорошо и дает мне правильный IP-адрес.Затем я продолжаю и пытаюсь создать свой экземпляр при назначении нового IP-адреса:

$networkConfig = new Google_Service_Compute_AccessConfig();
$networkConfig->setNatIP($ip);
$networkConfig->setType("ONE_TO_ONE_NAT");
$networkConfig->setName("External NAT");
$googleNetworkInterfaceObj->setAccessConfigs($networkConfig);

Статический IP-адрес создан, экземпляр создан, но IP-адрес не назначен экземпляру.Чтобы устранить мои сомнения в статусе ожидания, я также попытался назначить уже созданный статический IP-адрес своему экземпляру, используя, таким образом:

$networkConfig->setNatIP("xxx.xxx.xxx.xxx");

Безуспешно ... Чего мне здесь не хватает?

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

это будет целая процедура, которая назначает сеть:

$instance = new Google_Instance();
$instance->setKind("compute#instance");

$accessConfig = new Google_AccessConfig();
$accessConfig->setName("External NAT");
$accessConfig->setType("ONE_TO_ONE_NAT");

$network = new Google_NetworkInterface();
$network->setNetwork($this->getObjectUrl($networkName, 'networks', $environment->getPlatformConfigValue(self::PROJECT_ID)));
$network->setAccessConfigs(array($accessConfig));

$instance->setNetworkInterfaces(array($network));

$addr->setName() только косметический; попробуйте $addr->setAddress($ipAddress).

думаю, что Google_NetworkInterface потребуется назначенное $addr.

извините, в настоящее время у вас нет запасного IP-адреса и вы не хотите платить только за предоставление кода.

0 голосов
/ 12 сентября 2018

Я думаю, что эта строка:

$googleNetworkInterfaceObj->setAccessConfigs($networkConfig);

должна быть:

$googleNetworkInterfaceObj->setAccessConfigs(array($networkConfig));

Если это не сработает, может быть другая ошибка где-то еще.

...