使用libcloud在azure上创建虚拟机或云服务?

时间:2015-05-15 14:02:47

标签: python azure cloud libcloud

当我创建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的例子,我将非常感激。 THX !!

1 个答案:

答案 0 :(得分: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。如果用result = ensure_string(ET.tostring(doc, encoding='utf-8'))替换当前github repo(e105433e941262e03eb3bb922db47dabdd8efa75)中的第2710行,那么它可以正常工作,encoding='utf8'是罪魁祸首,至少对我而言。

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