1,创建flavor
import requests
import json
import os #调用三个需要的模块
headers = {"a": "b"}
data = { #设置认证的数据元
"auth": {
"identity": {
"methods": ["password"],
"password": {
"user": {
"domain": {
"name": "demo"
},
"name": "admin",
"password": "000000"
}
}
},
"scope": {
"project": {
"domain": {
"name": "demo"
},
"name": "admin"
}
}
}
}
#然后指定头部,这里数据元给keystone的认证所以链接时keystone的auth下的tokens
headers["X-Auth-Token"] = requests.post("http://controller:5000/v3/auth/tokens",headers=headers,json=data).headers["X-Subject-Token"]
data = { #然后用flavor资源的数据覆盖data
"flavor": {
"name": "test_flavor",
"id": "666",
"ram": 2048,
"disk": 20,
"vcpus": 2
}
}
#这次请求是给nova的链接下创建flavor资源的。
requests.post("http://controller:8774/v2.1/flavors",headers=headers,json=data).json()
print("创建成功")
2,创建镜像
[root@controller python]# cat image.py
import requests
import json
import os
headers={"a":"b"}
data={
"auth": {
"identity": {
"methods": ["password"],
"password": {
"user": {
"domain": {
"name": "demo"
},
"name": "admin",
"password": "000000"
}
}
},
"scope": {
"project": {
"domain": {
"name": "demo"
},
"name": "admin"
}
}
}
}
headers["X-Auth-Token"]=requests.post("http://controller:5000/v3/auth/tokens",headers=headers,json=data).headers["X-Subject-Token"]
data={
"name": "qwe",
"min-disk": "1",
"min-ram": "1024",
"container_format": "bare",
"disk_format": "qcow2",
"visibility": "public"
}
a=requests.post("http://controller:9292/v2/images",headers=headers,json=data).json()
headers["Content-Type"]="application/octet-stream"
requests.put(f"http://controller:9292{a['file']}",headers=headers,data=open('/root/CentOS-7-x86_64-2009.qcow2','rb')).status_code
print("创建成功")
3,创建用户
[root@controller python]# cat user.py
import requests
import json
import os
headers={"a":"b"}
data={
"auth": {
"identity": {
"methods": ["password"],
"password": {
"user": {
"domain": {
"name": "demo"
},
"name": "admin",
"password": "000000"
}
}
},
"scope": {
"project": {
"domain": {
"name": "demo"
},
"name": "admin"
}
}
}
}
headers["X-Auth-Token"]=requests.post("http://controller:5000/v3/auth/tokens",headers=headers,json=data).headers["X-Subject-Token"]
data={
"user": {
"name": "test",
"password": "000000",
"domain_id": "fe9f8c850d0241a6a01bb0656ba2b74c"
}
}
requests.post("http://controller:5000/v3/users",headers=headers,json=data).json()
print("创建完毕")
4,创建卷
[root@controller python]# cat volume.py
import requests
import json
import os
headers={"a":"b"}
data={
"auth": {
"identity": {
"methods": ["password"],
"password": {
"user": {
"domain": {
"name": "demo"
},
"name": "admin",
"password": "000000"
}
}
},
"scope": {
"project": {
"domain": {
"name": "demo"
},
"name": "admin"
}
}
}
}
headers["X-Auth-Token"]=requests.post("http://controller:5000/v3/auth/tokens",headers=headers,json=data).headers["X-Subject-Token"]
data={
"volume": {
"name": "rrr",
"size": "10"
}
}
requests.post("http://controller:8776/v2/e3e46f0408a54a5c85d0d4dffd78d215/volumes",headers=headers,json=data).json()
print("创建完成")
5,创建网络
[root@controller python]# cat network.py
import requests
import json
import os
headers={"a":"b"}
data={
"auth": {
"identity": {
"methods": ["password"],
"password": {
"user": {
"domain": {
"name": "demo"
},
"name": "admin",
"password": "000000"
}
}
},
"scope": {
"project": {
"domain": {
"name": "demo"
},
"name": "admin"
}
}
}
}
headers["X-Auth-Token"]=requests.post("http://controller:5000/v3/auth/tokens",headers=headers,json=data).headers["X-Subject-Token"]
data={
"network": {
"name": "wai",
"shared": "true",
"provider:physical_network": "provider",
"provider:network_type": "flat"
}
}
requests.post("http://controller:9696/v2.0/networks",headers=headers,json=data).json()
print("创建成功")
6,创建子网
[root@controller python]# cat subnet.py
import requests
import json
import os
headers={"a":"b"}
data={
"auth": {
"identity": {
"methods": ["password"],
"password": {
"user": {
"domain": {
"name": "demo"
},
"name": "admin",
"password": "000000"
}
}
},
"scope": {
"project": {
"domain": {
"name": "demo"
},
"name": "admin"
}
}
}
}
headers["X-Auth-Token"]=requests.post("http://controller:5000/v3/auth/tokens",headers=headers,json=data).headers["X-Subject-Token"]
data={
"subnet": {
"name": "wai-sub",
"cidr": "192.168.200.0/24",
"gateway_ip": "192.168.200.1",
"network_id": "b5ae5238-b316-4903-a8c2-93f17fed62d2",
"ip_version": "4" #设置子网ip类型,如ipv4,和ipv6
}
}
requests.post("http://controller:9696/v2.0/subnets",headers=headers,json=data).json()
7,创建实例
[root@controller python]# cat server.py
import requests
import os
import json
headers={"a":"b"}
data={
"auth": {
"identity": {
"methods": ["password"],
"password": {
"user": {
"domain": {
"name": "demo"
},
"name": "admin",
"password": "000000"
}
}
},
"scope": {
"project": {
"domain": {
"name": "demo"
},
"name": "admin"
}
}
}
}
headers["X-Auth-Token"]=requests.post("http://controller:5000/v3/auth/tokens",headers=headers,json=data).headers["X-Subject-Token"]
data={
"server": {
"name": "server1",
"imageRef": "50b58234-dfb1-405d-bb66-839e93693a90",
"flavorRef": "666", #此处一定要使用flavor的id,不能够使用名称
"networks": [{"uuid": "b5ae5238-b316-4903-a8c2-93f17fed62d2"}]
}
}
requests.post("http://controller:8774/v2.1/servers",headers=headers,json=data).json()
8,同时创建网络和子网
[root@controller python]# cat net-subnet.py
import requests
import json
import os
headers={"a":"b"}
data={
"auth": {
"identity": {
"methods": ["password"],
"password": {
"user": {
"domain": {
"name": "demo"
},
"name": "admin",
"password": "000000"
}
}
},
"scope": {
"project": {
"domain": {
"name": "demo"
},
"name": "admin"
}
}
}
}
headers["X-Auth-Token"]=requests.post("http://controller:5000/v3/auth/tokens",headers=headers,json=data).headers["X-Subject-Token"]
data={
"network": {
"name": "wai",
"shared": "true",
"provider:physical_network": "provider",
"provider:network_type": "flat"
}
}
a=requests.post("http://controller:9696/v2.0/networks",headers=headers,json=data).json()
print("网络创建成功")
b=a["network"]["id"]
data={
"subnet": {
"name": "wai-sub",
"gateway_ip": "192.168.200.1",
"cidr": "192.168.200.0/24",
"network_id": b,
"ip_version": "4"
}
}
requests.post("http://controller:9696/v2.0/subnets",headers=headers,json=data).json()
print("子网创建成功")