前言
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
后续能够补充这部分。