web-dev-qa-db-fra.com

Comment puis-je passer variable à ansible playbook en ligne de commande?

Je suis novice en ansible et je me demande comment 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"

Django_fixtures est ma variable.

143
Édouard Lopez

En lisant la documentation, je trouve la section Passing Variables On The Command Line , qui donne cet exemple: 

ansible-playbook release.yml --extra-vars "version=1.23.45 other_variable=foo"

D'autres exemples montrent comment charger depuis JSON chaîne (≥1.2) ou fichier (≥1.3)

222
Édouard Lopez

D'autres réponses indiquent comment passer les variables de ligne de commande mais pas comment y accéder. Par conséquent, si vous le faites:

--extra-vars "version=1.23.45 other_variable=foo"

Dans votre fichier yml, vous affectez celles-ci à des variables anibles étendues en procédant comme suit:

vars:
    my_version: "{{ version }}"
    my_other_variable: {{ other_variable }}

Une alternative à l'utilisation des arguments de ligne de commande consiste à utiliser les variables d'environnement déjà définies dans votre session. Vous pouvez les référencer dans vos fichiers ansible yml comme suit:

vars:
    my_version: "{{ lookup('env', 'version') }}"
    my_other_variable: {{ lookup('env', 'other_variable') }}
111
GreensterRox
ansible-playbook release.yml -e "version=1.23.45 other_variable=foo"
33
lanni654321

Vous pouvez utiliser l'option --extra-vars. Voir la documentation

27
jarv

Pour une raison quelconque, aucune des réponses ci-dessus n'a fonctionné pour moi. Comme je dois passer plusieurs vars supplémentaires à mon livre de jeu dans Ansbile 2.2.0, voici comment je l'ai fait (notez l'option -e avant chaque var):

ansible-playbook site.yaml -i hostinv -e firstvar=false -e second_var=value2
22
OpenITeX
ansible-playbook test.yml --extra-vars "arg1=${var1} arg2=${var2}"

Dans le fichier yml, vous pouvez les utiliser comme ceci

---
arg1: "{{ var1 }}"
arg2: "{{ var2 }}"

De plus, --extra-vars et -e sont identiques, vous pouvez en utiliser un.

8
Ali Atakan

Cela a également fonctionné pour moi si vous souhaitez utiliser les variables d'environnement Shell:

ansible-playbook -i "localhost," ldap.yaml --extra-vars="LDAP_Host={{ lookup('env', 'LDAP_Host') }} clustername=mycluster env=dev LDAP_USERNAME={{ lookup('env', 'LDAP_USERNAME') }} LDAP_PASSWORD={{ lookup('env', 'LDAP_PASSWORD') }}"

0
user164328

ansible-playbok -i <inventory> <playbook-name> -e "proc_name=sshd"

Vous pouvez utiliser la commande ci-dessus dans les playbooks ci-dessous. 

---
- name: Service Status
gather_facts: False
tasks:
- name: Check Service Status (Linux)
Shell: pgrep "{{ proc_name }}"
register: service_status
ignore_errors: yes
debug: var=service_status.rc`
0
Rajeev Singh
ansible-playbook release.yml --extra-vars "username=hello password=bye"

#you can now use the above command anywhere in the playbook as an example below:
tasks:
- name: Create a new user in Linux
Shell: useradd -m -p {{username}} {{password}}"
0
Naveen Goyal
 s3_sync:
      bucket: ansible-harshika
      file_root: "{{ pathoftsfiles  }}"
      validate_certs: false 
      mode: Push
      key_prefix: "{{ folder }}"

ici, les variables utilisées sont nommées 'pathoftsfiles' et 'folder'. Maintenant, la valeur de cette variable peut être donnée par la commande ci-dessous

Sudo ansible-playbook multiadd.yml --extra-vars "pathoftsfiles=/opt/lampp/htdocs/video/uploads/tsfiles/$2 folder=nitesh"

Remarque: N'utilisez pas les guillemets lorsque vous transmettez les valeurs à la variable dans la commande Shell.

0
Nitesh Jain