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

原文地址:https://blog.51cto.com/eddy72/2457564

时间: 2024-08-02 16:36:51

Python通过OpenStack API接口筛选虚机的相关文章

Openstack之Nova创建虚机流程分析

前言  Openstack作为一个虚拟机管理平台,核心功能自然是虚拟机的生命周期的管理,而负责虚机管理的模块就是Nova. 本文就是openstack中Nova模块的分析,所以本文重点是以下三点: 先了解Openstack的整体架构,搞清楚为什么要用这样的架构: 然后再了解架构中的各个组件,组件提供的主要功能与各个组件之间的交互: 了解虚机的启动过程,能在遇到问题时发现问题出在哪个模块中的哪个组件. Nova组件介绍 接下来进行详细介绍,如有错误,欢迎拍砖! 下图为创建虚拟机的一个大概流程图.

OpenStack配置串口显示虚机界面

OpenStack配置串口显示虚机界面 OpenStack的horizon能够显示虚拟机的界面.horizon是web界面,在我们的电脑上,姑且称之为本地,虚拟机运行在远端服务器上,称之为远端.本地显示远端的界面,OpenStack提供了多种方式,noVNC 远程桌面协:RDP(Remote Desktop Protocol 远程桌面协议):SPICE (Simple Protocol for Independent Computing Environment独立计算环境简单协议).这些都是图形

python 使用abc实现接口类/虚类(2.2)

python 使用abc实现接口类/虚类 具体类 class BaseA: def run(self): print('base A running') class ChildA(BaseA): def run(self): print('child a') # 具体类可以直接继承也可以实现多态 a = BaseA() a.run() a = ChildA() a.run() 虚类 class BaseB(): @abc.abstractmethod def run(self): return

openstack allinone vxlan,虚机网络不通

环境:openstack Q版本,allinone,linuxbridge+vxlan现象:虚机可以拿到地址,但是ping不通网关和dhcp服务器 由于是allinone环境,虚机的tap直接挂到bridge,而dhcp和网关的接口也是直接挂到该bridge,按理虚机是可以直接访问dhcp和网关的,但是虚机确实不通,通过抓包发现连接dhcp的tap没有报文,好像是linux bridge没有转发报文,实在没有办法,把vxlan接口从bridge中删除,虚机竟然可以ping通了,重启linuxbr

openstack数据库获取一个虚机的floating_ip, fix_ip, project_name, user_name, hostname, host

 转载请注明 http://www.cnblogs.com/juandx/p/5418204.html openstack有3个库,nova,neutron,keystone,我现在需要做的是跨库联表查询虚机的信息 获取一个虚机的floating_ip, fix_ip, project_name, user_name, hostname, host (不知道在instances表中host和node有什么区别) select j.floating_ip_address as floating_i

构建标准OpenStack API接口文档

1.构建API接口文档标准参考: http://docs.openstack.org/contributor-guide/api-guides.html 2.构建API接口文档步骤参考下面的Patch: https://review.openstack.org/#/c/361791/ https://review.openstack.org/#/c/305870/ https://review.openstack.org/#/c/305973/ 3.创建API接口文档的CI已经如何发布到Open

python调用zabbix api接口实时展示数据

近日公司准备自已做一个运维管理平台,其中的监控部分,打算调用zabbix api接口来进行展示. 经过思考之后,计划获取如下内容: 1.  获得认证密钥 2.  获取zabbix所有的主机组 3.  获取单个组下的所有主机 4.  获取某个主机下的所有监控项 5.  获取某个监控项的历史数据 6.  获取某个监控项的最新数据 计划最后展示框架如下内容(这只是值方面,其它的会再加): 主机组1 ----主机名1---监控项1----当前值 ---监控项2----当前值 ----主机名2----监控

用python配合微信API接口将微信个人号变为聊天机器人

操作系统:Ubuntu16.04 首先我们先安装itchat: 这里我之前安装过了,先在又安装了一边 使用 python3 -c "import itchat" 检查是否安装成功了 如果没有任何输出,则表明安装成功了 然后我们需要去图灵注册一个账号,来获取key,这里给出链接图灵 现在开始编辑代码 新建一个文件:robot.py 完整代码+注释 1 1 import requests 2 2 import itchat 3 3 4 4 KEY = '××××××××××c24144a5

Python调用Zabbix API接口批量修改(禁用/启用)触发器trigger

#!/bin/env python3 #coding:utf-8 import json import os import requests url = "http://192.168.1.1/zabbix/api_jsonrpc.php" # 此处域名修改为相应的地址 headers = { 'Content-Type': 'application/json-rpc' } def token_get(): #根据账号密码获取token data = { "jsonrpc&q