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))