J’utilise le module ec2 avec ansible-playbook
Je veux définir une variable sur le contenu d’un fichier. Voici comment je le fais actuellement.
cat
le fichier cat
pour passer au module ec2. Exemple de contenu de mon playbook.
vars: amazon_linux_ami: "ami-fb8e9292" user_data_file: "base-ami-userdata.sh" tasks: - name: user_data_contents shell: cat {{ user_data_file }} register: user_data_action - name: launch ec2-instance local_action: ... user_data: "{{ user_data_action.stdout }}"
Je suppose qu’il y a un moyen beaucoup plus facile de le faire, mais je n’ai pas pu le trouver en cherchant des documents d’Ansible.
Vous pouvez utiliser les recherches dans Ansible pour obtenir le contenu d’un fichier, par exemple
user_data: "{{ lookup('file', user_data_file) }}"
Voici un exemple complet de la documentation :
- hosts: all vars: contents: "{{ lookup('file', '/etc/foo.txt') }}" tasks: - debug: msg="the value of foo.txt is {{ contents }}"
Vous pouvez utiliser le module de récupération pour copier des fichiers depuis des hôtes distants vers des fichiers locaux, et pour rechercher le contenu des fichiers récupérés.
la recherche ne fonctionne que sur localhost. Si vous souhaitez récupérer des variables à partir d’un fichier de variables que vous avez créé à distance, utilisez include_vars: {{ varfile }}
. Le contenu de {{ varfile }}
devrait être un dictionnaire de la forme {"key":"value"}
, vous trouverez que ansible vous donne des problèmes si vous incluez un espace après les deux points.