如何解决OVH Python API:创建实例不喜欢我的 JSON?
我正在尝试使用 python-ovh 来简单地创建一个实例,但它给我带来了麻烦。 API 文档实际上似乎发布了无效的 Python 代码(至少对于 python3 而言……),我不确定我做错了什么。我相信我传递的是正确的 JSON,但 API 不喜欢它。我也很难通过搜索找到示例代码。
我的代码:
self.inst = {}
self.inst['flavorId'] = self.flavorid
self.inst['imageId'] = self.imageid
self.inst['name'] = self.name
self.inst['region'] = self.region
self.inst['monthlyBilling'] = False
try:
self.instance = client.post("/cloud/project/" + self.servicename + "/instance",json.dumps(self.inst,separators=(",",":"))
)
except ovh.APIError as e:
print("JSON: " + json.dumps(self.inst,":")))
print("Ooops,Failed to create instance:",e)
调试输出:
JSON: {“flavorId”:“14c5fa3f-fdad-45c4-9cd1-14dd99c341ee”,“imageId”:“92bee304-a24f-4db5-9896-864da799f905”,“name”:“ovhcloud-test-1”,“region”:“BHS5”,“monthlyBilling”:false}
Ooops,Failed to create instance: Missing parameter(s): flavorId,name,region \nOVH-Query-ID: CA.ext-3.6101d265.2209.d74765fb-6227-4105-a24b-c46c74f3e508\n"
API 文档告诉我这样做:
result = client.post(’/cloud/project/xxxxxx/instance’,=’{“flavorId”:“14c5fa3f-fdad-45c4-9cd1-14dd99c34”,“monthlyBilling”:false,“name”:“testinstance”,“userData”:“testdata”}’,// Request Body (type: cloud.ProjectInstanceCreation)
)
但这会导致语法错误并且也不适用于变量替换。
谁能帮我告诉我我做错了什么?
解决方法
在 client.post()
参数中,您必须明确给出每个参数。 Python 客户端已成功转换为 JSON,因此您不必自己管理 json.dumps()
。
这是一个通过 Python 客户端调用 OVH API 来创建云实例的工作示例:
#!/usr/bin/env python
import ovh
client = ovh.Client(
endpoint='ovh-eu',application_key='my_app_key',application_secret='my_secret_key',consumer_key='my_consumer_key'
)
project_id = 'my_cloud_project_id'
try:
instance = client.post(
'/cloud/project/' + project_id + '/instance',flavorId='d145323c-2fe7-4084-98d8-f65c54bbbaf4',name='my_instance_name',region='GRA5',imageId='a125424e-3d5c-4276-a8ad-adf852ce1771',monthlyBilling=False
)
except ovh.APIError as e:
print('ERROR: ')
print(e)
如果你想给一个 Python 字典作为参数(就像你在你的例子中试过的那样),可能是这样的:
instance_creation_params = {
'flavorId': 'd145323c-2fe7-4084-98d8-f65c54bbbaf4','name': 'my_instance_name','region':'GRA5','imageId': 'a125424e-3d5c-4276-a8ad-adf852ce1771','monthlyBilling': False
}
try:
instance = client.post(
'/cloud/project/' + project_id + '/instance',**instance_creation_params
)
except ovh.APIError as e:
print('ERROR: ')
print(e)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。