diff --git a/wcsinst/wcsinstd/deploy.py b/wcsinst/wcsinstd/deploy.py index b57929b..30213db 100644 --- a/wcsinst/wcsinstd/deploy.py +++ b/wcsinst/wcsinstd/deploy.py @@ -2,6 +2,7 @@ import string import cPickle import os import zipfile +import subprocess from urlparse import urlparse from cStringIO import StringIO @@ -65,18 +66,55 @@ class DeployInstance(object): wcs_cfg = cPickle.load(file(os.path.join(self.collectivity_install_dir, 'config.pck'))) else: wcs_cfg = {} - # TODO: there are some settings to change in wcs_cfg - # (like the name of the database) + has_sql = self.make_sql_config(wcs_cfg) self.make_sso_config(wcs_cfg) self.make_site_options() cPickle.dump(wcs_cfg, file(config_file, 'w')) + if has_sql: + self.make_sql_tables(wcs_cfg) + self.make_apache_vhost() self.reload_apache() + def make_sql_config(self, wcs_cfg): + if not wcs_cfg.get('postgresql'): + # this is not a site configured to use SQL + return False + + database_name = wcs_cfg['postgresql'].get('database', 'wcs') + domain_table_name = self.domain.replace('-', '_').replace('.', '_') + if '_' in database_name: + database_name = '%s_%s' % (database_name.split('_')[0], domain_table) + else: + database_name = '%s_%s' % (database_name, domain_table) + + try: + pgconn = psycopg2.connect(**wcs_cfg['postgresql']) + except psycopg2.Error: + # XXX: log + raise + + cur = pgconn.cursor() + cur.execute('''CREATE DATABASE %s''' % database_name) + pgconn.commit() + cur.close() + + wcs_cfg['postgresql']['database'] = database_name + + return True + + def make_sql_tables(self, wcs_cfg): + params = [] + for param in ('dbname', 'user', 'password', 'host', 'port'): + if wcs_cfg.get('postgresql').get(param): + params.append(param) + params.append(wcs_cfg.get('postgresql').get(param)) + os.system('wcsctl convertsql %s %s' % (' '.join(params), self.domain)) + def make_sso_config(self, wcs_cfg): has_idff = False has_saml2 = False