(问题)使用openstack XAuthToken在python脚本中进行身份验证

2024-09-29 23:18:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试创建一个脚本来监视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']),
)

返回给我:

回溯(最近一次呼叫最后一次): 文件“openstack.py”,第243行,在 desc=“Openstack映像是%s”%str(结果数据['images']['minDisk']), KeyError:“图像”

我知道这是身份验证,因为如果您进入端点而未进行身份验证,则会得到以下json: {“error”:{“message”:“您提出的请求需要身份验证。”,“code”:401,“title”:“Unauthorized”}

我试着将模块中的“图像”改为“错误”,我得到了这个结果 回溯(最近一次呼叫最后一次): 文件“openstack.py”,第243行,在 desc=“Openstack映像是%s”%str(结果数据['error']['minDisk']), KeyError:'minDisk'

因此,错误一定是在进行身份验证时,我使用:python3 openstack.py-t运行脚本

我不知道是否有人能帮我,我不知道我的头球是不是错了,或者是其他原因


Tags: 数据nametoken身份验证apijsondataopenstack
1条回答
网友
1楼 · 发布于 2024-09-29 23:18:29

请确保您使用指定其他资源的同一用户生成令牌。下面是生成令牌的示例代码

url=[您的云机器IP位于此处]

def gettokenForUser(username,password):

    payload1 = {
    "auth": {
        "identity": {
            "methods": [
                "password"
            ],
            "password": {
                "user": {
                    "name": username,
                    "domain": {
                        "name": "Default"
                    },
                    "password": password
                }
            }
        }
    }
    }

    response = requests.post('http://'+url+':5000/v3/auth/tokens',
                    headers={'content-type': 'application/json'},
                    data=json.dumps(payload1))

    return response.headers['X-Subject-Token']

相关问题 更多 >

    热门问题