0penStack 资源管理的客户端程序开发

OpenStack 资源管理的客户端程序开发
使用已建好的 OpenStack Python 运维开发环境,在 root 目录下创建resource_manager.py 脚本,基于 OpenStack 资源配额管理服务封装客户端工具,resource_manager.py 程序支持命令行带参数执行,命令参数要求说明如下:

(1) 位置参数“command”,表示操作类型。操作类型包括“list”:标识查看所有的对象;“get”:查询指定的对象。

(2) 位置参数“resource”,表示资源信息类型:类型包括 “provider”:资源提供者;“inventory”:资源库存;“usage”:资源使用情况。

(3) 参数“-p 或-- provider”,标识资源提供者的名称。功能要求如下:

(1) 程序查询所有资源提供者,以 json 格式控制台输出。执行实例如下: python3 resource_manager.py list provider

(2) 查询指定资源提供者的资源信息,以 json 格式控制台输出。执行实例如下: python3 resource_manager.py get provider -p “providername”

(3) 查询指定资源提供者的资源库存信息,以 json 格式控制台输出。执行实例如下: python3 resource_manager.py get inventory -p “providername”

(4) 查询指定资源提供者的资源使用信息,以 json 格式控制台输出。

执行实例如下: python3 resource_manager.py get usage -p “providername”

import requests, argparse

head = {'Content-Type': 'application/json', 'X-Auth-Token': "gAAAAABlCgH73Gp9miXcE6NRAPoOz7xk4GfiST9QOSCLJbJs46_jNmYT8EhGQK2ADDvPbYYfiU1fjTPVtEDBOoC9jgTBEcXrxcHgBNtFIyrU2VGs5xrHGUfUw8Q9GEv7k6EaBgylF71icBv78x_p80YkBBoJ1znr224U5R7wEyYB5YpbYiMF2To"}


def list_resource_providers():
    resp = requests.get('http://controller:8778/resource_providers', headers=head)
    print(resp.text)
    return list(map(lambda x: {'name': x['name'], "uuid": x["uuid"]}, resp.json()['resource_providers']))


def name_to_uuid(name):
    for i in list_resource_providers():
        if i['name'] == name:
            return i['uuid']
    return None


def get_usages(name):
    resp = requests.get(f'http://controller:8778/resource_providers/{name_to_uuid(name)}/usages', headers=head)
    print(resp.text)
    return resp.json()


def get_resource_providers(name):
    resp = requests.get(f'http://controller:8778/resource_providers/{name_to_uuid(name)}', headers=head)
    print(resp.text)
    return resp.json()


def get_inventory(name):
    resp = requests.get(f'http://controller:8778/resource_providers/{name_to_uuid(name)}/inventories', headers=head)
    print(resp.text)
    return resp.json()


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('command')
    parser.add_argument('resource')
    parser.add_argument('-p', '--provider')
    args = parser.parse_args()
    if args.command == 'list' and args.resource == 'provider':
        print(args.command, args.resource)
        print(list_resource_providers())
    elif args.command == 'get' and args.resource == 'provider':
        print(args.command, args.resource, args.provider)
        print(get_resource_providers(args.provider))
    elif args.command == 'get' and args.resource == 'inventory':
        print(args.command, args.resource, args.provider)
        print(get_inventory(args.provider))
    elif args.command == 'get' and args.resource == 'usage':
        print(args.command, args.resource, args.provider)
        print(get_usages(args.provider))
该文章的评论已关闭