【发布时间】:2021-09-23 10:36:11
【问题描述】:
我尝试创建一个脚本来监控 openstack,为此我使用文档示例创建了一个令牌:
https://docs.openstack.org/api-quick-start/api-quick-start.html#openstack-api-quick-guide
$ curl -v -s -X POST $OS_AUTH_URL/auth/tokens?nocatalog -H "Content-Type: application/json" -d '{ "auth": { "identity": { "methods": ["password"],"password": {"user": {"domain": {"name": "'"$OS_USER_DOMAIN_NAME"'"},"name": "'"$OS_USERNAME"'", "password": "'"$OS_PASSWORD"'"} } }, "scope": { "project": { "domain": { "name": "'"$OS_PROJECT_DOMAIN_NAME"'" }, "name": "'"$OS_PROJECT_NAME"'" } } }}' \
| python -m json.tool
它会毫无问题地为我创建它,如果我使用 curl 进行调用,它会通过终端返回数据
for example with:
$ curl -s -H "X-Auth-Token: $OS_TOKEN" \
$OS_COMPUTE_API/flavors \
| python -m json.tool
我想要的是放置我通过参数生成的令牌并将数据返回给我,问题似乎是我没有检测到令牌,因为它不会在请求中给我连接问题,只是没有对我进行身份验证,也没有加载正确的 json,所以我有代码
parser = argparse.ArgumentParser(description= info, formatter_class=argparse.RawTextHelpFormatter)
parser.add_argument('-t', '--token', help='openstack api token', required=True)
args = parser.parse_args()
user_token = args.token
headers = {
'Content-Type': 'application/json',
'Authorization':'X-Auth-Token ' + user_token
}
# request url
req = {
"flavors": "http://myip/v2.1/flavors",
"images": "http://myip/v2.1/7d8fed2119e04ee79e15b5a2fac2f5da/images "
}
# get account data
try:
result = requests.get(req["images"], headers=headers)
result_data = json.loads(result.content)
except Exception as e :
print('0')
sys.exit("\nError requesting %s, please check conectivity" %(req["images"],))
if 'errors' in result_data :
print('0')
sys.exit(F'Error token, please check token: {result_data}')
clean_agent()
agent.update(
agent_name = "Openstack_images_%s" ,
agent_alias = "Openstack_images %s" ,
description = "ID "
)
clean_module()
modulo.update(
name = "Openstack_image disk:",
desc = "Openstack image is %s " %str(result_data['images']['minDisk'] ),
value = str(result_data['images']['minDisk']),
)
返回给我:
Traceback(最近一次调用最后一次): 文件“openstack.py”,第 243 行,在 desc = "Openstack 图像是 %s " %str(result_data['images']['minDisk'] ), KeyError: '图片'
我知道这是身份验证,因为如果您在未进行身份验证的情况下进入端点,则会得到以下 json: {"error": {"message": "您发出的请求需要认证。", "code": 401, "title": "Unauthorized"}}
我尝试将模块中的“图像”更改为“错误”,我得到了这个 回溯(最近一次通话最后): 文件“openstack.py”,第 243 行,在 desc = "Openstack 映像是 %s" %str(result_data['error']['minDisk'] ), KeyError: 'minDisk'
所以验证时一定是错误,我运行脚本:python3 openstack.py -t
我不知道是否有人可以帮助我,我不知道我的标题是错误的还是其他原因。
【问题讨论】:
-
'Authorization':'X-Auth-Token ' + user_token看起来不像一个正确的标题。我原以为你需要'X-Auth-Token': user_token。但是,我不明白检索user_token的行。我会打印出所有相关变量的值。
标签: python api token openstack xauth