diff --git a/bundles/netbox/items.py b/bundles/netbox/items.py index b04698a..920aa78 100644 --- a/bundles/netbox/items.py +++ b/bundles/netbox/items.py @@ -1,124 +1,138 @@ -users = { - 'netbox': { - 'home': '/opt/netbox', - }, +users['netbox'] = { + 'home': '/opt/netbox', } -directories = { - '/opt/netbox/src': {}, - '/opt/netbox/media': { - 'owner': 'netbox', - }, - '/opt/netbox/scripts': { - 'owner': 'netbox', - }, +directories['/opt/netbox/src'] = {} + +directories['/opt/netbox/media'] = { + 'owner': 'netbox', } -git_deploy = { - '/opt/netbox/src': { - 'repo': 'https://github.com/netbox-community/netbox.git', - 'rev': node.metadata.get('netbox/version'), - 'triggers': { - 'action:netbox_install', - 'action:netbox_upgrade', - 'svc_systemd:netbox-web:restart', - 'svc_systemd:netbox-worker:restart', - }, +directories['/opt/netbox/scripts'] = { + 'owner': 'netbox', +} + +git_deploy['/opt/netbox/src'] = { + 'repo': 'https://github.com/netbox-community/netbox.git', + 'rev': node.metadata.get('netbox/version'), + 'triggers': { + 'action:netbox_install', + 'svc_systemd:netbox-web:restart', + 'svc_systemd:netbox-worker:restart', + }, + 'tags': { + 'netbox-install', }, } # This is a recreation of https://github.com/netbox-community/netbox/blob/develop/upgrade.sh -actions = { - 'netbox_create_virtualenv': { - 'command': '/usr/bin/python3 -m virtualenv -p python3 /opt/netbox/venv', - 'unless': 'test -d /opt/netbox/venv/', - 'needed_by': { - 'action:netbox_install', - }, - }, - 'netbox_install': { - 'triggered': True, - 'command': ' && '.join([ - 'cd /opt/netbox/src', - '/opt/netbox/venv/bin/pip install --upgrade pip wheel setuptools django-auth-ldap gunicorn', - '/opt/netbox/venv/bin/pip install --upgrade -r requirements.txt', - ]), - 'needs': { - 'pkg_apt:build-essential', - 'pkg_apt:graphviz', - 'pkg_apt:libffi-dev', - 'pkg_apt:libldap2-dev', - 'pkg_apt:libpq-dev', - 'pkg_apt:libsasl2-dev', - 'pkg_apt:libssl-dev', - 'pkg_apt:libxml2-dev', - 'pkg_apt:libxslt1-dev', - 'pkg_apt:python3-dev', - 'pkg_apt:zlib1g-dev', - } - }, - 'netbox_upgrade': { - 'triggered': True, - 'command': ' && '.join([ - '/opt/netbox/venv/bin/python /opt/netbox/src/netbox/manage.py migrate', - '/opt/netbox/venv/bin/python /opt/netbox/src/netbox/manage.py collectstatic --no-input', - '/opt/netbox/venv/bin/python /opt/netbox/src/netbox/manage.py remove_stale_contenttypes --no-input', - '/opt/netbox/venv/bin/python /opt/netbox/src/netbox/manage.py clearsessions', - ]), - 'needs': { - 'action:netbox_install', - 'file:/opt/netbox/src/netbox/netbox/configuration.py', - }, +actions['netbox_create_virtualenv'] = { + 'command': '/usr/bin/python3 -m virtualenv -p python3 /opt/netbox/venv', + 'unless': 'test -d /opt/netbox/venv/', + 'needed_by': { + 'action:netbox_install', }, } -files = { - '/usr/local/lib/systemd/system/netbox-web.service': { - 'triggers': { - 'action:systemd-reload', - 'svc_systemd:netbox-web:restart', - }, +actions['netbox_install'] = { + 'triggered': True, + 'command': ' && '.join([ + 'cd /opt/netbox/src', + '/opt/netbox/venv/bin/pip install --upgrade pip wheel setuptools django-auth-ldap gunicorn', + '/opt/netbox/venv/bin/pip install --upgrade -r requirements.txt', + ]), + 'needs': { + 'pkg_apt:build-essential', + 'pkg_apt:graphviz', + 'pkg_apt:libffi-dev', + 'pkg_apt:libldap2-dev', + 'pkg_apt:libpq-dev', + 'pkg_apt:libsasl2-dev', + 'pkg_apt:libssl-dev', + 'pkg_apt:libxml2-dev', + 'pkg_apt:libxslt1-dev', + 'pkg_apt:python3-dev', + 'pkg_apt:zlib1g-dev', }, - '/usr/local/lib/systemd/system/netbox-worker.service': { - 'triggers': { - 'action:systemd-reload', - 'svc_systemd:netbox-worker:restart', - }, - }, - '/opt/netbox/src/netbox/netbox/configuration.py': { - 'content_type': 'mako', - 'triggers': { - 'svc_systemd:netbox-web:restart', - 'svc_systemd:netbox-worker:restart', - }, - 'needs': { - 'git_deploy:/opt/netbox/src', - }, - }, - '/opt/netbox/gunicorn_config.py': { - 'content_type': 'mako', - 'triggers': { - 'svc_systemd:netbox-web:restart', - }, + 'tags': { + 'netbox-install', }, } -svc_systemd = { - 'netbox-web': { +last_action = 'netbox_install' +for upgrade_command in ( + 'migrate', + 'trace_paths --no-input', + 'collectstatic --no-input', + 'remove_stale_contenttypes --no-input', + 'reindex --no-input', + 'clearsessions', +): + actions[f'netbox_upgrade_{upgrade_command.split()[0]}'] = { + 'triggered': True, + 'command': '/opt/netbox/venv/bin/python /opt/netbox/src/netbox/manage.py {upgrade_command}', 'needs': { - 'action:netbox_install', - 'action:netbox_upgrade', - 'file:/usr/local/lib/systemd/system/netbox-web.service', - 'file:/opt/netbox/gunicorn_config.py', - 'file:/opt/netbox/src/netbox/netbox/configuration.py', + f'action:{last_action}', }, - }, - 'netbox-worker': { - 'needs': { - 'action:netbox_install', - 'action:netbox_upgrade', - 'file:/usr/local/lib/systemd/system/netbox-worker.service', - 'file:/opt/netbox/src/netbox/netbox/configuration.py', + 'tags': { + 'netbox-upgrade', }, + 'triggered_by': { + 'tag:netbox-install', + }, + } + last_action = f'netbox_upgrade_{upgrade_command.split()[0]}' + +files['/usr/local/lib/systemd/system/netbox-web.service'] = { + 'triggers': { + 'action:systemd-reload', + 'svc_systemd:netbox-web:restart', + }, +} + +files['/usr/local/lib/systemd/system/netbox-worker.service'] = { + 'triggers': { + 'action:systemd-reload', + 'svc_systemd:netbox-worker:restart', + }, +} + +files['/opt/netbox/src/netbox/netbox/configuration.py'] = { + 'content_type': 'mako', + 'triggers': { + 'svc_systemd:netbox-web:restart', + 'svc_systemd:netbox-worker:restart', + }, + 'needs': { + 'git_deploy:/opt/netbox/src', + }, + 'tags': { + 'netbox-install', + }, +} + +files['/opt/netbox/gunicorn_config.py'] = { + 'content_type': 'mako', + 'triggers': { + 'svc_systemd:netbox-web:restart', + }, +} + +svc_systemd['netbox-web'] = { + 'needs': { + 'file:/usr/local/lib/systemd/system/netbox-web.service', + 'file:/opt/netbox/gunicorn_config.py', + 'file:/opt/netbox/src/netbox/netbox/configuration.py', + 'tag:netbox-install', + 'tag:netbox-upgrade', + }, +} + +svc_systemd['netbox-worker'] = { + 'needs': { + 'file:/usr/local/lib/systemd/system/netbox-worker.service', + 'file:/opt/netbox/src/netbox/netbox/configuration.py', + 'tag:netbox-install', + 'tag:netbox-upgrade', }, }