Tools/Ansible/Filtres et adresses réseau : Différence entre versions
(Page créée avec « {{MediaWiki}} Utilisation d'Ansible - '''Utilisation des adresses réseau à l'aide de filtres''' = Collecte et traitement d'informations sur le réseau = Un certain no… ») |
|||
(Une révision intermédiaire par le même utilisateur non affichée) | |||
Ligne 25 : | Ligne 25 : | ||
Voici d'autres faits très utiles également : | Voici d'autres faits très utiles également : | ||
+ | |||
+ | |||
+ | {| class="wikitable" | ||
+ | !colspan="2"|''facts'' de mise en réseau | ||
+ | |- | ||
+ | ! class="wikitable" | Nom du fact | ||
+ | ! Description | ||
+ | |- | ||
+ | |{{CODE|ansible_facts['dns']['nameservers']}} | ||
+ | |Serveurs de noms DNS utilisés pour la résolution de noms par l'hôte géré. | ||
+ | |- | ||
+ | |{{CODE|ansible_facts['domain']}} | ||
+ | |Inclut le sous-domaine de l'hôte géré. | ||
+ | |- | ||
+ | |{{CODE|ansible_facts['all_ipv4_addresses']}} | ||
+ | |Toutes les adresses IPv4 configurées sur l'hôte géré. | ||
+ | |- | ||
+ | |{{CODE|ansible_facts['all_ipv6_addresses']}} | ||
+ | |Toutes les adresses IPv6 configurées sur l'hôte géré. | ||
+ | |- | ||
+ | |{{CODE|ansible_facts['fqdn']}} | ||
+ | |Nom de domaine complet (nom DNS) pour l'hôte géré. | ||
+ | |- | ||
+ | |{{CODE|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'' : | ||
+ | |||
+ | <syntaxhighlight lang="yaml"> | ||
+ | --- | ||
+ | - 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. | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | = 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 {{CODE|dig}} pour rechercher des informations DNS, {{CODE|dnstxt}} pour obtenir des enregistrements DNS TXT et des plug-ins plus ésotériques tels que {{CODE|aws_service_ip_ranges}} pour obtenir les plages d'adresses IP des services Amazon AWS EC2 et {{CODE|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 {{CODE|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 {{CODE|dnspython}}, à partir du paquetage '''python3-dns''', qui doit être disponible dans le noeud du contrôleur. | ||
+ | |||
+ | Dans sa forme la plus simple, la recherche {{CODE|dig}} interroge le serveur DNS configuré dans le contrôleur pour obtenir l'enregistrement '''A''' du nom de domaine complet (FQDN) fourni. | ||
+ | |||
+ | {{CODE| "{{ 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. | ||
+ | |||
+ | |||
+ | <syntaxhighlight lang="yaml"> | ||
+ | "{{ lookup('dig', 'example.com', 'qtype=MX') }}" | ||
+ | "{{ lookup('dig', 'example.com/MX') }}" | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | La recherche {{CODE|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 : | ||
+ | |||
+ | <syntaxhighlight lang="yaml"> | ||
+ | "{{ lookup('dig', 'example.com', '@4.4.8.8,4.4.4.4) }}" | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | {{NOTE| | ||
+ | contenu=Certains enregistrements DNS peuvent contenir plusieurs valeurs pour le même type d'enregistrement. Dans ce cas, la recherche {{CODE|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 {{CODE|query}} avec le filtre de recherche. | ||
+ | <syntaxhighlight lang="yaml"> | ||
+ | "{{ query('dig', 'example.com/MX') }}" | ||
+ | </syntaxhighlight> | ||
+ | }} | ||
+ | |||
+ | |||
+ | La recherche {{CODE|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 {{CODE|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. | ||
+ | |||
+ | <syntaxhighlight lang="yaml"> | ||
+ | "{{ lookup('dnstxt', ['test.example.com']) }}" | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Vous pouvez voir un exemple de ces filtres et fonctions : | ||
+ | |||
+ | <syntaxhighlight lang="yaml"> | ||
+ | |||
+ | --- | ||
+ | - 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') }}" | ||
+ | </syntaxhighlight> |
Version actuelle datée du 26 mai 2020 à 08:36
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é.
|
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) }}"
|
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') }}"