NetBox é um aplicativo de opensource(licença Apache2) idealizado inicialmente pela equipe de engenharia de rede da DigitalOcean, o NetBox foi desenvolvido especificamente para atender às necessidades dos engenheiros de rede e infraestrutura.
Segundo o site do Netbox, o aplicativo abrange os seguintes aspectos de gerenciamento de rede:
- IP address management (IPAM) – IP networks and addresses, VRFs, and VLANs
- Equipment racks – Organized by group and site
- Devices – Types of devices and where they are installed
- Connections – Network, console, and power connections among devices
- Virtualization – Virtual machines and clusters
- Data circuits – Long-haul communications circuits and providers
- Secrets – Encrypted storage of sensitive credentials
Neste post quero apresentar como instalar via Ansible.
O Netbox tem uma documentação bastante didática pelo site do projeto :
https://netbox.readthedocs.io/en/stable/
- Requisitos
Neste exemplo estarei utilizando uma vm para rodar o Ansible e outra vm para instalar o Netbox pela role do Ansible.
2. Preparação da vm Ansible
Na minha vm que rodará o ansible será instalado o pacote de acordo com o sistema operacional
Para sistemas baseados em RHEL
yum install ansible git
Para sistemas baseados em Ubuntu
apt install ansible git
Estamos instalando o pacote git também, pois iremos fazer clone do repositório no Github.
Crie o diretório /opt/ansible :
mkdir /opt/ansible
Clone o repositório do github :
[root@ansible opt]# cd /opt/ansible
[root@ansible ansible]# git clone https://github.com/fabioabreureis/fajlinux-ansible-roles.git
Cloning into 'fajlinux-ansible-roles'...
remote: Enumerating objects: 203, done.
remote: Counting objects: 100% (97/97), done.
remote: Compressing objects: 100% (59/59), done.
remote: Total 203 (delta 28), reused 76 (delta 15), pack-reused 106
Receiving objects: 100% (203/203), 96.35 KiB | 297.00 KiB/s, done.
Resolving deltas: 100% (43/43), done.
Vamos agora criar o inventário do ansible :
vi /etc/ansible/hosts
...
[postgresql]
host1
[netbox]
host1
Crie o usuário admin do ansible no host netbox
useradd admin
passwd admin
Dê permissões de sudo sem a necessidade de passar a senha para virar root para esse usuário no arquivo /etc/sudoers.d/ansible
admin ALL=(ALL) NOPASSWD: ALL
Vamos fazer ssh para vm netbox que no exemplo é o host1. Precisamos reconhecer a chave ssh do nosso host netbox:
[admin@ansible opt]# ssh host1
The authenticity of host 'host1' can't be established.
The authenticity of host 'host1 (192.168.100.88)' can't be established.
ECDSA key fingerprint is SHA256:wb9lQd1nRfXwIZ7bLVMzRVDGhqCe0yZPWK4Je9bJTq4.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'host1' (ECDSA) to the list of known hosts.
admin@host1 password:
3. Execução dos Playbooks
Dentro do diretório /opt/ansible/fajlinux-ansible-roles vamos primeiro criar o yaml para executar a role que vai instalar o banco de dados postgres :
vi postgresql.yaml
---
- name: Install postgresql
hosts: postgresql
become: true
roles:
- install-postgres
Criar o playbook que vai criar o banco de dados:
vi netbox_db.yaml
---
- name: Manage postgresql
hosts: netbox
become: true
vars:
db_name: netbox
db_password: netbox123
db_user: netbox
tasks:
- name: "Create app database"
postgresql_db:
state: present
name: "{{ db_name }}"
become: yes
become_user: postgres
- name: "Create db user"
postgresql_user:
state: present
name: "{{ db_user }}"
password: "{{ db_password }}"
become: yes
become_user: postgres
- name: "Grant db user access to app db"
postgresql_privs:
type: database
database: "{{ db_name }}"
roles: "{{ db_user }}"
grant_option: no
privs: all
become: yes
become_user: postgres
- name: "Allow md5 connection for the db user"
postgresql_pg_hba:
dest: "~/data/pg_hba.conf"
contype: host
databases: all
method: md5
users: "{{ db_user }}"
create: true
become: yes
become_user: postgres
notify: restart postgres
handlers:
- name: restart postgres
service: name=postgresql state=restarted
Execute os playbooks :
ansible-playbook -u admin -K -k postgresql.yaml
ansible-playbook -u admin -K -k netbox_db.yaml
Na execução estou utilizando a opções :
- -u : Passar o usuário .
- -k: Colocar a senha via prompt .
- -K: Colocar a senha de super user.
Por último vamos criar o playbook netbox.yaml para instalar o netbox:
- name: Install Netbox
hosts: netbox
become: true
vars:
netbox_url: netbox.example.com
netbox_superuser_password: change123
db_name: netbox
db_user: netbox
db_pass: netbox123
db_host: localhost
db_port: 5432
nginx_self_ssl: true
roles:
- install-netbox
Estamos passando como variável a url do netbox, a senha de superuser, a variável nginx_self_ssl que informa que irá gerar um certificado autoassinado e as informações do banco de dados criado.
ansible-playbook -u admin -K -k netbox.yaml
Após a execução deverá estar instalado o netbox, no exemplo abaixo eu acessei a url passada na variável https://netbox.example.com.
