users['netbox'] = { 'home': '/opt/netbox', } directories['/opt/netbox/src'] = {} directories['/opt/netbox/media'] = { 'owner': 'netbox', } 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', }, } 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', }, 'tags': { 'netbox-install', }, } last_action = 'netbox_install' for upgrade_command in ( 'migrate', 'trace_paths --no-input', 'collectstatic --no-input', 'remove_stale_contenttypes --no-input', 'reindex --lazy', 'clearsessions', ): actions[f'netbox_upgrade_{upgrade_command.split()[0]}'] = { 'triggered': True, 'command': f'/opt/netbox/venv/bin/python /opt/netbox/src/netbox/manage.py {upgrade_command}', 'needs': { f'action:{last_action}', }, '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', }, }