summaryrefslogtreecommitdiffstats
path: root/qa/tasks/rabbitmq.py
diff options
context:
space:
mode:
Diffstat (limited to 'qa/tasks/rabbitmq.py')
-rw-r--r--qa/tasks/rabbitmq.py130
1 files changed, 130 insertions, 0 deletions
diff --git a/qa/tasks/rabbitmq.py b/qa/tasks/rabbitmq.py
new file mode 100644
index 000000000..c78ac1e56
--- /dev/null
+++ b/qa/tasks/rabbitmq.py
@@ -0,0 +1,130 @@
+"""
+Deploy and configure RabbitMQ for Teuthology
+"""
+import contextlib
+import logging
+
+from teuthology import misc as teuthology
+from teuthology import contextutil
+from teuthology.orchestra import run
+
+log = logging.getLogger(__name__)
+
+
+@contextlib.contextmanager
+def install_rabbitmq(ctx, config):
+ """
+ Downloading the RabbitMQ package.
+ """
+ assert isinstance(config, dict)
+ log.info('Installing RabbitMQ...')
+
+ for (client, _) in config.items():
+ (remote,) = ctx.cluster.only(client).remotes.keys()
+
+ ctx.cluster.only(client).run(args=[
+ 'sudo', 'yum', '-y', 'install', 'epel-release'
+ ])
+
+ link1 = 'https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh'
+
+ ctx.cluster.only(client).run(args=[
+ 'curl', '-s', link1, run.Raw('|'), 'sudo', 'bash'
+ ])
+
+ ctx.cluster.only(client).run(args=[
+ 'sudo', 'yum', '-y', 'install', 'erlang'
+ ])
+
+ link2 = 'https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh'
+
+ ctx.cluster.only(client).run(args=[
+ 'curl', '-s', link2, run.Raw('|'), 'sudo', 'bash'
+ ])
+
+ ctx.cluster.only(client).run(args=[
+ 'sudo', 'yum', '-y', 'install', 'rabbitmq-server'
+ ])
+
+ try:
+ yield
+ finally:
+ log.info('Removing packaged dependencies of RabbitMQ...')
+
+ for (client, _) in config.items():
+ ctx.cluster.only(client).run(args=[
+ 'sudo', 'yum', '-y', 'remove', 'rabbitmq-server.noarch'
+ ])
+
+
+@contextlib.contextmanager
+def run_rabbitmq(ctx, config):
+ """
+ This includes two parts:
+ 1. Starting Daemon
+ 2. Starting RabbitMQ service
+ """
+ assert isinstance(config, dict)
+ log.info('Bringing up Daemon and RabbitMQ service...')
+ for (client,_) in config.items():
+ (remote,) = ctx.cluster.only(client).remotes.keys()
+
+ ctx.cluster.only(client).run(args=[
+ 'sudo', 'chkconfig', 'rabbitmq-server', 'on'
+ ],
+ )
+
+ ctx.cluster.only(client).run(args=[
+ 'sudo', '/sbin/service', 'rabbitmq-server', 'start'
+ ],
+ )
+
+ '''
+ # To check whether rabbitmq-server is running or not
+ ctx.cluster.only(client).run(args=[
+ 'sudo', '/sbin/service', 'rabbitmq-server', 'status'
+ ],
+ )
+ '''
+
+ try:
+ yield
+ finally:
+ log.info('Stopping RabbitMQ Service...')
+
+ for (client, _) in config.items():
+ (remote,) = ctx.cluster.only(client).remotes.keys()
+
+ ctx.cluster.only(client).run(args=[
+ 'sudo', '/sbin/service', 'rabbitmq-server', 'stop'
+ ],
+ )
+
+
+@contextlib.contextmanager
+def task(ctx,config):
+ """
+ To run rabbitmq the prerequisite is to run the tox task. Following is the way how to run
+ tox and then rabbitmq::
+ tasks:
+ - rabbitmq:
+ client.0:
+ """
+ assert config is None or isinstance(config, list) \
+ or isinstance(config, dict), \
+ "task rabbitmq only supports a list or dictionary for configuration"
+
+ all_clients = ['client.{id}'.format(id=id_)
+ for id_ in teuthology.all_roles_of_type(ctx.cluster, 'client')]
+ if config is None:
+ config = all_clients
+ if isinstance(config, list):
+ config = dict.fromkeys(config)
+
+ log.debug('RabbitMQ config is %s', config)
+
+ with contextutil.nested(
+ lambda: install_rabbitmq(ctx=ctx, config=config),
+ lambda: run_rabbitmq(ctx=ctx, config=config),
+ ):
+ yield