Comment puis-je passer une variable à Ansible playbook dans la ligne de commande?
Je suis nouveau sur ansible et je me demande comment le faire car ce qui suit n'a pas fonctionné
ansible-playbook -i '10.0.0.1,' yada-yada.yml --tags 'loaddata' django_fixtures="tile_colors"
Où django_fixtures
est ma variable.
6 réponses
En lisant les documents, je trouve la section passant des Variables sur la ligne de commande , qui donnent cet exemple:
ansible-playbook release.yml --extra-vars "version=1.23.45 other_variable=foo"
D'autres exemples montrent comment charger à partir de JSON chaîne (≥1.2
) ou fichier (≥1.3
)
D'autres réponses indiquent comment passer les variables de ligne de commande mais pas comment y accéder, donc si vous le faites:
--extra-vars "version=1.23.45 other_variable=foo"
Dans votre fichier yml, vous les affectez à des variables ansibles étendues en faisant quelque chose comme:
vars:
my_version: "{{ version }}"
my_other_variable: {{ other_variable }}
Une alternative à l'utilisation d'args de ligne de commande est d'utiliser des variables d'environnement qui sont déjà définies dans votre session, vous pouvez les référencer dans vos fichiers YML Ansible comme ceci:
vars:
my_version: "{{ lookup('env', 'version') }}"
my_other_variable: {{ lookup('env', 'other_variable') }}
ansible-playbook release.yml -e "version=1.23.45 other_variable=foo"
Pour une raison quelconque, aucune Des Réponses ci-dessus n'a fonctionné pour moi. Comme j'ai besoin de passer plusieurs vars supplémentaires à mon playbook dans Ansbile 2.2.0, voici comment je l'ai fait fonctionner (notez l'option-e avant chaque var):
ansible-playbook site.yaml -i hostinv -e firstvar=false -e second_var=value2
ansible-playbook test.yml --extra-vars "arg1=${var1} arg2=${var2}"
Dans le fichier yml, vous pouvez les utiliser comme ceci
---
arg1: "{{ var1 }}"
arg2: "{{ var2 }}"
Aussi, --extra-vars
et -e
sont les mêmes, vous pouvez utiliser l'un d'eux.