#!/bin/sh echo "set -e" old_version="$(cat "$__object/explorer/version")" VERSION=$(cat "$__object/parameter/version") src="netbox-$VERSION" archive="v$VERSION.tar.gz" url="https://github.com/netbox-community/netbox/archive/$archive" install_dir=/opt/netbox/netbox if [ "$VERSION" != "$old_version" ]; then cat << EOF # Ensure that coreutils is installed. if [ ! -x \$(which mktemp) ]; then echo "mktemp is not available on the remote host." >&2 exit 1 fi # Create temporary working directory. tmpdir=\$(mktemp -d) cd "\$tmpdir" # Download and extract sources. curl -sS -L '$url' > '$archive' tar xf '$archive' # Save cdist-upload configuration file. cp '$install_dir/cdist/configuration.py' "\$tmpdir/configuration.py" cp '$install_dir/cdist/ldap_config.py' "\$tmpdir/ldap_config.py" EOF # Stop everything in the pyenv to update cat << EOF # Try to kill everything in the venv systemctl stop netbox gunicorn-netbox uwsgi-netbox || true ps -axo pid,cmd | awk '\$2 ~ "^/opt/netbox/venv/"{print \$1}' | xargs kill || true EOF cat << EOF # Deploy sources and restore configuration. rm -r '$install_dir' cp -r '$src/netbox' '$install_dir' mkdir '$install_dir/cdist' cp '$src/requirements.txt' /opt/netbox/ # backup dependency info cp \$tmpdir/configuration.py '$install_dir/netbox/configuration.py' cp \$tmpdir/ldap_config.py '$install_dir/netbox/ldap_config.py' # Setup & enter python virtualenv. # forcing python3 to be sure (till python4 gets released ..) virtualenv -p python3 /opt/netbox/venv # Install python dependencies. # avoid gunicorn, because it will be done in an other type grep -v "^gunicorn==" "\$tmpdir/$src/requirements.txt" \ | xargs /opt/netbox/venv/bin/pip3 install EOF if [ -f "$__object/parameter/ldap-server" ]; then echo "/opt/netbox/venv/bin/pip3 install django-auth-ldap" else echo "/opt/netbox/venv/bin/pip3 uninstall django-auth-ldap" fi cat << EOF # Set final permissions. chown -R netbox /opt/netbox # Run database migrations. sudo -u netbox /opt/netbox/venv/bin/python3 /opt/netbox/netbox/manage.py migrate # Generate static assets. sudo -u netbox /opt/netbox/venv/bin/python3 /opt/netbox/netbox/manage.py collectstatic --no-input # Remove temporary working directory. cd / rm -r "\$tmpdir" # Save version after successful installation printf "%s\\n" "$VERSION" > '$install_dir/cdist/version' EOF # meta printf "installed %s\n" "$VERSION" >> "$__messages_out" changes=yes # check if configuration changed elif grep -q "^__file/opt/netbox/" "$__messages_in"; then # check if coping is required if grep -q "^__file/opt/netbox/netbox/cdist/" "$__messages_in"; then cat << EOF # Copy configuration cp '$install_dir/cdist/configuration.py' '$install_dir/netbox/configuration.py' cp '$install_dir/cdist/ldap_config.py' '$install_dir/netbox/ldap_config.py' EOF fi # meta printf "configured\n" >> "$__messages_out" changes=yes fi # check for changes if [ "$changes" = "yes" ]; then cat << EOF # Restart service. service netbox restart service netbox-rq restart EOF fi