0%

python-api

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('云主机创建成功')