码迷,mamicode.com
首页 > 其他好文 > 详细

Openstack中使用rabbitmq获取vm状态变化

时间:2015-03-05 19:12:07      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:

 

 

需求

及时知道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()

  

参考(需墙)

https://prosuncsedu.wordpress.com/2014/01/08/notification-of-actions-in-openstack-nova/

Openstack中使用rabbitmq获取vm状态变化

标签:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!