added HA queues
This commit is contained in:
@@ -14,6 +14,7 @@ COOKIE_PATH = '/var/lib/rabbitmq/.erlang.cookie'
|
|||||||
ENV_CONF = '/etc/rabbitmq/rabbitmq-env.conf'
|
ENV_CONF = '/etc/rabbitmq/rabbitmq-env.conf'
|
||||||
RABBITMQ_CONF = '/etc/rabbitmq/rabbitmq.config'
|
RABBITMQ_CONF = '/etc/rabbitmq/rabbitmq.config'
|
||||||
|
|
||||||
|
|
||||||
def vhost_exists(vhost):
|
def vhost_exists(vhost):
|
||||||
cmd = [RABBITMQ_CTL, 'list_vhosts']
|
cmd = [RABBITMQ_CTL, 'list_vhosts']
|
||||||
out = subprocess.check_output(cmd)
|
out = subprocess.check_output(cmd)
|
||||||
@@ -88,6 +89,9 @@ def cluster_with(host):
|
|||||||
vers = rabbit_version()
|
vers = rabbit_version()
|
||||||
if vers >= '3.0.1-1':
|
if vers >= '3.0.1-1':
|
||||||
cluster_cmd = 'join_cluster'
|
cluster_cmd = 'join_cluster'
|
||||||
|
cmd = [RABBITMQ_CTL, 'set_policy HA \'^(?!amq\.).*\' '
|
||||||
|
'\'{"ha-mode": "all"}\'']
|
||||||
|
subprocess.check_call(cmd)
|
||||||
else:
|
else:
|
||||||
cluster_cmd = 'cluster'
|
cluster_cmd = 'cluster'
|
||||||
out = subprocess.check_output([RABBITMQ_CTL, 'cluster_status'])
|
out = subprocess.check_output([RABBITMQ_CTL, 'cluster_status'])
|
||||||
@@ -122,7 +126,7 @@ def set_node_name(name):
|
|||||||
out.append(line)
|
out.append(line)
|
||||||
if not f:
|
if not f:
|
||||||
out.append('RABBITMQ_NODENAME=%s\n' % name)
|
out.append('RABBITMQ_NODENAME=%s\n' % name)
|
||||||
utils.juju_log('INFO', 'Updating %s, RABBITMQ_NODENAME=%s' %\
|
utils.juju_log('INFO', 'Updating %s, RABBITMQ_NODENAME=%s' %
|
||||||
(ENV_CONF, name))
|
(ENV_CONF, name))
|
||||||
with open(ENV_CONF, 'wb') as conf:
|
with open(ENV_CONF, 'wb') as conf:
|
||||||
conf.write(''.join(out))
|
conf.write(''.join(out))
|
||||||
@@ -142,8 +146,9 @@ def get_node_name():
|
|||||||
def _manage_plugin(plugin, action):
|
def _manage_plugin(plugin, action):
|
||||||
os.environ['HOME'] = '/root'
|
os.environ['HOME'] = '/root'
|
||||||
_rabbitmq_plugins = \
|
_rabbitmq_plugins = \
|
||||||
glob.glob('/usr/lib/rabbitmq/lib/rabbitmq_server-*/sbin/rabbitmq-plugins')[0]
|
glob.glob('/usr/lib/rabbitmq/lib/rabbitmq_server-*'
|
||||||
subprocess.check_call([ _rabbitmq_plugins, action, plugin])
|
'/sbin/rabbitmq-plugins')[0]
|
||||||
|
subprocess.check_call([_rabbitmq_plugins, action, plugin])
|
||||||
|
|
||||||
|
|
||||||
def enable_plugin(plugin):
|
def enable_plugin(plugin):
|
||||||
@@ -170,7 +175,6 @@ def enable_ssl(ssl_key, ssl_cert, ssl_port):
|
|||||||
os.chown(ssl_cert_file, uid, gid)
|
os.chown(ssl_cert_file, uid, gid)
|
||||||
with open(RABBITMQ_CONF, 'w') as rmq_conf:
|
with open(RABBITMQ_CONF, 'w') as rmq_conf:
|
||||||
rmq_conf.write(utils.render_template(os.path.basename(RABBITMQ_CONF),
|
rmq_conf.write(utils.render_template(os.path.basename(RABBITMQ_CONF),
|
||||||
{ "ssl_port": ssl_port,
|
{"ssl_port": ssl_port,
|
||||||
"ssl_cert_file": ssl_cert_file,
|
"ssl_cert_file": ssl_cert_file,
|
||||||
"ssl_key_file": ssl_key_file})
|
"ssl_key_file": ssl_key_file}))
|
||||||
)
|
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ from charmhelpers.contrib.charmsupport.nrpe import NRPE
|
|||||||
SERVICE_NAME = os.getenv('JUJU_UNIT_NAME').split('/')[0]
|
SERVICE_NAME = os.getenv('JUJU_UNIT_NAME').split('/')[0]
|
||||||
POOL_NAME = SERVICE_NAME
|
POOL_NAME = SERVICE_NAME
|
||||||
RABBIT_DIR = '/var/lib/rabbitmq'
|
RABBIT_DIR = '/var/lib/rabbitmq'
|
||||||
NAGIOS_PLUGINS='/usr/local/lib/nagios/plugins'
|
NAGIOS_PLUGINS = '/usr/local/lib/nagios/plugins'
|
||||||
|
|
||||||
|
|
||||||
def install():
|
def install():
|
||||||
@@ -74,7 +74,7 @@ def amqp_changed(relation_id=None, remote_unit=None):
|
|||||||
def cluster_joined():
|
def cluster_joined():
|
||||||
if utils.is_relation_made('ha'):
|
if utils.is_relation_made('ha'):
|
||||||
utils.juju_log('INFO',
|
utils.juju_log('INFO',
|
||||||
'hacluster relation is present, skipping native '\
|
'hacluster relation is present, skipping native '
|
||||||
'rabbitmq cluster config.')
|
'rabbitmq cluster config.')
|
||||||
return
|
return
|
||||||
l_unit_no = os.getenv('JUJU_UNIT_NAME').split('/')[1]
|
l_unit_no = os.getenv('JUJU_UNIT_NAME').split('/')[1]
|
||||||
@@ -84,7 +84,7 @@ def cluster_joined():
|
|||||||
return
|
return
|
||||||
rabbit.COOKIE_PATH = '/var/lib/rabbitmq/.erlang.cookie'
|
rabbit.COOKIE_PATH = '/var/lib/rabbitmq/.erlang.cookie'
|
||||||
if not os.path.isfile(rabbit.COOKIE_PATH):
|
if not os.path.isfile(rabbit.COOKIE_PATH):
|
||||||
utils.juju_log('ERROR', 'erlang cookie missing from %s' %\
|
utils.juju_log('ERROR', 'erlang cookie missing from %s' %
|
||||||
rabbit.COOKIE_PATH)
|
rabbit.COOKIE_PATH)
|
||||||
cookie = open(rabbit.COOKIE_PATH, 'r').read().strip()
|
cookie = open(rabbit.COOKIE_PATH, 'r').read().strip()
|
||||||
local_hostname = subprocess.check_output(['hostname']).strip()
|
local_hostname = subprocess.check_output(['hostname']).strip()
|
||||||
@@ -94,7 +94,7 @@ def cluster_joined():
|
|||||||
def cluster_changed():
|
def cluster_changed():
|
||||||
if utils.is_relation_made('ha'):
|
if utils.is_relation_made('ha'):
|
||||||
utils.juju_log('INFO',
|
utils.juju_log('INFO',
|
||||||
'hacluster relation is present, skipping native '\
|
'hacluster relation is present, skipping native '
|
||||||
'rabbitmq cluster config.')
|
'rabbitmq cluster config.')
|
||||||
return
|
return
|
||||||
l_unit_no = os.getenv('JUJU_UNIT_NAME').split('/')[1]
|
l_unit_no = os.getenv('JUJU_UNIT_NAME').split('/')[1]
|
||||||
@@ -132,7 +132,7 @@ def ha_joined():
|
|||||||
|
|
||||||
if None in [corosync_bindiface, corosync_mcastport, vip, vip_iface,
|
if None in [corosync_bindiface, corosync_mcastport, vip, vip_iface,
|
||||||
vip_cidr, rbd_name]:
|
vip_cidr, rbd_name]:
|
||||||
utils.juju_log('ERROR', 'Insufficient configuration data to '\
|
utils.juju_log('ERROR', 'Insufficient configuration data to '
|
||||||
'configure hacluster.')
|
'configure hacluster.')
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
@@ -162,19 +162,20 @@ def ha_joined():
|
|||||||
|
|
||||||
relation_settings['resource_params'] = {
|
relation_settings['resource_params'] = {
|
||||||
'res_rabbitmq_rbd': 'params name="%s" pool="%s" user="%s" '
|
'res_rabbitmq_rbd': 'params name="%s" pool="%s" user="%s" '
|
||||||
'secret="%s"' % \
|
'secret="%s"' %
|
||||||
(rbd_name, POOL_NAME,
|
(rbd_name, POOL_NAME,
|
||||||
SERVICE_NAME, ceph.keyfile_path(SERVICE_NAME)),
|
SERVICE_NAME, ceph.keyfile_path(SERVICE_NAME)),
|
||||||
'res_rabbitmq_fs': 'params device="/dev/rbd/%s/%s" directory="%s" '\
|
'res_rabbitmq_fs': 'params device="/dev/rbd/%s/%s" directory="%s" '
|
||||||
'fstype="ext4" op start start-delay="10s"' %\
|
'fstype="ext4" op start start-delay="10s"' %
|
||||||
(POOL_NAME, rbd_name, RABBIT_DIR),
|
(POOL_NAME, rbd_name, RABBIT_DIR),
|
||||||
'res_rabbitmq_vip': 'params ip="%s" cidr_netmask="%s" nic="%s"' %\
|
'res_rabbitmq_vip': 'params ip="%s" cidr_netmask="%s" nic="%s"' %
|
||||||
(vip, vip_cidr, vip_iface),
|
(vip, vip_cidr, vip_iface),
|
||||||
'res_rabbitmq-server': 'op start start-delay="5s" op monitor interval="5s"',
|
'res_rabbitmq-server': 'op start start-delay="5s" '
|
||||||
|
'op monitor interval="5s"',
|
||||||
}
|
}
|
||||||
|
|
||||||
relation_settings['groups'] = {
|
relation_settings['groups'] = {
|
||||||
'grp_rabbitmq': 'res_rabbitmq_rbd res_rabbitmq_fs res_rabbitmq_vip '\
|
'grp_rabbitmq': 'res_rabbitmq_rbd res_rabbitmq_fs res_rabbitmq_vip '
|
||||||
'res_rabbitmq-server',
|
'res_rabbitmq-server',
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -193,7 +194,7 @@ def ha_changed():
|
|||||||
return
|
return
|
||||||
vip = utils.config_get('vip')
|
vip = utils.config_get('vip')
|
||||||
utils.juju_log('INFO', 'ha_changed(): We are now HA clustered. '
|
utils.juju_log('INFO', 'ha_changed(): We are now HA clustered. '
|
||||||
'Advertising our VIP (%s) to all AMQP clients.' %\
|
'Advertising our VIP (%s) to all AMQP clients.' %
|
||||||
vip)
|
vip)
|
||||||
# need to re-authenticate all clients since node-name changed.
|
# need to re-authenticate all clients since node-name changed.
|
||||||
for rid in utils.relation_ids('amqp'):
|
for rid in utils.relation_ids('amqp'):
|
||||||
@@ -246,7 +247,8 @@ def ceph_changed():
|
|||||||
|
|
||||||
def update_nrpe_checks():
|
def update_nrpe_checks():
|
||||||
if os.path.isdir(NAGIOS_PLUGINS):
|
if os.path.isdir(NAGIOS_PLUGINS):
|
||||||
rsync(os.path.join(os.getenv('CHARM_DIR'), 'scripts', 'check_rabbitmq.py'),
|
rsync(os.path.join(os.getenv('CHARM_DIR'), 'scripts',
|
||||||
|
'check_rabbitmq.py'),
|
||||||
os.path.join(NAGIOS_PLUGINS, 'check_rabbitmq.py'))
|
os.path.join(NAGIOS_PLUGINS, 'check_rabbitmq.py'))
|
||||||
user = 'naigos'
|
user = 'naigos'
|
||||||
vhost = 'nagios'
|
vhost = 'nagios'
|
||||||
@@ -289,19 +291,20 @@ def upgrade_charm():
|
|||||||
|
|
||||||
MAN_PLUGIN = 'rabbitmq_management'
|
MAN_PLUGIN = 'rabbitmq_management'
|
||||||
|
|
||||||
|
|
||||||
def config_changed():
|
def config_changed():
|
||||||
if utils.config_get('management_plugin') == True:
|
if utils.config_get('management_plugin') is True:
|
||||||
rabbit.enable_plugin(MAN_PLUGIN)
|
rabbit.enable_plugin(MAN_PLUGIN)
|
||||||
utils.open_port(55672)
|
utils.open_port(55672)
|
||||||
else:
|
else:
|
||||||
rabbit.disable_plugin(MAN_PLUGIN)
|
rabbit.disable_plugin(MAN_PLUGIN)
|
||||||
utils.close_port(55672)
|
utils.close_port(55672)
|
||||||
|
|
||||||
if utils.config_get('ssl_enabled') == True:
|
if utils.config_get('ssl_enabled') is True:
|
||||||
ssl_key = utils.config_get('ssl_key')
|
ssl_key = utils.config_get('ssl_key')
|
||||||
ssl_cert = utils.config_get('ssl_cert')
|
ssl_cert = utils.config_get('ssl_cert')
|
||||||
ssl_port = utils.config_get('ssl_port')
|
ssl_port = utils.config_get('ssl_port')
|
||||||
if None in [ ssl_key, ssl_cert, ssl_port ]:
|
if None in [ssl_key, ssl_cert, ssl_port]:
|
||||||
utils.juju_log('ERROR',
|
utils.juju_log('ERROR',
|
||||||
'Please provide ssl_key, ssl_cert and ssl_port'
|
'Please provide ssl_key, ssl_cert and ssl_port'
|
||||||
' config when enabling SSL support')
|
' config when enabling SSL support')
|
||||||
|
|||||||
Reference in New Issue
Block a user