-
-
Save vagelim/64b355b65378ecba15b0 to your computer and use it in GitHub Desktop.
######################################## | |
# Required changes to nova.conf # | |
######################################## | |
# notification_driver=nova.openstack.common.notifier.rpc_notifier | |
# notification_topics = notifications | |
# notify_on_state_change = vm_and_task_state | |
# instance_usage_audit_period = hour | |
# instance_usage_audit = True | |
# default_notification_level = INFO | |
# notify_api_faults = true | |
###### Restart Nova services after making the above changes ####### | |
# Environment Variables: $AMQP_USER, $AMQP_PASSWORD, $AMQP_HOST | |
import os | |
from kombu import Connection, Exchange, Queue | |
from pprint import pprint | |
nova_x = Exchange('nova', type='topic', durable=False) | |
info_q = Queue('notifications.info', exchange=nova_x, durable=False, | |
routing_key='notifications.info') | |
def process_msg(body, message): | |
print '='*80 | |
pprint(body) | |
message.ack() | |
# Maybe wrap these in try/except: will raise KeyError if not found | |
AMQP_USER = os.environ['AMQP_USER'] | |
AMQP_PASSWORD = os.environ['AMQP_PASSWORD'] | |
AMQP_HOST = os.environ['AMQP_HOST'] | |
# Maybe wrap this in a try/except: will raise socket.error if connection refused | |
with Connection('amqp://{0}:{1}@{2}//'.format(AMQP_USER, AMQP_PASSWORD, AMQP_HOST)) as conn: | |
with conn.Consumer(info_q, callbacks=[process_msg]): | |
try: | |
while True: | |
conn.drain_events() | |
except KeyboardInterrupt: | |
exit() |
Well 2. is not an assumption you can make about all hosts running Nova. People will install nova and dependencies into virtual environments and wherever else they like if they don't want to interfere with their system python. I would suggest you drop the shebang and suggest people run it like </path/to/nova/env/>bin/python openstack_events.py
. You can probably trust people to know where this directory is. If not, then maybe: wrap this in a PyPi package that ships kombu as a separate dependency OR write a bash script that creates a virtualenv, installs kombu, runs venv/bin/python openstackEvents.py
Made the changes to environment variables.
I think the bash script option is best. I quickly wrote one here: https://gist.github.com/vagelim/98c8792ba12dc8f90341
@talwai
Hello,
I had to replace routing_key='notifications.info' by routing_key='notifications.*' since I was not catching some nova messages like instance.create.{start,end} amongst others.
I also made a slightly modified version of the script in this gist which is much less verbose, which I used to correlate event start/end times:
which produces output like: