Inventario di Ansible

Andrea Dainese
30 Settembre 2023
Post cover

In questo articolo vediamo le due modalità per definire un inventario usabile da Ansible. L’inventario è la source of truth contenente le informazioni che Ansible userà per collegarsi ai dispositivi. L’inventario permette anche di definire variabili a livello di host o gruppo. In particolare le variabili possono essere usate, in scenari avanzati, per definire tutti i parametri dell’infrastruttura, ad esempio: interfacce, indirizzi IP, router ID…

Ansible supporta inventari di tipo statico e dinamico. L’inventario statico è definito da un file in formato INI o YAML, mentre l’inventario dinamico è un eseguibile che stampa un JSON in standard output.

Inventario statico in formato INI

L’inventario statico in formato INI segue il seguente formato:

[all]
r1.example.com ansible_host=169.254.1.21

[routers]
r[1:9].example.com

[routers:vars]
ansible_user=admin
ansible_ssh_pass=cisco
ansible_connection=ansible.netcommon.network_cli
ansible_network_os=cisco.ios.ios

Inventario statico in formato YAML

L’inventario statico in formato YAML segue il seguente formato:

all:
  hosts:
    r1.example.com:
      ansible_host: 169.254.1.21
routers:
  hosts:
    r[1:9].example.com:
  vars:
    ansible_user: admin
    ansible_ssh_pass: cisco
    ansible_connection: ansible.netcommon.network_cli
    ansible_network_os: cisco.ios.ios

Inventario dinamico in formato JSON

Come descritto prima, l’inventario dinamico deve utilizzare il formato JSON secondo il seguente formato:

{
  "_meta": {
    "hostvars": {
     "r1.example.com": {
        "ansible_host": "169.254.1.21"
      }
    }
  },
  "routers": {
    "hosts": [
      "r1.example.com"
    ],
    "vars": {
      "ansible_connection": "ansible.netcommon.network_cli",
      "ansible_network_os": "cisco.ios.ios",
      "ansible_ssh_pass": "cisco",
      "ansible_user": "admin"
    }
  }
}