Introducció

L'inventari dinàmic en Ansible permet gestionar hosts i grups de manera més flexible i automatitzada, especialment útil en entorns dinàmics com els entorns cloud, on els recursos poden canviar freqüentment. A diferència dels fitxers d'inventari estàtics, els inventaris dinàmics es generen en temps real mitjançant scripts o connectors que recuperen informació dels sistemes de gestió de recursos.

Conceptes Clau

  • Inventari Estàtic: Un fitxer d'inventari estàtic és un fitxer de text que conté una llista de hosts i grups.
  • Inventari Dinàmic: Un inventari dinàmic es genera en temps real mitjançant un script o connector que recupera informació dels sistemes de gestió de recursos.
  • Scripts d'Inventari Dinàmic: Scripts que es poden escriure en qualsevol llenguatge de programació i que retornen informació en format JSON.
  • Connectors d'Inventari Dinàmic: Connectors predefinits que Ansible proporciona per integrar-se amb serveis com AWS, GCP, Azure, etc.

Avantatges de l'Inventari Dinàmic

  • Actualització Automàtica: Els inventaris dinàmics es generen en temps real, assegurant que sempre es treballa amb la informació més actualitzada.
  • Escalabilitat: Facilita la gestió de grans quantitats de recursos que poden canviar freqüentment.
  • Integració: Permet integrar-se fàcilment amb serveis de cloud i altres sistemes de gestió de recursos.

Configuració d'un Inventari Dinàmic

  1. Utilitzant un Script d'Inventari Dinàmic

Exemple de Script d'Inventari Dinàmic

A continuació es mostra un exemple d'un script d'inventari dinàmic en Python que retorna informació en format JSON:

#!/usr/bin/env python

import json

def get_inventory():
    inventory = {
        "all": {
            "hosts": ["host1.example.com", "host2.example.com"],
            "vars": {
                "ansible_user": "admin"
            }
        },
        "_meta": {
            "hostvars": {
                "host1.example.com": {
                    "ansible_host": "192.168.1.1"
                },
                "host2.example.com": {
                    "ansible_host": "192.168.1.2"
                }
            }
        }
    }
    return inventory

if __name__ == "__main__":
    print(json.dumps(get_inventory()))

Passos per Utilitzar l'Script

  1. Crear l'Script: Guarda l'script anterior en un fitxer, per exemple dynamic_inventory.py.
  2. Fer Executable l'Script: Assegura't que l'script tingui permisos d'execució.
    chmod +x dynamic_inventory.py
    
  3. Executar l'Script: Prova l'script per assegurar-te que retorna la informació correcta.
    ./dynamic_inventory.py
    

  1. Utilitzant Connectors d'Inventari Dinàmic

Ansible proporciona connectors per a diversos serveis de cloud. A continuació es mostra un exemple d'ús del connector per AWS.

Configuració del Connector AWS

  1. Instal·lar les Dependències:

    pip install boto boto3
    
  2. Configurar el Fitxer d'Inventari: Crea un fitxer aws_ec2.yml amb el següent contingut:

    plugin: aws_ec2
    regions:
      - us-east-1
    filters:
      instance-state-name: running
    keyed_groups:
      - key: tags.Name
        prefix: 'tag_'
    
  3. Executar Ansible amb el Connector:

    ansible-inventory -i aws_ec2.yml --graph
    

Exercici Pràctic

Objectiu

Crear un script d'inventari dinàmic que llisti els hosts d'una xarxa local i utilitzar-lo en un playbook d'Ansible.

Passos

  1. Crear l'Script d'Inventari Dinàmic:

    # dynamic_inventory.py
    import json
    
    def get_inventory():
        inventory = {
            "all": {
                "hosts": ["host1.local", "host2.local"],
                "vars": {
                    "ansible_user": "user"
                }
            },
            "_meta": {
                "hostvars": {
                    "host1.local": {
                        "ansible_host": "192.168.0.101"
                    },
                    "host2.local": {
                        "ansible_host": "192.168.0.102"
                    }
                }
            }
        }
        return inventory
    
    if __name__ == "__main__":
        print(json.dumps(get_inventory()))
    
  2. Fer Executable l'Script:

    chmod +x dynamic_inventory.py
    
  3. Crear un Playbook d'Ansible:

    # playbook.yml
    - name: Test Dynamic Inventory
      hosts: all
      tasks:
        - name: Ping hosts
          ping:
    
  4. Executar el Playbook amb l'Inventari Dinàmic:

    ansible-playbook -i dynamic_inventory.py playbook.yml
    

Solució

L'script d'inventari dinàmic i el playbook haurien de funcionar correctament, retornant un ping exitós per als hosts especificats.

Conclusió

L'inventari dinàmic en Ansible és una eina poderosa per gestionar entorns dinàmics i escalables. Mitjançant scripts personalitzats o connectors predefinits, es pot assegurar que sempre es treballa amb la informació més actualitzada dels recursos disponibles. Aquesta flexibilitat és especialment útil en entorns cloud i altres sistemes de gestió de recursos dinàmics.

© Copyright 2024. Tots els drets reservats