У меня есть следующий скрипт PHP (это только нижняя половина):
use Guzzle\Http\Exception\BadResponseException;
$server = $compute->server();
try {
$response = $server->create(array(
'name' => 'My server',
'image' => $centos,
'flavor' => $twoGbFlavor
));
} catch (BadResponseException $e) {
// No! Something failed. Let's find out:
printf("Request: %s\n\nResponse: %s", $e->getRequest(), $e->getResponse());
}
use OpenCloud\Compute\Constants\ServerState;
$callback = function($server) {
if (!empty($server->error)) {
var_dump($server->error);
exit;
} else {
echo sprintf(
"Waiting on %s/%-12s %4s%%",
$server->name(),
$server->status(),
isset($server->progress) ? $server->progress : 0
);
}
};
$server->waitFor(ServerState::ACTIVE, 600, $callback);
Когда я запускаю его, я получаю следующую ошибку:
PHP Fatal error: Uncaught exception 'Guzzle\Http\Exception\CurlException' with message '[curl] 52: Empty reply from server [url] http://api.openstack.ecloud.co.uk:8774/v2/b7db5fe13c044b6e95bf5b766ae49393/servers/f5bf8951-f662-4940-904c-023b98b724c0' in /var/www/html/nutshell/openstack/vendor/guzzle/guzzle/src/Guzzle/Http/Curl/CurlMulti.php:359
Я сузил это до проблемы с методом waitFor, использующим http вместо https. Однако я не могу решить, как заставить этот метод использовать https или, если есть параметр, который я могу изменить, чтобы заставить все вызовы через https?
Кроме того, я попытался выполнить эти команды, используя curl в командной строке, вне сценария, и могу подтвердить, что https работает. Так что мне просто нужно разобраться, как заставить скрипт вызывать https.
Кроме того, обратите внимание, что вызов $ server-> create выше работает нормально, и я бы просто ожидал, что waitFor будет работать таким же образом (то есть через https).
Любая помощь приветствуется.
Вы создали сервер с https, получили ответ с данными сервера. Данные сервера содержат собственный URL, и этот URL, скорее всего, является http.
«waitFor» вызывает openstack для данных сервера с этим URL. Вы можете увидеть это здесь:
https://github.com/rackspace/php-opencloud/blob/working/lib/OpenCloud/Common/Resource/BaseResource.php (строка 148)
Других решений пока нет …