valet/doc/ostro_listener.md
Tanvir Talukder ad2b7fab31 Fix pep8 and docstring violations
Fix issues in py files in the directories
valet/valet/api/common
valet/api
valet/cli
valet/engine/optimizer/
valet/tests/
valet/tests/tempest
valet_plugins
2017-05-01 19:24:57 -05:00

8.0 KiB

OpenStack Event Listener for Ostro

This script listens for specific messages needed by Ostro to maintain up-to-date cloud state. It can persist digested versions of the messages to Music, which Ostro then picks up.

Note: This version of the listener does not use oslo.messaging. It listens directly to RabbitMQ. Future revisions are expected to use oslo.messaging in order to keep the means of transport abstract.

Prerequisites

Prior to installation:

  • Ubuntu 14.04 LTS
  • Python 2.7.6 with pip
  • Access to an OpenStack Kilo cloud (RabbitMQ in particular)
  • Access to Music and Ostro

Throughout this document, the following installation-specific items are required. Have values for these prepared and ready before continuing. Suggestions for values are provided in this document where applicable.

Name Description Example
$USER User id user1234
$VENV Python virtual environment path (if any) /etc/ostro-listener/venv
$OSTRO_LISTENER_PATH Local git repository's ostro_listener directory /home/user1234/git/allegro/ostro_listener
$CONFIG_FILE Event Listener configuration file /etc/ostro-listener/ostro-listener.conf
$RABBITMQ_HOST RabbitMQ hostname or IP address localhost
$RABBITMQ_USERNAME RabbitMQ username guest
$RABBITMQ_PASSWORD_FILE Full path to RabbitMQ password file /etc/ostro-listener/passwd
$MUSIC_URL Music API endpoints and port in URL format http://127.0.0.1:8080/
$MUSIC_KEYSPACE Music keyspace valet
$MUSIC_REPLICATION_FACTOR Music replication factor 1

Root or sufficient sudo privileges are required for some steps.

A Note About Python Virtual Environments

It is recommended to consider using a python virtuals environment (venv). A venv helps avoid instabilities and conflicts within the default python environment.

Installation

Install ostro-listener on any node with line-of-sight to the RabbitMQ endpoint from which messages are to be monitored.

ostro-listener is located in ostro_listener.

$ cd $OSTRO_LISTENER_PATH
$ sudo pip install .

Command Line Usage

usage: ostro-listener [-h] [-c OSTRO_LISTENER_CONFIG] [-x EXCHANGE]
                      [-t {topic,fanout}] [-a] [-H HOST] [-p PORT]
                      [-u USERNAME] [-P PASSWDFILE] [-o {yaml,json,dict}] [-s]
                      [-m MUSIC] [-k KEYSPACE] [-r REPLICATION_FACTOR]

Ostro-specific OpenStack Event Listener

optional arguments:
  -h, --help            show this help message and exit
  -c OSTRO_LISTENER_CONFIG, --conf_file OSTRO_LISTENER_CONFIG
                        Defaults to env[OSTRO_LISTENER_CONFIG]
  -x EXCHANGE, --exchange EXCHANGE
                        rabbit exchange to listen to
  -t {topic,fanout}, --exchange_type {topic,fanout}
                        type of exchange (default="topic")
  -a, --auto_delete     autodelete exchange (default=False)
  -H HOST, --host HOST  compute node on which rabbitmq is running
  -p PORT, --port PORT  port on which rabbitmq is running
  -u USERNAME, --username USERNAME
                        rabbitmq username (default="guest")
  -P PASSWDFILE, --passwdfile PASSWDFILE
                        file containing host rabbitmq passwords
  -o {yaml,json,dict}, --output_format {yaml,json,dict}
                        output format (default="dict")
  -s, --store           store messages in music (default=False)
  -m MUSIC, --music MUSIC
                        music endpoint
  -k KEYSPACE, --keyspace KEYSPACE
                        music keyspace
  -r REPLICATION_FACTOR, --replication_factor REPLICATION_FACTOR
                        music replication factor

