[AB-155] removing ansible dependency from installer, restructuring deployment container to be packaged with the respective versions, removing build for docker container from maven, for now

fixing liquibase setup for feature mode
This commit is contained in:
Sheldan
2020-11-02 13:03:18 +01:00
parent 389b38f4f0
commit a5b2e40c6b
17 changed files with 331 additions and 121 deletions

View File

@@ -0,0 +1,7 @@
import os
def deploy_liquibase(folder, change_log_file, liquibase_path):
stream = os.popen('cd liquibase-zips/%s && %s/liquibase --defaultsFile=%s --liquibaseSchemaName=abstracto --liquibaseCatalogName=abstracto --logLevel=info update' % (folder, liquibase_path, change_log_file))
output = stream.read()
print(output)

View File

@@ -0,0 +1,62 @@
import json
import os
import jinja2
import templates_deploy
import liquibase_deploy
from zipfile import ZipFile
import sys
if len(sys.argv) != 3:
sys.exit('Wrong amount of parameters.')
deploy_templates = sys.argv[1] == 'yes'
deploy_liquibase = sys.argv[2] == 'yes'
class DbConfig:
def __init__(self):
self.host = os.getenv('DB_HOST')
self.port = os.getenv('DB_PORT')
self.database = os.getenv('DB_NAME')
self.user = os.getenv('DB_USER')
self.password = os.getenv('DB_PASS')
postgres_driver_path = os.getenv('POSTGRES_DRIVER')
liquibase_path = os.getenv('LIQUIBASE_PATH')
with open('artifact_versions.json') as artifact_config_file:
artifact_config = json.load(artifact_config_file)
db_config = DbConfig()
templateLoader = jinja2.FileSystemLoader(searchpath="/python/templates")
templateEnv = jinja2.Environment(loader=templateLoader)
template = templateEnv.get_template("liquibase.properties.j2")
if deploy_liquibase:
for liquibase_artifact in artifact_config['liquibase_artifacts']:
zip_file = liquibase_artifact['zip']
target_folder = '/liquibase-zips/' + zip_file
with ZipFile('liquibase-zips/' + zip_file + '.zip', 'r') as liquibase_zip:
liquibase_zip.extractall(target_folder)
change_log_file = liquibase_artifact['file']
liquibase_config_text = template.render(change_log_file=change_log_file, db_host=db_config.host, db_port=db_config.port,
db_database=db_config.database, db_user=db_config.user, db_password=db_config.password, postgres_driver_path=postgres_driver_path)
property_path = target_folder + '/liquibase.properties'
with open(property_path, 'w') as liquibase_target_properties:
liquibase_target_properties.write(liquibase_config_text)
liquibase_deploy.deploy_liquibase(zip_file, property_path, liquibase_path)
if deploy_templates:
for template_artifact in artifact_config['template_artifacts']:
with ZipFile('templates/' + template_artifact + '.zip', 'r') as template_zip:
template_zip.extractall(template_artifact)
templates_deploy.deploy_template_folder(db_config, template_artifact)
for template_artifact in artifact_config['translation_artifacts']:
with ZipFile('translations/' + template_artifact + '.zip', 'r') as template_zip:
template_zip.extractall(template_artifact)
templates_deploy.deploy_template_folder(db_config, template_artifact)

View File

@@ -0,0 +1,6 @@
changeLogFile: {{ change_log_file }}
driver: org.postgresql.Driver
url: jdbc:postgresql://{{ db_host }}:{{ db_port }}/{{ db_database }}
username: {{ db_user }}
password: {{ db_password }}
classpath: {{ postgres_driver_path }}

View File

@@ -0,0 +1,29 @@
import sqlalchemy as db
import glob
import os
from sqlalchemy.sql import text
def deploy_template_folder(db_config, folder):
engine = db.create_engine('postgres://%s:%s@%s:%s/%s' % (db_config.user, db_config.password, db_config.host, db_config.port, db_config.database))
if not os.path.isdir(folder):
print("Given path was not a folder. Exiting.")
exit(1)
files = glob.glob(folder + '/**/*.ftl', recursive=True)
templates = []
for file in files:
with open(file) as template_file:
file_content = template_file.read()
template_key = os.path.splitext(os.path.basename(file))[0]
template = {'key': template_key, 'content': file_content}
templates.append(template)
print('Deploying %s templates from folder %s' % (len(templates), folder))
with engine.connect() as con:
statement = text("""INSERT INTO template(key, content, last_modified) VALUES(:key, :content, NOW()) ON CONFLICT (key) DO UPDATE SET content = :content""")
for line in templates:
con.execute(statement, **line)