Basé sur extra vars
paramètre I Besoin d'écrire la valeur de la variable dans ansible playbook
ansible-playbook playbook.yml -e "param1=value1 param2=value2 param3=value3"
Si seulement param1 passé
myvariable: 'param1'
Si seulement param1, param2 passé
myvariable: 'param1,param2'
Si param1, param2, param sont passés alors la valeur de la variable sera
myvariable: 'param1,param2,param3'
Lorsque j'essaie de créer des variables de manière dynamique via un modèle, mon livre de lecture prend toujours la valeur de variable précédente. Mais à l'intérieur dest=roles/myrole/vars/main.yml
sa valeur d'écriture correcte.
Ce que je fais essayer ici
- hosts: local
user: roop
gather_facts: yes
connection: local
tasks:
- template: src=roles/myrole/templates/myvar.j2 dest=roles/myrole/vars/main.yml
- debug: var=myvariable
roles:
- { role: myrole }
Donc, dans le répertoire myrole, j'ai créé template
et vars
- roles
- myrole
- vars/main.yml
- templates/myvar.j2
templates/myvar.j2
{% if param1 is defined and param2 is defined and param3 is defined %}
myvariable: 'param1,param2,param3'
{% Elif param1 is defined and param2 is defined %}
myvariable: 'param1,param2'
{% Elif param1 is defined %}
myvariable: 'param1'
{% else %}
myvariable: 'default-param'
{% endif %}
Comme je sais si seulement deux conditions, je peux le faire en utilisant inline expression
comme ci-dessous
{{ 'param1,param2' if param1 is defined and param2 is defined else 'default-param' }}
<do something> if <something is true> else <do something else>
C'est possible if - Elif - else
dans inline expression
comme ci-dessus. Ou tout autre moyen d'attribuer une valeur de manière dynamique dans Ansible Playbook?
Je suis sûr qu'il existe un moyen plus intelligent de faire ce que vous voulez, mais cela devrait fonctionner:
- name : Test var
hosts : all
gather_facts : no
vars:
myvariable : false
tasks:
- name: param1
set_fact:
myvariable: "{{param1}}"
when: param1 is defined
- name: param2
set_fact:
myvariable: "{{ param2 if not myvariable else myvariable + ',' + param2 }}"
when: param2 is defined
- name: param3
set_fact:
myvariable: "{{ param3 if not myvariable else myvariable + ',' + param3 }}"
when: param3 is defined
- name: default
set_fact:
myvariable: "default"
when: not myvariable
- debug:
var=myvariable
J'espère que ça t'as aidé. Je ne sais pas si vous pouvez construire des variables de manière dynamique et le faire dans un itérateur. Mais vous pouvez aussi écrire un petit code python ou tout autre langage et le brancher à ansible
my_var: la variable déclarée
VAR: la variable dont la valeur doit être vérifiée
param_1, param_2: valeurs de la variable VAR
valeur_1, valeur_2, valeur_3: les valeurs à affecter à my_var en fonction des valeurs de my_var
my_var: "{{ 'value_1' if VAR == 'param_1' else 'value_2' if VAR == 'param_2' else 'value_3' }}"
Je voudrais tout d’abord vous suggérer de prendre du recul et d’organiser vos pièces de manière à ne pas exiger une telle complexité, mais si vous le faites vraiment, utilisez ce qui suit:
vars:
myvariable: "{{[param1|default(''), param2|default(''), param3|default('')]|join(',')}}"