Example Invocation

Split across lines for readability:

# ostro-listener -x nova -t topic -s
                 -H $RABBITMQ_HOST
                 -u $RABBITMQ_USERNAME
                 -P $RABBITMQ_PASSWORD_FILE
                 -m $MUSIC_URL
                 -k $MUSIC_KEYSPACE
                 -r $MUSIC_REPLICATION_FACTOR

Note: This script has kept its original flexibility in that it may also be used to listen to other exchanges/topics.

Always use the nova exchange (-x nova) and topic exchange type (-t topic) when using in conjunction with Ostro and Music.

IMPORTANT: Always use topic exchanges for "listening on the wire" to OpenStack message traffic. Failure to do so could risk other RabbitMQ users (e.g., OpenStack services) missing important messages, and then you will be sad.

Password File

A sample password file can be found in $OSTRO_LISTENER_PATH/etc/ostro_listener/passwd.txt.

Copy this file to another location before editing, for example /etc/ostro-listener/passwd.

The password file must be protected. In particular, it must not be readable by group/other users. It is often set to root ownership.

Within the file, separate hosts/IPs and passwords with a single space. For example:

127.0.0.1 password
localhost password
myhost password
myhost.at.att.com password

Hosts/IPs will match based on the value of $RABBITMQ_HOST.

Using a Configuration File

A sample configuration file can be found in $OSTRO_LISTENER_PATH/etc/ostro_listener/ostro-listener.conf.txt:

[DEFAULT]
exchange = nova
exchange_type = topic
auto_delete = false
host = localhost
port = 5672
username = guest
passwdfile = /etc/ostro-listener/passwd
output_format = dict
store = true
music = http://127.0.0.1:8080/
keyspace = music
replication_factor = 1

Copy this file to another location before editing.

Configuration files may be referenced in one of two ways, through the --config-file option:

# ostro-listener --config-file $CONFIG_FILE

... or via an environment variable:

# export OSTRO_EVENT_LISTENER_CONFIG=$CONFIG_FILE
# ostro-listener

Running as an Ubuntu Service

A sample Ubuntu init.d script can be found in $OSTRO_LISTENER_PATH/etc/ostro_listener/ostro-listener.initd.txt.

To use, first copy this script to /etc/init.d/ostro-listener:

$ sudo cp $OSTRO_LISTENER_PATH/etc/ostro_listener/ostro-listener.initd.txt /etc/init.d/ostro-listener
$ sudo chmod 755 /etc/init.d/ostro-listener

If ostro-listener was installed in a Python virtual environment, edit /etc/init.d/ostro-listener, uncomment the export VENV line, and adjust as needed. For example, if the virtual environment is installed in /etc/ostro-listener/venv, assign VENV as follows:

export VENV=/etc/ostro-listener/venv

Create /var/log and /var/run directories for use by the service:

$ sudo mkdir /var/log/ostro-listener
$ sudo mkdir /var/run/ostro-listener
$ sudo chmod 750 /var/log/ostro-listener
$ sudo chmod 755 /var/run/ostro-listener

Set the run level defaults, then enable ostro-listener as a service:

$ sudo update-rc.d ostro-listener defaults
$ sudo update-rc.d ostro-listener enable

To start the ostro-listener service:

$ sudo service ostro-listener start

While running, a process ID file will be found in /var/run/ostro-listener/ostro-listener.pid, and a log file will be found in /var/log/ostro-listener/ostro-listener.log. The log is appended to upon subsequent starts. Log rotation is left to the discretion of the server administrator.

To stop the ostro-listener service:

$ sudo service ostro-listener stop

The process ID file will be removed from /var/run/ostro-listener upon stopping.

Uninstallation

Activate a virtual environment (venv) first if necessary.

Disable ostro-listener as a service, then uninstall:

$ sudo update-rc.d ostro-listener disable
$ sudo pip uninstall ostro-listener

Remove previously made configuration file changes, files, and other settings as needed.