charm-mysql-router/src/reactive/mysql_router_handlers.py

102 lines
3.3 KiB
Python

import charms.reactive as reactive
import charms_openstack.bus
import charms_openstack.charm as charm
import charm.openstack.mysql_router as mysql_router # noqa
charms_openstack.bus.discover()
charm.use_defaults(
'charm.installed',
'config.changed',
'update-status',
'upgrade-charm')
@reactive.when('charm.installed')
@reactive.when('db-router.connected')
def db_router_request(db_router):
"""Send DB Router request to MySQL InnoDB Cluster.
Using the db-router interface send connection request.
:param db_router: DB-Router interface
:type db_router_interface: MySQLRouterRequires object
"""
with charm.provide_charm_instance() as instance:
db_router.set_prefix(instance.db_prefix)
db_router.configure_db_router(
instance.db_router_user,
instance.db_router_address,
prefix=instance.db_prefix)
instance.assess_status()
@reactive.when('charm.installed')
@reactive.when(mysql_router.DB_ROUTER_AVAILABLE)
@reactive.when_not(mysql_router.MYSQL_ROUTER_BOOTSTRAPPED)
def bootstrap_mysqlrouter(db_router):
"""Bootstrap MySQL Router.
:param db_router: DB-Router interface
:type db_router_interface: MySQLRouterRequires object
"""
with charm.provide_charm_instance() as instance:
instance.bootstrap_mysqlrouter()
instance.assess_status()
@reactive.when('charm.installed')
@reactive.when(mysql_router.DB_ROUTER_AVAILABLE)
@reactive.when(mysql_router.MYSQL_ROUTER_BOOTSTRAPPED)
@reactive.when_not(mysql_router.MYSQL_ROUTER_STARTED)
def start_mysqlrouter(db_router):
"""Start MySQL Router.
:param db_router: DB-Router interface
:type db_router_interface: MySQLRouterRequires object
"""
with charm.provide_charm_instance() as instance:
instance.start_mysqlrouter()
instance.assess_status()
@reactive.when(mysql_router.MYSQL_ROUTER_STARTED)
@reactive.when(mysql_router.DB_ROUTER_AVAILABLE)
@reactive.when('shared-db.available')
def proxy_shared_db_requests(shared_db, db_router):
"""Proxy database and user requests to the MySQL InnoDB Cluster.
Take requests from the shared-db relation and proxy them to the
db-router relation using their respective endpoints.
:param shared_db: Shared-DB interface
:type shared-db: MySQLSharedProvides object
:param db_router: DB-Router interface
:type db_router_interface: MySQLRouterRequires object
"""
with charm.provide_charm_instance() as instance:
instance.proxy_db_and_user_requests(shared_db, db_router)
instance.assess_status()
@reactive.when(mysql_router.MYSQL_ROUTER_STARTED)
@reactive.when(mysql_router.DB_ROUTER_PROXY_AVAILABLE)
@reactive.when('shared-db.available')
def proxy_shared_db_responses(shared_db, db_router):
"""Proxy database and user responses to clients.
Take responses from the db-router relation and proxy them to the
shared-db relation using their respective endpoints.
:param shared_db: Shared-DB interface
:type shared-db: MySQLSharedProvides object
:param db_router: DB-Router interface
:type db_router_interface: MySQLRouterRequires object
"""
with charm.provide_charm_instance() as instance:
instance.proxy_db_and_user_responses(db_router, shared_db)
instance.assess_status()