前言
OpenStack
是一个伟大的开源云平软件,对于 OpenStack
的管理和编排我们有很多种方式,比如官方的 SDK
、原生的 API
、官方的 Client
、Terraform
、pulumi
等。今天我们来介绍一款相对冷门的但是挺好用的库,它就是 Apache
的 LibCloud
。
环境准备
Python@3
环境OpenStack
环境信息- 安装
libcloud
pip install apache-libcloud
呆猫
获取规格列表
通过本例,你可以了解到
libcloud
是如何连接OpenStack
的,获取规格列表应该使用哪个方法。
from libcloud.compute.types import Provider
from libcloud.compute.providers import get_driver
import libcloud.security
# 忽略https证书
libcloud.security.VERIFY_SSL_CERT = False
OpenStack = get_driver(Provider.OPENSTACK)
driver = OpenStack('admin', 'pwd@pwd',
ex_tenant_name='admin',
ex_force_auth_url='https://xxx.cloud.com:5000',
# 注意定义keystone的api版本
ex_force_auth_version='3.x_password')
res = driver.list_sizes()
for i in res:
print(i.name)
获取虚机列表
# driver在前面的代码中已经获取到,后续不再重复
# 虚机列表
vms = driver.list_nodes(ex_all_tenants = False)
for vm in vms:
print(vm.name)
延伸:根据以上的代码我们可以根据虚机名称获取到虚机对象,然后从虚机对象获取到虚机的 ID
。
就像这样:
vms = driver.list_nodes(ex_all_tenants = False)
for vm in vms:
print(vm.name,vm.id)
获取镜像列表
# 镜像列表
imgs = driver.list_images()
for img in imgs:
print(img.name,img.id)
云盘创建
这是比较重要的功能,libCloud
也可以很好的支持。这里展示 cinder
的功能。
# 创建卷
v = driver.create_volume(size=66, name='from-libc', location=None, snapshot=None, ex_volume_type='SSD')
print(v)
虚机操作
虚机的 Action
是我们经常会用到的操作,我们这里展示下虚机的关机开机。
# 关机开机虚机
# 根据名称获取虚机
def getVmByName(name):
vms = driver.list_nodes(ex_all_tenants=True)
for vm in vms:
if vm.name == name:
# print(vm.name, vm.id)
return vm
# 获取虚机状态
def getNodeStatus(name):
vm = getVmByName(name)
print("当前虚机状态:",vm.state)
return vm.state
# 获取虚机对象
vm = getVmByName('test_vol_image')
# 获取虚机状态
getNodeStatus('test_vol_image')
# 虚机关机
print('====执行关机=====')
res = driver.stop_node(node=vm)
print(res)
# 当虚机关机后执行开机操作
import time
num=1
while True:
state = getNodeStatus('test_vol_image')
if state == 'stopped':
# 执行开机操作
print('====执行开机,程序结束=====')
res = driver.start_node(node=vm)
#print(res)
break
else:
print(f'vm state is {state}===#第{num}次循环#')
num+=1
time.sleep(1)
# 获取虚机状态
getNodeStatus('test_vol_image')
总结
libCloud
虽然支持很多的 Provider
,而且用法比较简单,但是其对 OpenStack
的很多功能支持的并不完善,比如项目和用户那块就还没有实现,期待 libCloud
后续能够补充这部分。
评论区