Comment un Ansible playbook register
dans une variable le résultat de incluant un autre playbook?
Par exemple, les éléments suivants enregistreraient-ils le résultat de l'exécution de tasks/foo.yml
dans result_of_foo
?
tasks:
- include: tasks/foo.yml
- register: result_of_foo
Sinon, comment Ansible peut-il enregistrer le résultat d'une séquence de tâches?
La réponse courte est que cela ne peut pas être fait.
L'instruction register est utilisée pour stocker la sortie d'une seule tâche dans une variable. Le contenu exact de la variable enregistrée peut varier considérablement selon le type de tâche (par exemple, une tâche Shell
inclura la sortie stdout & stderr de la commande que vous exécutez dans la variable enregistrée, tandis que la stat
task fournira des détails sur le fichier transmis à la tâche).
Si vous avez un fichier include contenant un nombre arbitraire de tâches, Ansible n'a aucun moyen de savoir quoi stocker dans la variable de votre exemple.
Chaque tâche individuelle dans votre fichier include peut enregistrer des variables, et vous pouvez référencer ces variables ailleurs, il n'est donc vraiment pas nécessaire de faire quelque chose comme ça.
J'ai pu le faire en passant un nom de variable en tant que variable à utiliser dans la tâche. J'ai inclus mon main.yaml et inclus les fichiers cgw.yaml ci-dessous.
main.yaml:
- name: Create App A CGW
include: cgw.yaml
vars:
bgp_asn: "{{ asn_spoke }}"
ip_address: "{{ eip_app_a.public_ip }}"
name: cgw-app-a
region: "{{ aws_region }}"
aws_access_key: "{{ ec2_access_key }}"
aws_secret_key: "{{ ec2_secret_key }}"
register: cgw_app_a
cgw.yaml:
- name: "{{ name }}"
ec2_customer_gateway:
bgp_asn: "{{ bgp_asn }}"
ip_address: "{{ ip_address }}"
name: "{{ name }}"
region: "{{ region }}"
aws_access_key: "{{ aws_access_key }}"
aws_secret_key: "{{ aws_secret_key }}"
register: "{{ register }}"