成都论坛

Python通过OpenStack API接口筛选虚机

[复制链接]

1275

主题

1275

帖子

1013

积分

金牌会员

Rank: 6Rank: 6

积分
1013
分享到:
发表于 2022-3-11 15:15:55 | 显示全部楼层 |阅读模式

开发背景:由于在OpenStack上有过热迁移失败的记录,虚机重装挂载磁盘会报错,数据盘挂载不上,所以需要在OpenStack上找出所有有过热迁移并且迁移失败的虚机处理,以免后续重装挂载不上磁盘。
开发环境:centosPython 2.7.5OpenStack
具体思路:Shell筛选命令
nova list –all 找出所有虚机
nova instance-action-list 虚机ID | egrep -in 'live-migration|error' 筛选出具有相应动作的虚机。
使用shell脚本筛选,但是由于nova instance-action-list命令执行太慢,所以考虑使用Python通过OS的接口去找出这部分虚机。
通过OpenStackAPI接口调用,找出所有虚机,并且查询每个虚机的所有动作,筛选出有live-migration动作并且messageError的虚机就输出虚机名称和虚机ID
关键步骤:1、登录认证实现:OpenStack主要是通过keystoneauth组件来提供认证服务,我通过keystoneauth组件的keystoneauth2.session.Session 类初始化一个Session对象,此对象可以存储用户名密码和token等信息。

2shell命令对应novaclient库的方法查询,主要通过OpenStack的官方文档:index.html 去查询想要的方法以及方法具有的参数。
具体源代码#!/usr/bin/python2# -*- coding: utf-8 -*-  from novaclient import clientfrom keystoneauth2 import sessionfrom keystoneauth2.identity import v3import 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   总结Pythonnovaclient库和keystoneauth2库,已经封装了具体的请求过程,基本只需要填好关键信息就可以直接调用API接口去获取虚机信息,主要遇到的问题就是OpenStackAPI接口资料网上比较少,基本都是需要阅读官方文档。
MPLS的优点是与任何底层技术无关。它是在ATM和帧中继实现的。作为一种旨在简化和提高性能的覆盖技术,它是多协议部分。ATM和帧中继是远程存储器,但MPLS存在于运营商的骨干网和企业网络中。最常见的用例是分支机构、园区网络、城市以太网服务和需要实时应用服务质量的企业。


快速回复 返回顶部 返回列表