python openstack_Python通过OpenStack API接口筛选虚机

开发背景:

由于在OpenStack上有过热迁移失败的记录,虚机重装挂载磁盘会报错,数据盘挂载不上,所以需要在OpenStack上找出所有有过热迁移并且迁移失败的虚机处理,以免后续重装挂载不上磁盘。

开发环境:

centos,Python 2.7.5,OpenStack

具体思路:

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。

关键步骤:

1、登录认证实现:OpenStack主要是通过keystoneauth组件来提供认证服务,我通过keystoneauth组件的keystoneauth1.session.Session 类初始化一个Session对象,此对象可以存储用户名密码和token等信息。

2、shell命令对应novaclient库的方法查询,主要通过OpenStack的官方文档:https://docs.openstack.org/python-novaclient/latest/reference/index.html 去查询想要的方法以及方法具有的参数。

具体源代码

#!/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接口资料网上比较少,基本都是需要阅读官方文档。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值