私有云:(13)私有云Python运维开发案例
案例描述
本案例讲述了OpenStack利用Python调用API以及SDK实现私有云自动化运维,基于Python args模块,封装OpenStack API实现开发OpenStack命令行管理工具
规划节点
节点规划见表1-1。
表1-1 节点规划
IP | 主机名 | 节点 |
---|---|---|
192.168.200.21 | controller | controller |
基础准备
使用已经部署好OpenStack平台的openstack-allinone镜像。
下载本案例所需用到的附件以及代码文件:
1 | openstack-python.tar.gz |
案例实施
基于OpenStack Restful API实现镜像上传
使用OpenStack all-in-one镜像,创建OpenStack Python运维开发环境。云主机的用户/密码为:“root/Abc@1234”,OpenStack的域名/账号/密码为:“demo/admin/000000”。
提示说明:Python脚本文件头建议加入“#encoding:utf-8”避免编码错误;测试脚本代码用python3命令执行与测试。
在controller节点的/root目录下创建api_image_manager.py脚本,编写Python代码对接OpenStack API,完成镜像的创建与上传。创建之前查询是否存在“同名镜像”,如果存在先删除该镜像。
(1)创建镜像:要求在OpenStack私有云平台中上传镜像cirros-0.3.4-x86_64-disk.img,名字为cirros001,disk_format为qcow2,container_format为bare。
(2)查询镜像:查询cirros001的详细信息,并以Json格式文本输出到控制台。
api_image_manager.py:
1 | encoding:utf-8 |
把所需镜像上传,如下:
1 | [root@controller ~]# ls |
执行api_image_manager.py文件:
1 | [root@controller ~]# python3 api_image_manager.py |
基于Openstack Python SDK实现云主机创建
使用已建好的OpenStack Python运维开发环境,在/root目录下创建sdk_server_manager.py脚本,使用python-openstacksdk Python模块,完成云主机的创建和查询。创建之前查询是否存在“同名云主机”,如果存在先删除该镜像。
(1)创建1台云主机:云主机信息如下:
- 云主机名称:server001
- 镜像文件:cirros-0.3.4-x86_64-disk.img
- 云主机类型:m1.tiny
注意:网络等必要信息自己补充(需要创建名为“net”的网络)。
(2)查询云主机:查询云主机server001的详细信息,并以Json格式文本输出到控制台。
sdk_server_manager.py:
1 | encoding:utf-8 |
创建网络,命令如下:
1 | [root@controller ~]# source /etc/keystone/admin-openrc.sh |
执行sdk_server_manager.py文件:
1 | [root@controller ~]# python3 sdk_server_manager.py |
基于Python arg云主机类型管理的命令行工具开发
使用已建好的OpenStack Python运维开发环境,在/root目录下创建flavor_manager.py脚本,完成云主机类型的管理,flavor_manager.py程序支持命令行参数执行。
提示说明:Python标准库argparse模块,可以提供命令行参数的解析。
要求如下:
(1)程序支持根据命令行参数,创建1个多云主机类型。返回response。
参考运行实例:
1 | python3 flavor_manager.py create -n flavor_small -m 1024 -v 1 -d 10 -id 100000 |
- 位置参数“create”,表示创建;
- 参数“-n”支持指定flavor名称,数据类型为字符串类型;
- 参数“-m”支持指定内存大小,数据类型为int,单位M;
- 参数“-v”支持指定虚拟cpu个数,数据类型为int;
- 参数“-d”支持磁盘大小,内存大小类型为int,单位G;
- 参数“-id”支持指定ID,类型为字符串。
(2)程序支持查询目前admin账号下所有的云主机类型。
参考执行实例如下:
1 | python3 flavor_manager.py getall |
- 位置参数“getall”,表示查询所有云主机类型;
- 查询结果,以Json格式输出到控制台。
(3)支持查询给定具体名称的云主机类型查询。控制台以Json格式输出创建结果。
参考执行实例如下:
1 | python3 flavor_manager.py get -id 100000 |
- 位置参数“get”,表示查询1个云主机类型;
- 参数“-id”支持指定ID查询,类型为string。
(4)支持删除指定的ID云主机类型。
参考执行实例如下:
1 | python3 flavor_manager.py delete -id 100001 |
- 位置参数“delete”,表示删除一个云主机类型;
- 参数“-id”支持指定ID查询,返回response,控制台输出response。
api_flavor_manager.py:
1 | encoding:utf-8 |
flavor_manager.py:
1 | encoding:utf-8 |
基于Python arg用户管理的命令行工具开发
使用已建好的OpenStack Python运维开发环境,在/root目录下创建user_manager.py脚本,完成用户管理功能开发,user_manager.py程序支持命令行带参数执行。
提示说明:Python标准库argparse模块,可以提供命令行参数的解析。
(1)程序支持根据命令行参数,创建1个用户。查询结果,以Json格式输出到控制台。
参考执行实例如下:
1 | python3 user_manager.py create --input '{ "name": "user01", "password": "000000", "description": "description" } ' |
- 位置参数“create”,表示创建;
- 参数“-i 或–input”,格式为Json格式文本用户数据。
(2)支持查询给定具体名称的用户查询。
参考执行实例如下:
1 | python3 user_manager.py get --name user01 -o user.json |
- 位置参数“get”,表示查询1个用户;
- 参数“-n 或 –name”支持指定名称查询,类型为string。
- 参数“-o 或 output”支持查询该用户信息输出到文件,格式为Json格式。
(3)程序支持查询目前admin账号下所有的用户。
参考执行实例如下:
1 | python3 user_manager.py getall -o openstack_all_user.yaml |
- 位置参数“getall”,表示查询所有用户;
- 参数“-o 或–output”支持输出到文件,格式为yaml格式。
(4)支持删除指定的名称的用户。
参考执行实例如下:
1 | python3 user_manager.py delete --name user01 |
- 位置参数“delete”,表示删除一个用户;返回response,通过控制台输出。
- 参数“-n或–name”支持指定名称查询,类型为string。
api_user_manager.py:
1 | encoding:utf-8 |
user_manager.py:
1 | encoding:utf-8 |