1

我在创建 VM 或云服务时遇到了 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 的例子,将不胜感激。谢谢!!

4

1 回答 1

0

Azure 驱动程序似乎很新,因为它甚至没有包含在通过 PyPI 提供的最新版本中。我遇到了同样的问题,使用 ipdb 查看 Azure 驱动程序创建的请求和 XML。起初我以为我发现了一些问题,但在查看源代码之后,不仅是调试器的输出,它归结为一个简单的修复。

以下 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

但是 Azure 驱动程序生成的 XML 包含encoding='utf8',这不起作用。它必须是utf-8。如果您将 github 存储库 (e105433e941262e03eb3bb922db47dabdd8efa75) 的当前头部中的第 2710 行替换为result = ensure_string(ET.tostring(doc, encoding='utf-8')),它可以工作,encoding='utf8'是罪魁祸首,至少对我来说是这样。

我已经打开了一个拉取请求,希望它也可以为您解决问题:https ://github.com/apache/libcloud/pull/538

于 2015-07-01T14:42:38.677 回答