python - 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, separators=(",",":")))
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”,“imageId”:“92bee304-a24f-4db5-9896-864da799f905”,“monthlyBilling”:false,“name”:“testinstance”,“region”:“BHS5”,“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)
推荐阅读
- java - 无法从 html 响应中提取属性
- math - 获取顶点之间的边(外多边形)
- json - .post 之前的法拉第 Json 验证
- powershell - 将文本文件重命名为内容文本(批处理)(powershell)
- email - 詹金斯 - 构建失败后发送电子邮件与多个收件人
- c# - 是否可以使用 CodeEffects 仅返回 rule 的文本?
- java - 我可以得到帮助来解决这个问题吗?
- powerapps - 日期功能不适用于 PowerApps 中的标签
- java - Java - 未为 do-while 循环初始化变量
- python - 向 matplotlib 中的图形添加文本