Parse the Fannie config file to get lane definitions for rattail.conf
when deploying Corporal via fabric
This commit is contained in:
parent
07857bf77c
commit
ca3a9e5ea5
|
@ -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
|
||||
|
|
34
corporal/fablib/deploy/corporal/parse-fannie-config.php
Normal file
34
corporal/fablib/deploy/corporal/parse-fannie-config.php
Normal file
|
@ -0,0 +1,34 @@
|
|||
<?php
|
||||
|
||||
$options = getopt('h', array(
|
||||
'help',
|
||||
'path:',
|
||||
'setting:',
|
||||
));
|
||||
|
||||
$help = isset($options['h']) or isset($options['help']);
|
||||
$path = isset($options['path']) ? $options['path'] : null;
|
||||
$setting = isset($options['setting']) ? $options['setting'] : null;
|
||||
|
||||
if ($help or !$path or !$setting) {
|
||||
$script = basename($argv[0]);
|
||||
echo "Usage: $script --path FANNIE_CONFIG_PATH --setting NAME_OF_SETTING\n";
|
||||
exit($help ? 0 : 1);
|
||||
}
|
||||
|
||||
if (!is_file(realpath($path))) {
|
||||
echo "Config file does not exist: $path\n";
|
||||
exit(2);
|
||||
}
|
||||
$path = realpath($path);
|
||||
include($path);
|
||||
|
||||
if (!isset($$setting)) {
|
||||
echo "Config file does not contain setting: $setting\n";
|
||||
exit(3);
|
||||
}
|
||||
$value = $$setting;
|
||||
|
||||
echo json_encode($value);
|
||||
|
||||
?>
|
|
@ -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>##############################</%text>
|
||||
# rattail
|
||||
|
|
Loading…
Reference in a new issue