From ca3a9e5ea544b5d53de5e221defc14c692c155a7 Mon Sep 17 00:00:00 2001 From: Lance Edgar Date: Thu, 22 Jul 2021 10:20:38 -0500 Subject: [PATCH] Parse the Fannie config file to get lane definitions for rattail.conf when deploying Corporal via fabric --- corporal/fablib/corporal.py | 29 ++++++++++++++-- .../deploy/corporal/parse-fannie-config.php | 34 +++++++++++++++++++ .../fablib/deploy/corporal/rattail.conf.mako | 7 ++++ 3 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 corporal/fablib/deploy/corporal/parse-fannie-config.php diff --git a/corporal/fablib/corporal.py b/corporal/fablib/corporal.py index 36a48fd..617e373 100644 --- a/corporal/fablib/corporal.py +++ b/corporal/fablib/corporal.py @@ -3,13 +3,17 @@ Fabric library for Corporal systems """ +import os +import json + from rattail_fabric2 import apache, postgresql, python, exists, mkdir from corporal.fablib import deploy_common def bootstrap_corporal_app(c, env, envname='corporal', user='rattail', - port=7900, sitename=None, stage=False): + port=7900, sitename=None, stage=False, + coredir=None, lanes=None): """ Create a virtual environment for use with a Corporal app. """ @@ -93,10 +97,14 @@ def bootstrap_corporal_app(c, env, envname='corporal', user='rattail', mkdir(c, '{}/data'.format(appdir), use_sudo=True, owner=user) # config / scripts + deploy_common(c, 'corporal/parse-fannie-config.php', '{}/parse-fannie-config.php'.format(appdir), + use_sudo=True, owner=user) + if lanes is None: + lanes = parse_fannie_lanes(c, '{}/parse-fannie-config.php'.format(appdir), coredir) deploy_common(c, 'corporal/rattail.conf.mako', '{}/rattail.conf'.format(appdir), use_sudo=True, owner=user, mode='0600', context={'env': env, 'envdir': envdir, 'dbname': dbname, - 'production': production}) + 'production': production, 'lanes': lanes}) if not exists(c, '{}/quiet.conf'.format(appdir)): c.sudo("bash -lc 'workon {} && cdvirtualenv app && rattail make-config -T quiet'".format(envname), user=user) @@ -144,3 +152,20 @@ def bootstrap_corporal_app(c, env, envname='corporal', user='rattail', enable=True, context={'sitename': sitename, 'port': port}) apache.restart(c) + + +def parse_fannie_lanes(c, script, coredir): + """ + Parse and return the CORE lane definitions from Fannie config file. + """ + lanes = [] + if coredir: + config = os.path.join(coredir, 'fannie', 'config.php') + if exists(c, config): + result = c.run('php {} --path {} --setting FANNIE_LANES'.format(script, config), + hide=True) + lanes = json.loads(result.stdout) + for number, lane in enumerate(lanes, 1): + lane['number'] = number + lane['dbkey'] = 'lane{:02d}'.format(number) + return lanes diff --git a/corporal/fablib/deploy/corporal/parse-fannie-config.php b/corporal/fablib/deploy/corporal/parse-fannie-config.php new file mode 100644 index 0000000..255f3eb --- /dev/null +++ b/corporal/fablib/deploy/corporal/parse-fannie-config.php @@ -0,0 +1,34 @@ + diff --git a/corporal/fablib/deploy/corporal/rattail.conf.mako b/corporal/fablib/deploy/corporal/rattail.conf.mako index 3f8acf4..96088e5 100644 --- a/corporal/fablib/deploy/corporal/rattail.conf.mako +++ b/corporal/fablib/deploy/corporal/rattail.conf.mako @@ -11,6 +11,13 @@ default.url = mysql+mysqlconnector://${env.username_mysql_coreserver}:${env.password_mysql_coreserver}@localhost/core_op default.pool_recycle = 3600 +[corepos.db.lane_op] +keys = ${', '.join([lane['dbkey'] for lane in lanes])} +% for lane in lanes: + +${lane['dbkey']}.url = mysql+mysqlconnector://${lane['user']}:${lane['pw']}@${lane['host']}/${lane['op']} +% endfor + <%text>############################## # rattail