hello,大家好,这里是费冰,今天是大年初六,唉,这么早就被迫营业了。
那么今天来解读一波openstacksdk。
Openstacksdk是什么
其实我很难说明一个是什么的问题。如果你使用过python,了解过sdk的概念,那么openstack sdk对你应该很容易理解。这是一个封装好的工具包,里面有众多可以帮助我们操作 openstack的方法,有了sdk,一方面我们可以直接使用已封装的功能,这将节省大量的时间,另一方面我们可以基于sdk开发更高级的功能。
下面我将演示如何使用openstacksdk。
如何使用openstacksdk
概述
openstack对外提供几种不同的接口:
- RESTful API
- openstackclient
- openstack SDKS
RESTful API已经介绍过,openstackclient就是openstack命令行,日常使用我们已经很熟悉了。
:::info
:::
安装
在使用之前,需要使用pip安装openstack
pip install openstacksdk
配置
openstacksdk在使用的时候,首先得完成和openstack进行认证的过程。openstacksdk提供了几种简便的认证方法。可以直接在连接时传入认证数据,也可以使用配置文件来提供认证数据,我将演示这两种方法。
clouds.yaml文件
如果使用配置文件的形式,那么你需要准备一个clouds.yaml文件,将这个文件放置在python文件同目录下,这个文件的内容如下:
clouds:
zed:
region_name: RegionOne
auth:
project_domain_name: Default
user_domain_name: Default
username: admin
password: passwordadmin
project_name: admin
auth_url: http://192.168.10.25:5000
clouds.yaml文件的查找顺序是:
- 本目录(python运行文件的目录)
- ~/.config/openstack/目录
- /etc/openstack/目录
直接传入认证数据
使用connect方法来创建一个连接,如下所示:
def create_connection(auth_url, region, project_name, username, password,
user_domain, project_domain):
return openstack.connect(
auth_url=auth_url,
project_name=project_name,
username=username,
password=password,
region_name=region,
user_domain_name=user_domain,
project_domain_name=project_domain,
)
使用
完成openstack的配置之后,我们就可以很容易的使用openstacksdk来和openstack进行交互,这里我将演示如何编写python文件来创建一个云主机。
当然,在使用之前,还得有一个正常运行的openstack集群。
为了将代码完整展示,我在这里使用的是直接传入参数来定义的连接。
列出所有用户
示例如下:
import openstack
#定义连接函数,从参数中直接传入信息
def create_connection(auth_url, region, project_name, username, password, user_domain, project_domain):
return openstack.connect(
auth_url=auth_url,
roject_name=project_name,
username=username,
password=password,
region_name=region,
user_domain_name=user_domain,
project_domain_name=project_domain,
)
# 创建连接
conn = create_connection("http://192.168.10.25:5000","RegionOne","admin","admin","passwordadmin","Default","Default")
if __name__ == '__main__':
#列出所有用户
for user in conn.list_users():
print(user.to_dict())
观察这个示例我们发现,openstacksdk的使用比RESTful API简便了许多,这是因为sdk已经将api的操作封装好,我们只需要方便的拿出使用就可以了。
以上是一个列出所有用户的小例子。如果我们想要在openstack中创建一台云主机,那么可用的镜像,可用的网络,合适的云主机类型都是必须的。接下来我来演示如何创建这些资源。
镜像操作
注意,python文件中的定义连接函数和创建连接已省略,以下只列出主要代码段落。
列出镜像
for image in conn.list_images():
print(image)
创建镜像
def create_image(conn):
# 镜像文件
filename = 'G:\\cirros-0.5.1-x86_64-disk.img'
# 创建镜像并上传镜像文件
image_attrs = {
'name': EXAMPLE_IMAGE_NAME,
'filename': filename,
'disk_format': 'raw',
'container_format': 'bare',
'visibility': 'public',
}
conn.create_image(**image_attrs)
网络操作
列出网络
def list_network(conn):
for network in conn.list_networks():
print(network)
列出子网
def list_subnet(conn):
for subnet in conn.list_subnets():
print(subnet)
列出路由器
def list_routers(conn):
for router in conn.list_routers():
print(router)
创建网络
def create_network(conn):
network = conn.create_network(name="example_network")
subnet = conn.create_subnet(
name='example-subnet',
network_id=network.id,
ip_version='4',
cidr='10.0.2.0/24',
gateway_ip='10.0.2.1')
print(network)
问题来了,如果我想要创建一个外部网络怎么办呢?
这里其实就比普通的网络创建多两个参数,示例如下:
def create_network(conn):
# 外部网络参数,必须和实际环境对应
privoder = {'physical_network':'External','network_type':flat}
# 所属project_id
project_id=admin
network = conn.create_network(name="example_network",provider=provider,project_id=project_id)
subnet = conn.create_subnet(
name='example-subnet',
network_id=network.id,
ip_version='4',
cidr='10.0.2.0/24',
gateway_ip='10.0.2.1')
print(network)
云主机操作
创建云主机类型
def create_flavor(conn)
flavor = conn.create_flavor(
name='example-flavor',
ram='1024',
vcpus='1',
disk='10',
flavorid="auto",
)
print(flavor)
列出云主机类型
def list_flavors(conn):
for flavor in conn.list_flavors():
print(flavor)
至此,我们已经拿到了创建云主机的所有必须资源,现在让我们试着创建云主机:
创建云主机
def create_server(conn):
image = conn.get_image_id("cirros")
flavor = conn.get_flavor("m1.tiny").id
network = conn.get_network("network").id
server = conn.compute.create_server(
name=SERVER_NAME, image=image, flavor_id=flavor,
network=network)
server = conn.wait_for_server(server)
print(server)
总结
以上就是openstacksdk的一些常用操作了,openstack里有太多常用的操作,只有掌握其中规律,多做练习才能掌握。
标签:openstacksdk,name,create,project,openstack,快速,conn,network From: https://www.cnblogs.com/feyncode/p/17069559.html