Создать виртуальный или облачный сервис на Azure, используя libcloud?

У меня проблема с libcloud/drivers/azure.py, когда я создаю виртуальную машину или облачный сервис, я всегда получаю 400 неверных запросов без тела. Может ли кто-нибудь помочь мне выйти из этого, пожалуйста?

Вот мой код:

# connectHandler use my pem file to create a connection with the server, return a AzureNodeDriver objet
conn = _connectHandler.api_connect(compute_ressource)
try:
    result = conn.ex_create_cloud_service(name= "testCloudServiceZT200", location= "Central US")
except Exception as e:
    logger.error(e)
else:
    return result

и вот что я получил взамен:<LibcloudError in <libcloud.compute.drivers.azure.AzureNodeDriver object at 0x7fceaeb457d0> 'Message: Bad Request, Body: , Status code: 400'>

Может кто-нибудь, пожалуйста, скажите мне, почему эта ошибка, и, возможно, приведите несколько примеров azure.py, он будет очень благодарен. Спасибо!!

1 ответ

Решение

Драйвер Azure кажется очень новым, поскольку он даже не включен в последний выпуск, доступный через PyPI. У меня была такая же проблема, я использовал ipdb для просмотра запроса и XML, созданного драйвером Azure. Сначала я подумал, что нашел ряд проблем, но после просмотра источника, а не только вывода отладчика, все сводится к простому исправлению.

У меня работает следующий запрос curl:

curl -v -E {PATH_TO_PEM_FILE} -H 'x-ms-version: 2015-04-01' -H 'Content-Type: application/xml' -d '<?xml version="1.0" encoding="utf-8"?><CreateHostedService xmlns="http://schemas.microsoft.com/windowsazure"><ServiceName>test-cloudservice-libcloud-azure-driver</ServiceName><Label>dGVzdC1jbG91ZHNlcnZpY2UtbGliY2xvdWQtYXp1cmUtZHJpdmVyCg==</Label><Location>West Europe</Location></CreateHostedService>' https://management.core.windows.net/{SUBSCRIPTION_ID}/services/hostedservices

Но XML, сгенерированный драйвером Azure, содержит encoding='utf8', который не работает. Должно быть utf-8, Если вы замените строку 2710 в текущей главе репозитория github (e105433e941262e03eb3bb922db47dabdd8efa75) на result = ensure_string(ET.tostring(doc, encoding='utf-8')), оно работает, encoding='utf8' был виновником, по крайней мере, для меня.

Я открыл запрос на удаление, надеюсь, он также решит и вашу проблему: https://github.com/apache/libcloud/pull/538

Другие вопросы по тегам