bundlewrap/bundles/pretalx/items.py

189 lines
5.8 KiB
Python

actions = {
'pretalx_create_virtualenv': {
'command': '/usr/bin/python3 -m virtualenv -p python3 /opt/pretalx/venv/',
'unless': 'test -d /opt/pretalx/venv/',
'needs': {
# actually /opt/pretalx, but we don't create that
'directory:/opt/pretalx/src',
},
},
'pretalx_install': {
'command': 'cd /opt/pretalx/src/src && /opt/pretalx/venv/bin/pip install --upgrade pip wheel gunicorn psycopg2-binary .[redis]',
'needs': {
'action:pretalx_create_virtualenv',
},
'triggered': True,
},
'pretalx_migrate': {
'command': 'PRETALX_CONFIG_FILE=/opt/pretalx/pretalx.cfg /opt/pretalx/venv/bin/python -m pretalx migrate',
'needs': {
'action:pretalx_install',
'file:/opt/pretalx/pretalx.cfg',
'postgres_db:pretalx',
'postgres_role:pretalx',
},
'triggered': True,
},
'pretalx_rebuild': {
'command': 'sudo -u pretalx PRETALX_CONFIG_FILE=/opt/pretalx/pretalx.cfg /opt/pretalx/venv/bin/python -m pretalx rebuild',
'needs': {
'action:pretalx_install',
'directory:/opt/pretalx/data',
'directory:/opt/pretalx/static',
'file:/opt/pretalx/pretalx.cfg',
},
'triggered': True,
},
'pretalx_regenerate-css': {
'command': 'sudo -u pretalx PRETALX_CONFIG_FILE=/opt/pretalx/pretalx.cfg /opt/pretalx/venv/bin/python -m pretalx regenerate_css',
'needs': {
'action:pretalx_install',
'directory:/opt/pretalx/data',
'directory:/opt/pretalx/static',
'file:/opt/pretalx/pretalx.cfg',
},
'triggered': True,
},
}
users = {
'pretalx': {
'home': '/opt/pretalx',
},
}
directories = {
'/opt/pretalx/src': {},
'/opt/pretalx/data': {
'owner': 'pretalx',
},
'/opt/pretalx/static': {
'owner': 'pretalx',
},
}
git_deploy = {
'/opt/pretalx/src': {
'repo': 'https://github.com/pretalx/pretalx.git',
'rev': node.metadata['pretalx']['version'],
'triggers': {
'action:pretalx_install',
'action:pretalx_migrate',
'action:pretalx_rebuild',
'action:pretalx_regenerate-css',
'svc_systemd:pretalx-web:restart',
'svc_systemd:pretalx-worker:restart',
},
},
}
svc_systemd = {
'pretalx-runperiodic.timer': {
'needs': {
'action:pretalx_install',
'action:pretalx_migrate',
'file:/etc/systemd/system/pretalx-runperiodic.timer',
'file:/etc/systemd/system/pretalx-runperiodic.service',
'file:/opt/pretalx/pretalx.cfg',
},
},
'pretalx-clearsessions.timer': {
'needs': {
'action:pretalx_install',
'action:pretalx_migrate',
'file:/etc/systemd/system/pretalx-clearsessions.timer',
'file:/etc/systemd/system/pretalx-clearsessions.service',
'file:/opt/pretalx/pretalx.cfg',
},
},
'pretalx-web': {
'needs': {
'action:pretalx_install',
'action:pretalx_migrate',
'action:pretalx_rebuild',
'action:pretalx_regenerate-css',
'file:/etc/systemd/system/pretalx-web.service',
'file:/opt/pretalx/pretalx.cfg',
},
},
'pretalx-worker': {
'needs': {
'action:pretalx_install',
'action:pretalx_migrate',
'file:/etc/systemd/system/pretalx-worker.service',
'file:/opt/pretalx/pretalx.cfg',
},
},
}
files = {
'/opt/pretalx/pretalx.cfg': {
'content_type': 'mako',
'context': node.metadata['pretalx'],
'triggers': {
'svc_systemd:pretalx-web:restart',
'svc_systemd:pretalx-worker:restart',
},
},
'/etc/systemd/system/pretalx-runperiodic.timer': {
'triggers': {
'action:systemd-reload',
'svc_systemd:pretalx-runperiodic.timer:restart',
},
},
'/etc/systemd/system/pretalx-runperiodic.service': {
'triggers': {
'action:systemd-reload',
},
},
'/etc/systemd/system/pretalx-clearsessions.timer': {
'triggers': {
'action:systemd-reload',
'svc_systemd:pretalx-clearsessions.timer:restart',
},
},
'/etc/systemd/system/pretalx-clearsessions.service': {
'triggers': {
'action:systemd-reload',
},
},
'/etc/systemd/system/pretalx-web.service': {
'triggers': {
'action:systemd-reload',
'svc_systemd:pretalx-web:restart',
},
},
'/etc/systemd/system/pretalx-worker.service': {
'triggers': {
'action:systemd-reload',
'svc_systemd:pretalx-worker:restart',
},
},
}
# run `pip install` one after another due to concurrency issues
last_action = 'action:pretalx_install'
for plugin_name, plugin_config in node.metadata.get('pretalx/plugins', {}).items():
directories[f'/opt/pretalx/plugin_{plugin_name}'] = {}
git_deploy[f'/opt/pretalx/plugin_{plugin_name}'] = {
'repo': plugin_config['repo'],
'rev': plugin_config.get('rev', 'master'),
'triggers': {
f'action:pretalx_install_plugin_{plugin_name}',
},
}
actions[f'pretalx_install_plugin_{plugin_name}'] = {
'command': f'cd /opt/pretalx/plugin_{plugin_name} && /opt/pretalx/venv/bin/pip install --upgrade .',
'needs': {
last_action,
},
'triggers': {
'svc_systemd:pretalx-web:restart',
'svc_systemd:pretalx-worker:restart',
},
'triggered': True,
}
last_action = f'action:pretalx_install_plugin_{plugin_name}'