Python经过OpenStack API接口筛选虚机

开发背景:

因为在OpenStack上有过热迁移失败的记录,虚机重装挂载磁盘会报错,数据盘挂载不上,因此须要在OpenStack上找出全部有过热迁移而且迁移失败的虚机处理,以避免后续重装挂载不上磁盘。html

开发环境:

centos,Python 2.7.5,OpenStackpython

具体思路:

Shell筛选命令
nova list –all 找出全部虚机
nova instance-action-list 虚机ID | egrep -in 'live-migration|error' 筛选出具备相应动做的虚机。
使用shell脚本筛选,可是因为nova instance-action-list命令执行太慢,因此考虑使用Python经过OS的接口去找出这部分虚机。
经过OpenStack的API接口调用,找出全部虚机,而且查询每一个虚机的全部动做,筛选出有live-migration动做而且message为Error的虚机就输出虚机名称和虚机ID。shell

关键步骤:

一、登陆认证明现:OpenStack主要是经过keystoneauth组件来提供认证服务,我经过keystoneauth组件的keystoneauth1.session.Session 类初始化一个Session对象,此对象能够存储用户名密码和token等信息。
二、shell命令对应novaclient库的方法查询,主要经过OpenStack的官方文档:https://docs.openstack.org/python-novaclient/latest/reference/index.html 去查询想要的方法以及方法具备的参数。centos

具体源代码

#!/usr/bin/python2
# -*- coding: utf-8 -*-  
from novaclient import client
from keystoneauth1 import session
from keystoneauth1.identity import v3
import requests
#登陆认证
auth = v3.Password(user_domain_name='Default',
                    username='******',
                    password='*********',
                    project_domain_name='Default',
                    project_name='admin',
                    auth_url='http://IP:35357/v3')
sess = session.Session(auth=auth)
nova = client.Client(2,session=sess)
#查询全部虚机
instances = nova.servers.list(search_opts={'all_tenants':'1'})
#循环
for instance in instances:
        #查询每台虚机的动做
        for i in nova.instance_action.list(instance.id):
                #筛选出live-migration的动做而且结果是Error
                if i.to_dict()['action']=='live-migration' and i.to_dict()['message']=='Error':
                        #输出虚机名称和虚机ID
                        print instance.name ,instance.id
                        break

总结

Python的novaclient库和keystoneauth1库,已经封装了具体的请求过程,基本只须要填好关键信息就能够直接调用API接口去获取虚机信息,主要遇到的问题就是OpenStack的API接口资料网上比较少,基本都是须要阅读官方文档。session

相关文章
相关标签/搜索