Netbox: Instalação por Ansible

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/

  1. 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.

Translate »