diff --git a/trove/conductor/api.py b/trove/conductor/api.py index 1d3fdc64e7..72b5a9e909 100644 --- a/trove/conductor/api.py +++ b/trove/conductor/api.py @@ -51,3 +51,10 @@ class API(proxy.RpcProxy): backup_id=backup_id, sent=sent, **backup_fields)) + + def report_root(self, instance_id, user): + LOG.debug("Making async call to cast report_root for instance: %s" + % instance_id) + self.cast(self.context, self.make_msg("report_root", + instance_id=instance_id, + user=user)) diff --git a/trove/conductor/manager.py b/trove/conductor/manager.py index 136a7623e3..c4a19abf20 100644 --- a/trove/conductor/manager.py +++ b/trove/conductor/manager.py @@ -17,6 +17,7 @@ from trove.common import cfg from trove.common import exception from trove.common.instance import ServiceStatus from trove.conductor.models import LastSeen +from trove.extensions.mysql import models as mysql_models from trove.instance import models as t_models from trove.openstack.common import log as logging from trove.openstack.common import periodic_task @@ -128,3 +129,6 @@ class Manager(periodic_task.PeriodicTasks): LOG.debug("Backup %(key)s: %(value)s" % fields) setattr(backup, k, v) backup.save() + + def report_root(self, context, instance_id, user): + mysql_models.RootHistory.create(context, instance_id, user) diff --git a/trove/guestagent/datastore/mysql/manager.py b/trove/guestagent/datastore/mysql/manager.py index db29c80d62..b48022517d 100644 --- a/trove/guestagent/datastore/mysql/manager.py +++ b/trove/guestagent/datastore/mysql/manager.py @@ -138,6 +138,7 @@ class Manager(periodic_task.PeriodicTasks): MySqlAdmin().enable_root(root_password) elif enable_root_on_restore: app.secure_root(secure_remote_root=False) + MySqlAppStatus.get().report_root('root') else: app.secure_root(secure_remote_root=True) diff --git a/trove/guestagent/datastore/service.py b/trove/guestagent/datastore/service.py index 81dae9a7ae..83fbaf6afb 100644 --- a/trove/guestagent/datastore/service.py +++ b/trove/guestagent/datastore/service.py @@ -154,3 +154,12 @@ class BaseDbStatus(object): return True LOG.error("Time out while waiting for DB status to change!") return False + + def report_root(self, user): + """Use conductor to update the root-enable status.""" + LOG.debug("Casting report_root message to conductor.") + ctxt = context.TroveContext(user=CONF.nova_proxy_admin_user, + auth_token=CONF.nova_proxy_admin_pass) + + conductor_api.API(ctxt).report_root(CONF.guest_id, user) + LOG.debug("Successfully cast report_root.")