users = { 'netbox': { 'home': '/opt/netbox', }, } directories = { '/opt/netbox/src': {}, '/opt/netbox/media': { 'owner': 'netbox', }, '/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', 'action:netbox_upgrade', 'svc_systemd:netbox-web:restart', 'svc_systemd:netbox-worker:restart', }, }, } # 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 invalidate all', # clear cached data ]), 'needs': { 'action:netbox_install', 'file:/opt/netbox/src/netbox/netbox/configuration.py', }, }, } files = { '/etc/systemd/system/netbox-web.service': { 'triggers': { 'action:systemd-reload', 'svc_systemd:netbox-web:restart', }, }, '/etc/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', }, }, } svc_systemd = { 'netbox-web': { 'needs': { 'action:netbox_install', 'action:netbox_upgrade', 'file:/etc/systemd/system/netbox-web.service', 'file:/opt/netbox/gunicorn_config.py', 'file:/opt/netbox/src/netbox/netbox/configuration.py', }, }, 'netbox-worker': { 'needs': { 'action:netbox_install', 'action:netbox_upgrade', 'file:/etc/systemd/system/netbox-worker.service', 'file:/opt/netbox/src/netbox/netbox/configuration.py', }, }, }