Python运维开发:用户管理的命令行工具开发

Python运维开发:用户管理的命令行工具开发[2分]
使用已建好的OpenStack Python运维开发环境,在/root目录下创建user_manager.py脚本,完成用户管理功能开发,user_manager.py程序支持命令行带参数执行。
提示说明:Python标准库argparse模块,可以提供命令行参数的解析。
(1)程序支持根据命令行参数,创建1个用户。
位置参数“create”,表示创建;
参数“-i 或--input”,格式为json格式文本用户数据。
查询结果,以json格式输出到控制台。
参考执行实例如下:
python3 user_manager.py create --input '{ "name": "user01", "password": "000000", "description": "description" } '
(2)支持查询给定具体名称的用户查询。
位置参数“get”,表示查询1个用户;
参数“-n 或 --name”支持指定名称查询,类型为string。
参数“-o 或 output”支持查询该用户信息输出到文件,格式为json格式。
参考执行实例如下:
python3 user_manager.py get --name user01-o user.json
(3)程序支持查询目前admin账号下所有的用户。
位置参数“getall”,表示查询所有用户;
参数“-o 或--output”支持输出到文件,格式为yaml格式。
参考执行实例如下:
python3 user_manager.py getall -o openstack_all_user.yaml
(4)支持删除指定的名称的用户。
位置参数“delete”,表示删除一个用户;返回response,通过控制台输出。
参数“-n或--name”支持指定名称查询,类型为string。
参考执行实例如下:
python3 user_manager.py delete -name user01

import json
import yaml
import openstack
import argparse

conn = openstack.connect(cloud='openstack')


def create_user(name, password, email=None, enabled=None, description=None, domain_id=None, default_project=None):
    return conn.create_user(name=name, password=password, email=email, default_project=default_project, enabled=enabled, domain_id=domain_id, description=description)


def get(name):
    return conn.get_user(name)


def getall():
    return conn.list_users()


def delete_user(name):
    return conn.delete_user(name)


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    sub = parser.add_subparsers(dest='command')
    sub1 = sub.add_parser('create')
    sub1.add_argument('-i', '--input', type=json.loads)
    sub2 = sub.add_parser('get')
    sub2.add_argument('-n', '--name')
    sub2.add_argument('-o', '--output')
    sub3 = sub.add_parser('getall')
    sub3.add_argument('-o', '--output')
    sub4 = sub.add_parser('delete')
    sub4.add_argument('-n', '--name')
    args = parser.parse_args()
    if args.command == 'create':
        print(create_user(name=args.input['name'], password=args.input['password'], description=args.input['description']))
    elif args.command == 'get':
        resp = get(args.name)
        print(json.dumps(resp))
        with open(args.output, 'w') as f:
            f.write(json.dumps(resp))
    elif args.command == 'getall':
        resp = getall()
        print(yaml.dump(json.loads(json.dumps(resp))))
        with open(args.output, 'w') as f:
            f.write(yaml.dump(json.loads(json.dumps(resp))))
    elif args.command == 'delete':
        print(delete_user(args.name))
该文章的评论已关闭