trove/reddwarf/guestagent/manager.py

90 lines
3.4 KiB
Python

from reddwarf.guestagent import dbaas
from reddwarf.guestagent import volume
from reddwarf.openstack.common import log as logging
from reddwarf.openstack.common import periodic_task
from reddwarf.openstack.common.gettextutils import _
LOG = logging.getLogger(__name__)
MYSQL_BASE_DIR = "/var/lib/mysql"
class Manager(periodic_task.PeriodicTasks):
@periodic_task.periodic_task(ticks_between_runs=10)
def update_status(self, context):
"""Update the status of the MySQL service"""
dbaas.MySqlAppStatus.get().update()
def create_database(self, context, databases):
return dbaas.MySqlAdmin().create_database(databases)
def create_user(self, context, users):
dbaas.MySqlAdmin().create_user(users)
def delete_database(self, context, database):
return dbaas.MySqlAdmin().delete_database(database)
def delete_user(self, context, user):
dbaas.MySqlAdmin().delete_user(user)
def list_databases(self, context, limit=None, marker=None,
include_marker=False):
return dbaas.MySqlAdmin().list_databases(limit, marker,
include_marker)
def list_users(self, context, limit=None, marker=None,
include_marker=False):
return dbaas.MySqlAdmin().list_users(limit, marker,
include_marker)
def enable_root(self, context):
return dbaas.MySqlAdmin().enable_root()
def is_root_enabled(self, context):
return dbaas.MySqlAdmin().is_root_enabled()
def prepare(self, context, databases, memory_mb, users, device_path=None,
mount_point=None):
"""Makes ready DBAAS on a Guest container."""
dbaas.MySqlAppStatus.get().begin_mysql_install()
# status end_mysql_install set with install_and_secure()
app = dbaas.MySqlApp(dbaas.MySqlAppStatus.get())
restart_mysql = False
if device_path:
device = volume.VolumeDevice(device_path)
device.format()
if app.is_installed():
#stop and do not update database
app.stop_mysql()
restart_mysql = True
#rsync exiting data
device.migrate_data(MYSQL_BASE_DIR)
#mount the volume
device.mount(mount_point)
LOG.debug(_("Mounted the volume."))
#check mysql was installed and stopped
if restart_mysql:
app.start_mysql()
app.install_and_secure(memory_mb)
LOG.info("Creating initial databases and users following successful "
"prepare.")
self.create_database(context, databases)
self.create_user(context, users)
LOG.info('"prepare" call has finished.')
def restart(self, context):
app = dbaas.MySqlApp(dbaas.MySqlAppStatus.get())
app.restart()
def start_mysql_with_conf_changes(self, context, updated_memory_size):
app = dbaas.MySqlApp(dbaas.MySqlAppStatus.get())
app.start_mysql_with_conf_changes(updated_memory_size)
def stop_mysql(self, context):
app = dbaas.MySqlApp(dbaas.MySqlAppStatus.get())
app.stop_mysql()
def get_filesystem_stats(self, context, fs_path):
""" Gets the filesystem stats for the path given """
return dbaas.Interrogator().get_filesystem_volume_stats(fs_path)