Tools/Ansible/Filtres et adresses réseau

De MonPtitSite
Sauter à la navigation Sauter à la recherche
Accueil SysAdmin Hobbies                  

Utilisation d'Ansible - Utilisation des adresses réseau à l'aide de filtres

Collecte et traitement d'informations sur le réseau

Un certain nombre de filtres et de plug-ins de recherche sont disponibles pour collecter et traiter les informations réseau pour l'automatisation Ansible. Ces filtres et plug-ins peuvent être utiles en association avec la collecte de faits lorsque vous configurez les périphériques réseau sur vos hôtes gérés. Le module setup standard qui collecte automatiquement les facts au début de nombreux playbooks collecte de nombreuses informations sur le réseau de chaque hôte géré.


NOTE
Si vous avez uniquement besoin de factsliés au réseau, vous pouvez exécuter le programme d'installation en tant que tâche explicite et utiliser l'option gather_subset pour limiter la collecte à ces facts.
- name: Collect only network related facts
  setup:
  gather_subset:
    - '!all'
    - network

Il existe un certain nombre de facts particulièrement utiles. Le fact ansible_facts['interfaces'] est une liste de tous les noms d'interfaces réseau sur le système. Vous pouvez utiliser cette liste pour examiner les facts relatifs à chacune des interfaces réseau du système. Par exemple, si enp11s0 est une interface sur le système, il y a un fait nommé ansible_facts['enp11s0'] qui est un dictionnaire contenant son adresse MAC, des adresses IPv4 et IPv6, un module du noyau, etc. en tant que valeurs.

Voici d'autres faits très utiles également :


facts de mise en réseau
Nom du fact Description
ansible_facts['dns']['nameservers'] Serveurs de noms DNS utilisés pour la résolution de noms par l'hôte géré.
ansible_facts['domain'] Inclut le sous-domaine de l'hôte géré.
ansible_facts['all_ipv4_addresses'] Toutes les adresses IPv4 configurées sur l'hôte géré.
ansible_facts['all_ipv6_addresses'] Toutes les adresses IPv6 configurées sur l'hôte géré.
ansible_facts['fqdn'] Nom de domaine complet (nom DNS) pour l'hôte géré.
ansible_facts['hostname'] Nom d'hôte non qualifié et chaîne dans le nom de domaine complet avant le premier point.


Exemple de playbook utilisant ces facts :

---
- name: Set up web servers
  hosts: web_servers
  become: true
  tasks:
    - name: Ensure httpd is installed
      yum:
        name: httpd
        state: installed
    - name: Start and enable webserver
      service:
        name: httpd
        state: started
        enabled: yes
    - name: Notify root of server provisioning
      mail:
        subject: System {{ ansible_facts['hostname'] }} has been successfully  provisioned.


Collecte d'informations sur le réseau à l'aide de pluggins

Un certain nombre de plug-ins de recherche peuvent vous servir à collecter des informations sur l'environnement réseau. On peut citer notamment dig pour rechercher des informations DNS, dnstxt pour obtenir des enregistrements DNS TXT et des plug-ins plus ésotériques tels que aws_service_ip_ranges pour obtenir les plages d'adresses IP des services Amazon AWS EC2 et nios_next_ip afin d'obtenir l'adresse IP disponible suivante pour un réseau à partir d'Infoblox.

Recherche d'informations DNS

Comme son nom l'indique, le plug-in de recherche dig est une interface pour la commande dig.

La commande dig exécute des requêtes auprès des serveurs DNS et renvoie les enregistrements obtenus. Cette consultation fait appel à la bibliothèque python dnspython, à partir du paquetage python3-dns, qui doit être disponible dans le noeud du contrôleur.

Dans sa forme la plus simple, la recherche dig interroge le serveur DNS configuré dans le contrôleur pour obtenir l'enregistrement A du nom de domaine complet (FQDN) fourni.

"Modèle:Lookup('dig', 'example.com')"

Pour obtenir un autre type d'enregistrement, indiquez un paramètre qtype supplémentaire à la recherche ou ajoutez une barre oblique (/) et le type d'enregistrement au nom de domaine complet. Les exemples suivants obtiennent le même enregistrement MX du domaine example.com.


"{{ lookup('dig', 'example.com', 'qtype=MX') }}" 
"{{ lookup('dig', 'example.com/MX') }}"

La recherche dig permet d'utiliser des serveurs DNS différents de ceux configurés dans le contrôleur. Indiquez un paramètre supplémentaire avec une liste de serveurs DNS séparés par des virgules à utiliser, préfixée par le signe @ comme suit :

"{{ lookup('dig', 'example.com', '@4.4.8.8,4.4.4.4) }}"


NOTE
Certains enregistrements DNS peuvent contenir plusieurs valeurs pour le même type d'enregistrement. Dans ce cas, la recherche dig renvoie une seule valeur, contenant une liste séparée par des virgules des valeurs renvoyées. Pour obtenir une liste de valeurs, utilisez query avec le filtre de recherche.
"{{ query('dig', 'example.com/MX') }}"


La recherche dig peut fournir des enregistrements de texte DNS (qtype=TXT), comme n'importe quel autre type. Dans le cas où seuls les enregistrements TXT sont nécessaires, la recherche dnstxt peut remplacer la recherche dig. La recherche dnstxt fournit un format beaucoup plus simple et dépend de la bibliothèque Python dns/dns.resolver du paquetage RPM python3-dns dans Red Hat Enterprise Linux 8.

"{{ lookup('dnstxt', ['test.example.com']) }}"

Vous pouvez voir un exemple de ces filtres et fonctions :

---
- name: ipaddr example
  hosts: lb_servers
    tasks:
      - name: Determinte if host's ip address is private
        debug:
           msg: "{{ lookup('dig', ansible_facts['hostname'] ) | ipaddr('private') }}"