OpenStack API 运维任务[10 分]
【题目 1】使用 python 调用 api 实现创建 user[2 分]
在自行搭建的 OpenStack 私有云平台或提供的 all-in-one 平台上,根据 http 服务中提供的 Python-api.tar.gz 软件包,完成 python3.6 软件和依赖库的安装。在 controller 节点的/root2021 年职业院校技能大赛“云计算”赛项 赛卷目录下创建 create_user.py 文件,编写 python 代码对接 OpenStack API,完成用户的创建。要求在 OpenStack 私有云平台中创建用户 chinaskill,描述为“API create user!”。执行完代码要求输出“用户创建成功”。根据上述要求编写 python 代码,完成后,将 controller 节点的IP 地址,用户名和密码提交。(考试系统会连接到你的 controller 节点,去执行 python 脚本,请准备好运行的环境,以便考试系统访问)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| [root@controller ~]# cat create_user.py #coding=utf-8 import json import requests body = { "auth":{ "identity":{ "methods":["password"], "password":{ "user":{ "id":"179fac1341f64033800765d4be2f09c2", "password":"000000" } } }, "scope":{ "project":{ "id":"ddc482a7bfb64a078f92260296ea723c" } } } } headers = {} def get_token(): url = "http://192.168.20.113:5000/v3/auth/tokens" re = requests.post(url,headers=headers,data=json.dumps(body)).headers["X-Subject-Token"] return re def create_user(): url = "http://192.168.20.113:35357/v3/users" headers["X-Auth-Token"] = get_token() body={ "user":{ "domain_id":"8f508b3360814db4ae9397996299ba7e", "password":"000000", "name":"chinaskill", "description":"API create user!" } } re = requests.post(url,headers=headers,data=json.dumps(body)).json() create_user() print("用户创建成功")
|
【题目 2】使用 python 调用 api 实现创建 flavor[2 分]
在自行搭建的 OpenStack 私有云平台或提供的 all-in-one 平台上。在 controller 节点的/root目录下创建 create_flavor.py 文件,在该文件中编写 python 代码对接 openstack api,要求在openstack 私有云平台上创建一个云主机类型,名字为 pvm_flavor、vcpu 为 1 个、内存为1024m、硬盘为 20G、ID 为 9999。执行完代码要求输出“云主机类型创建成功”。根据上述要求编写 python 代码,完成后,将 controller 节点的 IP 地址,用户名和密码提交。(考试系统会连接到你的 controller 节点,去执行 python 脚本,请准备好运行的环境,以便考试系统访问)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| [root@controller ~]# cat create_flavor.py #coding=utf-8 import json import requests body = { "auth":{ "identity":{ "methods":["password"], "password":{ "user":{ "id":"179fac1341f64033800765d4be2f09c2", "password":"000000" } } }, "scope":{ "project":{ "id":"ddc482a7bfb64a078f92260296ea723c" } } } } headers = {} def get_token(): url="http://192.168.20.113:5000/v3/auth/tokens" re = requests.post(url,headers=headers,data=json.dumps(body)).headers["X-Subject-Token"] return re def create_flavor(): url="http://192.168.20.113:8774/v2.1/flavors" headers["X-Auth-Token"]=get_token() body={ "flavor":{ "name":"pvm_flavor", "id":9999, "vcpus":1, "ram":1024, "disk":20 } } re = requests.post(url,headers=headers,data=json.dumps(body)).json() create_flavor() print('云主机类型创建成功')
|
【题目 3】使用 python 调用 api 实现创建网络[2 分]
在自行搭建的 OpenStack 私有云平台或提供的 all-in-one 平台上。在 controller 节点的/root目录下创建 create_network.py 文件,编写 python 代码对接 OpenStack API,完成网络的创建。要求:(1)为平台创建内部网络 pvm_int,子网名称为 pvm_intsubnet;(2)设置云主机网络子网 IP 网段为 192.168.x.0/24(其中 x 是考位号),网关为 192.168.x.1(如果存在同名内网,代码中需先进行删除操作)。执行完代码要求输出“网络创建成功”。根据上述要求编写 python 代码,完成后,将 controller 节点的 IP 地址,用户名和密码提交。(考试系统会连接到你的 controller 节点,去执行 python 脚本,请准备好运行的环境,以便考试系统访问)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| [root@controller ~]# cat net.py #coding=utf-8 import json import requests url = "http://192.168.20.113" body={ "auth":{ "identity":{ "methods":["password"], "password":{ "user":{ "id":"52c7c503e67b45fa9116baa4d302edad", "password":"000000" } } }, "scope":{ "project":{ "id":"01622847ee724c3ba59b94b5a1afa4d0" } } } } headers={} def get_token(): tokenurl=url+":5000/v3/auth/tokens" re=requests.post(url=tokenurl,headers=headers,data=json.dumps(body)).headers["X-Subject-Token"] return re def net_create(): neturl=url+":9696/v2.0/networks" suburl=url+":9696/v2.0/subnets" headers["X-Auth-Token"]=get_token() body={ "network": { "provider:physical_network": "provider", #可以不写 "project_id": "01622847ee724c3ba59b94b5a1afa4d0", #可以不写 "name": "pvm_int", "admin_state_up": "true", #可以不写 "provider:network_type": "vlan" #可以不写 } } re=requests.post(url=neturl,headers=headers,data=json.dumps(body)).json() print(re) re=re.get('network') id=re['id'] body1={ "subnet": { "enable_dhcp": "true", "network_id": id, "gateway_ip": "192.168.23.1", "allocation_pools": [ { "start": "192.168.23.10", "end": "192.168.23.100" } ], "cidr": "192.168.23.0/24", "project_id": "01622847ee724c3ba59b94b5a1afa4d0", "name": "pvm_intsubnet", "ip_version": 4 } } re1=requests.post(url=suburl,headers=headers,data=json.dumps(body1)).json() print(re1) net_create() print("网络创建成功")
|
【题目 4】使用 python 调用 api 实现创建镜像[2 分]
在自行搭建的 OpenStack 私有云平台或提供的 all-in-one 平台上。在 controller 节点的/root目录下创建 create_image.py 文件,编写 python 代码对接 OpenStack API,完成镜像的上传。要求在 OpenStack 私有云平台中上传镜像 cirros-0.3.4-x86_64-disk.img,名字为 pvm_image,disk_format 为 qcow2,container_format 为 bare。执行完代码要求输出“镜像创建成功,id为:xxxxxx”。根据上述要求编写 python 代码,完成后,将 controller 节点的 IP 地址,用户名和密码提交。(考试系统会连接到你的 controller 节点,去执行 python 脚本,请准备好运行的环境,以便考试系统访问)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| [root@controller ~]# cat create_image.py #coding=utf-8 import json import requests url = "http://192.168.20.113" body={ "auth":{ "identity":{ "methods":["password"], "password":{ "user":{ "id":"52c7c503e67b45fa9116baa4d302edad", "password":"000000" } } }, "scope":{ "project":{ "id":"01622847ee724c3ba59b94b5a1afa4d0" } } } } headers={} def get_token(): tokenurl=url+":5000/v3/auth/tokens" re=requests.post(url=tokenurl,headers=headers,data=json.dumps(body)).headers["X-Subject-Token"] return re
def create_image(): glanceurl=url+":9292/v2/images" headers["X-Auth-Token"]=get_token() body1={ "name": "pvm_image", "disk_format": "qcow2", "container_format": "bare" } re=requests.post(url=glanceurl,headers=headers,data=json.dumps(body1)).json() print(re) id=re['id'] return id def put_image(): glanceurl=url+":9292/v2/images" image_id=create_image() headers["Content-Type"]="application/octet-stream" a=open("cirros-0.3.4-x86_64-disk.img","rb").read() req=requests.put("http://192.168.20.113:9292/v2/images/{}/file".format(image_id),data=a,headers=headers) print("镜像上传成功,id为:"+image_id) put_image()
|
【题目 5】使用 python 调用 api 实现创建云主机[2 分]
在自行搭建的 OpenStack 私有云平台或提供的 all-in-one 平台上。在 controller 节点的/root目录下创建 create_vm.py 文件,编写 python 代码对接 OpenStack API,完成云主机的创建。要求使用 pvm_image、pvm_flavor、pvm_intsubnet 创建 1 台云主机 pvm1(如果存在同名虚拟主机,代码中需先进行删除操作)。执行完代码要求输出“创建云主机成功”。根据上述要求编写 python 代码,完成后,将 controller 节点的 IP 地址,用户名和密码提交。(考试系统会连接到你的 controller 节点,去执行 python 脚本,请准备好运行的环境,以便考试系统访问)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| [root@controller ~]# cat create_server.py #coding=utf-8 import json import requests url = "http://192.168.20.113" body={ "auth":{ "identity":{ "methods":["password"], "password":{ "user":{ "id":"52c7c503e67b45fa9116baa4d302edad", "password":"000000" } } }, "scope":{ "project":{ "id":"01622847ee724c3ba59b94b5a1afa4d0" } } } } headers={} def get_token(): tokenurl=url+":5000/v3/auth/tokens" re=requests.post(url=tokenurl,headers=headers,data=json.dumps(body)).headers["X-Subject-Token"] return re def create_server(): svurl=url+":8774/v2.1/servers" headers["X-Auth-Token"]=get_token() body={ "server":{ "name": "pvm1", "imageRef": "b2da2db6-ede4-4007-8778-e2da9a11223f", "flavorRef": "9999", "networks": [{"uuid":"65b2bd8b-3d99-47ed-ba3f-31864ae77b19"}] } } re=requests.post(url=svurl,headers=headers,data=json.dumps(body)).json() print(re) create_server() print('云主机创建成功')
|