python openstack rabbitmq_Openstack中使用rabbitmq获取vm状态变化

通过配置OpenStack的nova.conf启用rabbitmq通知,监听'notification.info'路由键和'nova'交换机,当compute.instance.update事件的state和old_state变化时,触发相应操作,例如更新数据库。提供一个Python脚本示例用于接收和处理这些消息。
摘要由CSDN通过智能技术生成

需求

及时知道vm状态的变化

分析

Dashboard中也是通过定时使用ajax调用API来获取虚拟机的状态信息的

定时轮训的方式过于被动

解决方案

共用rabbitmq

实现方法

配置nova.conf(类似配置ceilomter)

vi /etc/nova/nova.conf

notification_driver = nova.openstack.common.notifier.rpc_notifier

notify_on_state_change=vm_and_task_state

重启nova服务

监听的rabbitmq

routing_key:notification.info

exchange:nova

查看event_type为:compute.instance.update的消息,同时判断payload中state和old_state的值(根据event_type的名称我们也可以看出操作虚拟时一个动作后面的流程)

当两个值不一致的时候做相应的操作(更新数据库等)

测试脚本

#!/usr/bin/env python

import pika

import json

credentials = pika.PlainCredentials(‘xxx‘, ‘xxx‘)

params = pika.ConnectionParameters(host=‘xxx‘,credentials=credentials)

connection = pika.BlockingConnection(params)

channel = connection.channel()

exchange_name = ‘nova‘

queue_name = channel.queue_declare(exclusive=True).method.queue

binding_key = ‘notifications.info‘

channel.exchange_declare(exchange=exchange_name,type=‘topic‘)

channel.queue_bind(exchange=exchange_name,

queue=queue_name,

routing_key=binding_key)

print ‘ [*] Waiting for logs. To exit press CTRL+C‘

def callback(ch, method, properties, body):

b= json.loads(body)

print b[‘event_type‘],b[‘payload‘][‘state‘], b[‘payload‘][‘old_state‘]

# for key,value in b.iteritems():

# print key,‘:‘,value

channel.basic_consume(callback,queue=queue_name,no_ack=True)

channel.start_consuming()

参考(需墙)

原文:http://www.cnblogs.com/smallcoderhujin/p/4316456.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值