Adding bootstrap-mysqlrouter action.
Change-Id: I02770615cd2cce4ef8e12546c70e9df5a74848b3
This commit is contained in:
parent
b9173b52e9
commit
74bdf5b5d1
|
@ -7,3 +7,6 @@ start-mysqlrouter:
|
||||||
restart-mysqlrouter:
|
restart-mysqlrouter:
|
||||||
description: |
|
description: |
|
||||||
Restart the mysqlrouter daemon
|
Restart the mysqlrouter daemon
|
||||||
|
bootstrap-mysqlrouter:
|
||||||
|
description: |
|
||||||
|
Bootstrap the mysqlrouter
|
||||||
|
|
|
@ -35,6 +35,7 @@ _add_path(_reactive)
|
||||||
import charms_openstack.charm as charm
|
import charms_openstack.charm as charm
|
||||||
import charmhelpers.core as ch_core
|
import charmhelpers.core as ch_core
|
||||||
import charms_openstack.bus
|
import charms_openstack.bus
|
||||||
|
import charms.reactive as reactive
|
||||||
charms_openstack.bus.discover()
|
charms_openstack.bus.discover()
|
||||||
|
|
||||||
|
|
||||||
|
@ -113,11 +114,68 @@ def restart_mysqlrouter(args):
|
||||||
ch_core.hookenv.action_fail("Retart MySQLRouter failed.")
|
ch_core.hookenv.action_fail("Retart MySQLRouter failed.")
|
||||||
|
|
||||||
|
|
||||||
|
def bootstrap_mysqlrouter(args):
|
||||||
|
"""Display cluster status
|
||||||
|
|
||||||
|
Return cluster.status() as a JSON encoded dictionary
|
||||||
|
|
||||||
|
:param args: sys.argv
|
||||||
|
:type args: sys.argv
|
||||||
|
:side effect: Calls instance.get_cluster_status
|
||||||
|
:returns: This function is called for its side effect
|
||||||
|
:rtype: None
|
||||||
|
:action return: Dictionary with command output
|
||||||
|
"""
|
||||||
|
with charm.provide_charm_instance() as instance:
|
||||||
|
try:
|
||||||
|
releations = ch_core.hookenv.relation_ids('db-router')
|
||||||
|
password = None
|
||||||
|
db_host = None
|
||||||
|
|
||||||
|
for relid in relations:
|
||||||
|
related_units = ch_core.hookenv.related_units(relid=relid)
|
||||||
|
for related_unit in related_units:
|
||||||
|
data = ch_core.hookenv.relation_get(
|
||||||
|
rid=relid,
|
||||||
|
unit=related_unit)
|
||||||
|
if "mysqlrouter_password" in data:
|
||||||
|
password = data["mysqlrouter_password"].replace('"', '')
|
||||||
|
if "db_host" in data:
|
||||||
|
db_host = data["db_host"].replace('"', '')
|
||||||
|
|
||||||
|
cmd = [
|
||||||
|
"/usr/bin/mysqlrouter",
|
||||||
|
"--user", "mysql",
|
||||||
|
"--name", ch_core.hookenv.service_name(),
|
||||||
|
"--bootstrap",
|
||||||
|
"{}:{}@{}".format("mysql",
|
||||||
|
password,
|
||||||
|
db_host),
|
||||||
|
"--directory", instance.mysqlrouter_working_dir(),
|
||||||
|
"--conf-use-sockets",
|
||||||
|
"--conf-bind-address", "127.0.0.1",
|
||||||
|
"--report-host", instnace.db_router_address(),
|
||||||
|
"--conf-base-port", str(instance.mysqlrouter_port),
|
||||||
|
"--force",
|
||||||
|
]
|
||||||
|
output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)
|
||||||
|
|
||||||
|
instance.assess_status()
|
||||||
|
ch_core.hookenv.action_set({"outcome": "Success"})
|
||||||
|
except subprocess.CalledProcessError as e:
|
||||||
|
ch_core.hookenv.action_set({
|
||||||
|
"output": e.output,
|
||||||
|
"return-code": e.returncode,
|
||||||
|
"traceback": traceback.format_exc()})
|
||||||
|
ch_core.hookenv.action_fail("Bootstrap MySQLRouter failed.")
|
||||||
|
|
||||||
|
|
||||||
# A dictionary of all the defined actions to callables (which take
|
# A dictionary of all the defined actions to callables (which take
|
||||||
# parsed arguments).
|
# parsed arguments).
|
||||||
ACTIONS = {"stop-mysqlrouter": stop_mysqlrouter,
|
ACTIONS = {"stop-mysqlrouter": stop_mysqlrouter,
|
||||||
"start-mysqlrouter": start_mysqlrouter,
|
"start-mysqlrouter": start_mysqlrouter,
|
||||||
"restart-mysqlrouter": restart_mysqlrouter}
|
"restart-mysqlrouter": restart_mysqlrouter,
|
||||||
|
"bootstrap-mysqlrouter": bootstrap_mysqlrouter,}
|
||||||
|
|
||||||
|
|
||||||
def main(args):
|
def main(args):
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
actions.py
|
Loading…
Reference in New Issue