152 lines
4.2 KiB
YAML
152 lines
4.2 KiB
YAML
---
|
|
- name: "Ensure /etc/ansible/facts.d directory is present"
|
|
ansible.builtin.file:
|
|
path: "{{ item }}"
|
|
state: directory
|
|
loop:
|
|
- /etc/ansible
|
|
- /etc/ansible/facts.d
|
|
|
|
- name: "Gather facts from remote host"
|
|
ansible.builtin.setup:
|
|
filter: ansible_local
|
|
|
|
- name: "Set netbox_install to True if no remote installation was detected"
|
|
ansible.builtin.set_fact:
|
|
netbox_install: true
|
|
netbox_present: true
|
|
when: "ansible_local is not defined or 'witine' is not in ansible_local or 'netbox' is not in ansible_local['witine'] or 'installed_version' is not in ansible_local['witine']['netbox']"
|
|
|
|
- name: "Set netbox_install to True if a newer version is available"
|
|
ansible.builtin.set_fact:
|
|
netbox_install: true
|
|
when:
|
|
- not netbox_install
|
|
- "netbox_install_target.version is version(ansible_local['witine']['netbox']['installed_version'], '>')"
|
|
|
|
- name: "Ensure that Netbox install target has URL and version information"
|
|
ansible.builtin.assert:
|
|
that:
|
|
- "'url' in netbox_install_target"
|
|
- "'version' in netbox_install_target"
|
|
when: netbox_install
|
|
|
|
- name: "Download and extract Netbox release"
|
|
ansible.builtin.unarchive:
|
|
src: "{{ netbox_install_target.url }}"
|
|
dest: "/opt"
|
|
remote_src: true
|
|
when: netbox_install
|
|
notify:
|
|
- "Restart netbox service"
|
|
- "Restart netbox-rq service"
|
|
|
|
- name: "Create symbolic link"
|
|
ansible.builtin.file:
|
|
src: "/opt/netbox-{{ netbox_install_target.version }}"
|
|
dest: /opt/netbox
|
|
state: link
|
|
when: netbox_install
|
|
|
|
- name: "Delete old Netbox installation"
|
|
ansible.builtin.file:
|
|
path: "/opt/netbox-{{ ansible_local['witine']['netbox']['installed_version'] }}"
|
|
state: absent
|
|
when:
|
|
- netbox_install
|
|
- ansible_local['witine']['netbox']['installed_version'] is defined
|
|
|
|
- name: "Create {{ netbox_group }} group"
|
|
ansible.builtin.group:
|
|
name: "{{ netbox_group }}"
|
|
gid: "{{ netbox_group_gid }}"
|
|
system: true
|
|
state: present
|
|
|
|
- name: "Create {{ netbox_user }} user"
|
|
ansible.builtin.user:
|
|
name: "{{ netbox_user }}"
|
|
uid: "{{ netbox_user_uid }}"
|
|
group: "{{ netbox_group }}"
|
|
comment: "Netbox user"
|
|
system: true
|
|
state: present
|
|
|
|
- name: "Configure Netbox directories to be owned by {{ netbox_user }}"
|
|
ansible.builtin.file:
|
|
path: "{{ item }}"
|
|
owner: "{{ netbox_user }}"
|
|
group: "{{ netbox_group }}"
|
|
recurse: true
|
|
mode: '755'
|
|
state: directory
|
|
loop:
|
|
- /opt/netbox/netbox/media
|
|
- /opt/netbox/netbox/reports
|
|
- /opt/netbox/netbox/scripts
|
|
|
|
- name: "Validate Netbox secret meets requirements"
|
|
ansible.builtin.assert:
|
|
that:
|
|
- netbox_secret_key is defined
|
|
- netbox_secret_key|length >= 50
|
|
|
|
- name: "Configure Netbox configuration"
|
|
ansible.builtin.template:
|
|
src: configuration.py.j2
|
|
dest: /opt/netbox/netbox/netbox/configuration.py
|
|
owner: "{{ netbox_user }}"
|
|
group: "{{ netbox_group }}"
|
|
mode: '640'
|
|
register: netbox_config
|
|
notify:
|
|
- "Restart netbox service"
|
|
- "Restart netbox-rq service"
|
|
|
|
- name: "Run Netbox installation/upgrade script"
|
|
ansible.builtin.shell:
|
|
cmd: /opt/netbox/upgrade.sh
|
|
when: netbox_install or netbox_config.changed
|
|
notify:
|
|
- "Restart netbox service"
|
|
- "Restart netbox-rq service"
|
|
|
|
- name: "Record installed Netbox version"
|
|
community.general.ini_file:
|
|
path: /etc/ansible/facts.d/witine.fact
|
|
section: netbox
|
|
option: installed_version
|
|
value: "{{ netbox_install_target.version }}"
|
|
mode: 0644
|
|
backup: false
|
|
when: netbox_install
|
|
|
|
- name: "Create /opt/netbox/gunicorn.py file"
|
|
ansible.builtin.template:
|
|
src: gunicorn.py.j2
|
|
dest: /opt/netbox/gunicorn.py
|
|
owner: "{{ netbox_user }}"
|
|
group: "{{ netbox_group }}"
|
|
mode: '755'
|
|
notify:
|
|
- "Restart netbox service"
|
|
|
|
- name: "Create systemd files"
|
|
ansible.builtin.template:
|
|
src: "{{ item }}.j2"
|
|
dest: "/etc/systemd/system/{{ item }}"
|
|
loop:
|
|
- netbox.service
|
|
- netbox-rq.service
|
|
- netbox-housekeeping.service
|
|
- netbox-housekeeping.timer
|
|
|
|
- name: "Start systemd services"
|
|
ansible.builtin.systemd_service:
|
|
name: "{{ item }}"
|
|
enabled: true
|
|
state: started
|
|
loop:
|
|
- netbox.service
|
|
- netbox-rq.service
|
|
- netbox-housekeeping.timer
|