LibCloud操作OpenStack

简介: LibCloud操作OpenStack

前言


OpenStack 是一个伟大的开源云平软件,对于 OpenStack 的管理和编排我们有很多种方式,比如官方的 SDK、原生的 API、官方的 ClientTerraformpulumi 等。今天我们来介绍一款相对冷门的但是挺好用的库,它就是 ApacheLibCloud


环境准备


  1. Python@3 环境
  2. OpenStack 环境信息
  3. 安装 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 后续能够补充这部分。

相关文章
|
6月前
|
Ubuntu Linux 网络安全
云计算|OpenStack|社区版OpenStack(实务操作---cloud-init的使用)
云计算|OpenStack|社区版OpenStack(实务操作---cloud-init的使用)
456 0
|
消息中间件 存储 JSON
金鱼哥RHCA回忆录:CL210OpenStack操作的故障排除--诊断OpenStack问题
第九章 OpenStack操作的故障排除--诊断OpenStack问题
868 0
金鱼哥RHCA回忆录:CL210OpenStack操作的故障排除--诊断OpenStack问题