Author | SHA1 | Message | Date |
---|---|---|---|
|
6b52af2391 | pivot out host_vars | 6 years ago |
|
84dd6e21ef | write netbox role and provision it | 6 years ago |
|
8756ac2d02 | start preparing for unifi nginx configuration | 6 years ago |
|
8cf4736dde | provisioning: acl package in base provision | 6 years ago |
|
8c3de10802 | get rid of secrets file | 6 years ago |
|
91671d0246 | README: point to vault file | 6 years ago |
@ -0,0 +1,22 @@ | |||||
netbox_pg_password: !vault | | |||||
$ANSIBLE_VAULT;1.1;AES256 | |||||
66303538363739656566343635613761653931306635346435383264633230313966323464326239 | |||||
3661376639383866633930393065333336353136663233320a323639363164633833303631333931 | |||||
64356634616563343837393965656331393832366237306139656436666637653534363661326161 | |||||
3434613835343339380a323032336630353162643361366637616562383137623031386631656462 | |||||
34633866636262336665393961313364656435643736616164346262326230383064 | |||||
netbox_secret_key: !vault | | |||||
$ANSIBLE_VAULT;1.1;AES256 | |||||
35346664643362336338323039326535343866333864313739366237653438323736376537633562 | |||||
3131373533343330663461333832633330373034616563320a383739313535663331306666666462 | |||||
63363239623933326163346537616665313665373765363464633238636262356635616230396362 | |||||
3563633139333336630a613736363730373761353366613531663532396666623862623262353265 | |||||
61313463623430626163383166626466393561636239333762666231343332396439 | |||||
netbox_host: netbox.lab.uncomfortably.online | |||||
netbox_superuser_email: erin@hecke.rs | |||||
netbox_superuser_username: erin | |||||
netbox_superuser_password: "{{ lookup('passwordstore', 'infra/{{netbox_superuser_username}}@netbox' + ' create=true length=20') | |||||
| password_hash('sha512', 65534 | random(seed=inventory_hostname) | string) }}" | |||||
unifi_host: unifi.lab.uncomfortably.online |
@ -1,4 +1,6 @@ | |||||
- hosts: aux.lab.uncomfortably.online | - hosts: aux.lab.uncomfortably.online | ||||
tasks: | tasks: | ||||
- include_role: | |||||
name: unifi | |||||
- import_role: | |||||
name: unifi | |||||
- import_role: | |||||
name: netbox |
@ -0,0 +1,4 @@ | |||||
netbox_db: netbox | |||||
netbox_pg_username: netbox | |||||
netbox_release: '2.6.1' | |||||
netbox_user: netbox |
@ -0,0 +1,165 @@ | |||||
- name: install postgres | |||||
apt: | |||||
package: [postgresql, libpq-dev, python-psycopg2] | |||||
state: present | |||||
become: yes | |||||
- name: create netbox database | |||||
postgresql_db: | |||||
name: "{{netbox_db}}" | |||||
state: present | |||||
become: yes | |||||
become_user: postgres | |||||
- name: create netbox postgres user | |||||
postgresql_user: | |||||
db: "{{netbox_db}}" | |||||
name: "{{netbox_pg_username}}" | |||||
password: "{{netbox_pg_password}}" | |||||
become: yes | |||||
become_user: postgres | |||||
- name: install dependencies | |||||
apt: | |||||
package: [python3, python3-setuptools, python-setuptools, python3-dev, build-essential, libxml2-dev, libxslt1-dev, | |||||
libffi-dev, graphviz, libpq-dev, libssl-dev, redis-server, zlib1g-dev, libopenjp2-7, supervisor, nginx] | |||||
state: present | |||||
become: yes | |||||
- name: remove system pip | |||||
apt: | |||||
package: python3-pip | |||||
state: absent | |||||
become: yes | |||||
- name: install pip via get-pip.py | |||||
shell: curl https://bootstrap.pypa.io/get-pip.py | python3 - | |||||
become: yes | |||||
- name: grab the netbox release | |||||
unarchive: | |||||
src: https://github.com/digitalocean/netbox/archive/v{{netbox_release}}.tar.gz | |||||
remote_src: yes | |||||
dest: /opt | |||||
owner: root | |||||
group: root | |||||
mode: u=rwX,g=rX,o=rX | |||||
become: yes | |||||
- name: alias it to /opt/netbox | |||||
file: | |||||
src: /opt/netbox-{{netbox_release}} | |||||
dest: /opt/netbox | |||||
state: link | |||||
become: yes | |||||
- name: create netbox user | |||||
user: | |||||
name: "{{netbox_user}}" | |||||
state: present | |||||
become: yes | |||||
- name: chown netbox/media to netbox user | |||||
file: | |||||
path: /opt/netbox/netbox/media | |||||
recurse: yes | |||||
owner: "{{netbox_user}}" | |||||
group: "{{netbox_user}}" | |||||
become: yes | |||||
- name: install dependencies via pip | |||||
pip: | |||||
requirements: /opt/netbox/requirements.txt | |||||
executable: pip3 | |||||
become: yes | |||||
- name: install napalm, Pillow, gunicorn | |||||
pip: | |||||
name: [napalm, Pillow, gunicorn] | |||||
state: present | |||||
executable: pip3 | |||||
become: yes | |||||
- name: template netbox config | |||||
template: | |||||
src: netbox/configuration.py | |||||
dest: /opt/netbox/netbox/netbox/configuration.py | |||||
owner: "{{netbox_user}}" | |||||
group: "{{netbox_user}}" | |||||
become: yes | |||||
- name: run migrations | |||||
shell: python3 manage.py migrate | |||||
args: | |||||
chdir: /opt/netbox/netbox/ | |||||
become: yes | |||||
become_user: "{{netbox_user}}" | |||||
- name: create netbox superuser | |||||
shell: > | |||||
echo "from django.contrib.auth import get_user_model; User = get_user_model(); User.objects.create_superuser('{{netbox_superuser_username}}', '{{netbox_superuser_email}}', '{{netbox_superuser_password}}')" \ | |||||
| python3 manage.py shell | |||||
args: | |||||
chdir: /opt/netbox/netbox/ | |||||
become: yes | |||||
become_user: "{{netbox_user}}" | |||||
- name: collect static files | |||||
shell: python3 manage.py collectstatic --no-input | |||||
args: | |||||
chdir: /opt/netbox/netbox/ | |||||
become: yes | |||||
- name: load seed data | |||||
shell: python3 manage.py loaddata initial_data | |||||
args: | |||||
chdir: /opt/netbox/netbox/ | |||||
become: yes | |||||
- name: template nginx config | |||||
template: | |||||
src: nginx/netbox.conf | |||||
dest: /etc/nginx/sites-available/netbox | |||||
owner: root | |||||
group: root | |||||
mode: 0644 | |||||
become: yes | |||||
- name: link nginx config | |||||
file: | |||||
src: /etc/nginx/sites-available/netbox | |||||
dest: /etc/nginx/sites-enabled/netbox | |||||
state: link | |||||
owner: root | |||||
group: root | |||||
mode: 0644 | |||||
become: yes | |||||
- name: install gunicorn config | |||||
template: | |||||
src: netbox/gunicorn_config.py | |||||
dest: /opt/netbox/gunicorn_config.py | |||||
owner: "{{netbox_user}}" | |||||
group: "{{netbox_user}}" | |||||
become: yes | |||||
- name: install gunicorn supervisord config | |||||
template: | |||||
src: supervisor/netbox.conf | |||||
dest: /etc/supervisor/conf.d/netbox.conf | |||||
owner: root | |||||
group: root | |||||
mode: 0644 | |||||
become: yes | |||||
- name: restart supervisord | |||||
service: | |||||
name: supervisor | |||||
state: restarted | |||||
become: yes | |||||
- name: restart nginx | |||||
service: | |||||
name: nginx | |||||
state: restarted | |||||
become: yes |
@ -0,0 +1,24 @@ | |||||
ALLOWED_HOSTS = ['{{netbox_host}}'] | |||||
DATABASE = { | |||||
'NAME': '{{netbox_db}}', # Database name | |||||
'USER': '{{netbox_pg_username}}', # PostgreSQL username | |||||
'PASSWORD': '{{netbox_pg_password}}', # PostgreSQL password | |||||
'HOST': 'localhost', # Database server | |||||
'PORT': '', # Database port (leave blank for default) | |||||
} | |||||
SECRET_KEY = '{{netbox_secret_key}}' | |||||
# Redis database settings. The Redis database is used for caching and background processing such as webhooks | |||||
REDIS = { | |||||
'HOST': 'localhost', | |||||
'PORT': 6379, | |||||
'PASSWORD': '', | |||||
'DATABASE': 0, | |||||
'CACHE_DATABASE': 1, | |||||
'DEFAULT_TIMEOUT': 300, | |||||
'SSL': False, | |||||
} | |||||
WEBHOOKS_ENABLED = True |
@ -0,0 +1,5 @@ | |||||
command = '/usr/bin/gunicorn' | |||||
pythonpath = '/opt/netbox/netbox' | |||||
bind = '127.0.0.1:8001' | |||||
workers = 3 | |||||
user = '{{netbox_user}}' |
@ -0,0 +1,19 @@ | |||||
server { | |||||
listen 80; | |||||
server_name {{netbox_host}}; | |||||
client_max_body_size 25m; | |||||
location /static/ { | |||||
alias /opt/netbox/netbox/static/; | |||||
} | |||||
location / { | |||||
proxy_pass http://127.0.0.1:8001; | |||||
proxy_set_header X-Forwarded-Host $server_name; | |||||
proxy_set_header X-Real-IP $remote_addr; | |||||
proxy_set_header X-Forwarded-Proto $scheme; | |||||
add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"'; | |||||
} | |||||
} |
@ -0,0 +1,9 @@ | |||||
[program:netbox] | |||||
command = gunicorn -c /opt/netbox/gunicorn_config.py netbox.wsgi | |||||
directory = /opt/netbox/netbox/ | |||||
user = {{netbox_user}} | |||||
[program:netbox-rqworker] | |||||
command = python3 /opt/netbox/netbox/manage.py rqworker | |||||
directory = /opt/netbox/netbox/ | |||||
user = {{netbox_user}} |
@ -1,6 +0,0 @@ | |||||
$ANSIBLE_VAULT;1.1;AES256 | |||||
36373864353634383162353562633637656532336132313664303736356664333166316363636132 | |||||
3735623235646562373830336265646334316237383539630a373037653463393138663865616364 | |||||
64666636336131626337646462636363613036366265646163373231633332663764633864653137 | |||||
6537663231356235630a306461396237376466633039323434343366633139356264323862323938 | |||||
65643437613533333366313831646231623335643832663836313164663032663432 |