【发布时间】:2014-04-24 08:55:06
【问题描述】:
基于extra vars参数我需要在ansible playbook中写入变量值
ansible-playbook playbook.yml -e "param1=value1 param2=value2 param3=value3"
如果只有 param1 通过了
myvariable: 'param1'
如果只有 param1,param2 通过
myvariable: 'param1,param2'
如果 param1,param2,param3 被传递,那么变量值将是
myvariable: 'param1,param2,param3'
当我尝试通过模板动态创建变量时,我的剧本总是采用以前的变量值。但在dest=roles/myrole/vars/main.yml 内部,它的写入值是正确的。
我在这里尝试一下
- 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 }
所以在 myrole 目录中我创建了template 和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 %}
我知道如果只有两个条件,那么我可以使用inline expression 来做到这一点,如下所示
{{ 'param1,param2' if param1 is defined and param2 is defined else 'default-param' }}
<do something> if <something is true> else <do something else>
if - elif - else 是否可以像上面那样在inline expression 中。或者在ansible playbook中动态分配价值的任何其他方式?
【问题讨论】:
标签: jinja2 ansible ansible-playbook