ansible à l'aide de la boucle et de multiples variables
je suis à l'aide de "shell:" pour obtenir certaines données en boucle sur "with_items:" et de l'inscrire comme une autre variable.
Plus tard, à l'aide de "lineinfile:" je suis en train d'appliquer le contenu de la précédente variable,mais ne peuvent pas utiliser les "{{variable.stdout}}" comme c'est montrer que non définis dans "with_items:"
Est-il un moyen de dire ansible que pour "variable.stdout" ne regardez pas dans "with_items:"
---
- include_vars: /root/template.yml
- name: Getting MAC
shell: "cat /sys/class/net/{{item.name}}/address"
register: mac
with_items:
- "{{ interfaces_ipv4 }}"
- name: Setting MAC
lineinfile:
state=present
dest=/etc/sysconfig/network-scripts/ifcfg-{{item.name}}
regexp='^HWADDR=.*'
line="HWADDR={{mac.stdout}}"
with_items:
- "{{ interfaces_ipv4 }}"
tags:
- set_mac
Contenu de la variable fichier
#/root/tempplate.yml
- name: ens35
bootproto: dhcp
- name: ens34
bootproto: none
Lors de l'exécution:
TÂCHE: [mac | Réglage MAC] *****************************************************
fatal: [192.168.211.146] => Une ou plusieurs variables indéfinies: 'dict' objet n'a pas d'attribut 'stdout'
MORTELLE: tous les hôtes ont déjà échoué -- l'abandon de
template
module au lieu de lineinfile
. Ce dernier est un antipattern; il tend vers substantielle de la complexité et de la douleur.OriginalL'auteur Kevin Parker | 2014-11-06
Vous devez vous connecter pour publier un commentaire.
register
fonctionne un peu différemment lorsqu'il est utilisé à l'intérieur des boucles (voir ici). Dans ce cas, votre variable aura unresults
élément, qui est une liste avec le résultat de chaque itération en tant qu'objets. Chaque élément de cette liste ont également unitem
élément avec l'élément creusée.Par exemple:
Vous pouvez ensuite passer en boucle qu'au lieu de la liste d'origine:
OriginalL'auteur hkariti