Browse Source

write netbox role and provision it

master
3moon 5 years ago
parent
commit
84dd6e21ef
7 changed files with 230 additions and 2 deletions
  1. +4
    -2
      provision.yml
  2. +4
    -0
      roles/netbox/defaults/main.yml
  3. +165
    -0
      roles/netbox/tasks/main.yml
  4. +24
    -0
      roles/netbox/templates/netbox/configuration.py
  5. +5
    -0
      roles/netbox/templates/netbox/gunicorn_config.py
  6. +19
    -0
      roles/netbox/templates/nginx/netbox.conf
  7. +9
    -0
      roles/netbox/templates/supervisor/netbox.conf

+ 4
- 2
provision.yml View File

@ -1,4 +1,6 @@
- hosts: aux.lab.uncomfortably.online
tasks:
- include_role:
name: unifi
- import_role:
name: unifi
- import_role:
name: netbox

+ 4
- 0
roles/netbox/defaults/main.yml View File

@ -0,0 +1,4 @@
netbox_db: netbox
netbox_pg_username: netbox
netbox_release: '2.6.1'
netbox_user: netbox

+ 165
- 0
roles/netbox/tasks/main.yml View File

@ -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

+ 24
- 0
roles/netbox/templates/netbox/configuration.py View File

@ -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

+ 5
- 0
roles/netbox/templates/netbox/gunicorn_config.py View File

@ -0,0 +1,5 @@
command = '/usr/bin/gunicorn'
pythonpath = '/opt/netbox/netbox'
bind = '127.0.0.1:8001'
workers = 3
user = '{{netbox_user}}'

+ 19
- 0
roles/netbox/templates/nginx/netbox.conf View File

@ -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"';
}
}

+ 9
- 0
roles/netbox/templates/supervisor/netbox.conf View File

@ -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}}

Loading…
Cancel
Save