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.
- Var avec le nom de fichier
- tâche shell dans
cat
le fichier - utilisez le résultat de
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 existe un moyen beaucoup plus simple de le faire, mais je ne l'ai pas trouvé lors de la recherche de documents Ansible.
ansible
ansible-playbook
TesteurJeff
la source
la source
Réponses:
Vous pouvez utiliser des recherches dans Ansible pour obtenir le contenu d'un fichier, par exemple
Attention: cette recherche fonctionnera avec des fichiers locaux, pas des fichiers distants.
Voici un exemple complet tiré de la documentation :
la source
cat
commande de l'exemple de @ TesterJeff s'exécute sur la machine distante.Vous pouvez utiliser le module slurp: (Merci à @mlissner de l'avoir suggéré)
la source
Vous pouvez utiliser le module fetch pour copier les fichiers des hôtes distants vers les locaux, et le module lookup pour lire le contenu des fichiers récupérés.
la source
la recherche ne fonctionne que sur localhost. Si vous souhaitez récupérer des variables variables que vous un fichier en usaient à distance include_vars:
{{ varfile }}
. Le contenu de{{ varfile }}
devrait être un dictionnaire de la forme{"key":"value"}
, vous trouverez que ansible vous pose problème si vous incluez un espace après les deux points.la source
include_vars
fonctionne localement sur la machine de contrôle, pas avec des fichiers sur la cible.