Roo*_*dra 33 jinja2 ansible ansible-playbook
基于extra vars
参数I需要写入变量值ansible playbook
ansible-playbook playbook.yml -e "param1=value1 param2=value2 param3=value3"
Run Code Online (Sandbox Code Playgroud)
如果只通过了param1
myvariable: 'param1'
Run Code Online (Sandbox Code Playgroud)
如果只有param1,则param2通过
myvariable: 'param1,param2'
Run Code Online (Sandbox Code Playgroud)
如果传递了param1,param2,param3,那么变量值将是
myvariable: 'param1,param2,param3'
Run Code Online (Sandbox Code Playgroud)
当我尝试通过模板动态创建变量时,我的playbook总是采用先前的变量值.但在 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 }
Run Code Online (Sandbox Code Playgroud)
所以里面myrole目录我创建template
和vars
- roles
- myrole
- vars/main.yml
- templates/myvar.j2
Run Code Online (Sandbox Code Playgroud)
模板/ 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 %}
Run Code Online (Sandbox Code Playgroud)
据我所知,如果只有两个条件,那么我可以使用inline expression
如下所示
{{ 'param1,param2' if param1 is defined and param2 is defined else 'default-param' }}
Run Code Online (Sandbox Code Playgroud)
<do something> if <something is true> else <do something else>
是否有可能if - elif - else
在inline expression
像上面.或者在ansible playbook中动态分配值的任何其他方式?
Dom*_*tro 39
我确信有一种更聪明的方法来做你想做的事情,但这应该有效:
- 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
Run Code Online (Sandbox Code Playgroud)
希望有所帮助.我不确定你是否可以动态构造变量并在迭代器中执行此操作.但是你也可以编写一个小的python代码或任何其他语言并将其插入ansible
小智 23
my_var:声明的变量
VAR:变量,其值将被检查
param_1,param_2:变量VAR的值
value_1,value_2,value_3:根据my_var的值分配给my_var的值
my_var: "{{ 'value_1' if VAR == 'param_1' else 'value_2' if VAR == 'param_2' else 'value_3' }}"
Run Code Online (Sandbox Code Playgroud)
小智 16
我首先建议你退一步看看组织你的戏剧不需要这么复杂,但如果你真的这么做,请使用以下内容:
vars:
myvariable: "{{[param1|default(''), param2|default(''), param3|default('')]|join(',')}}"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
107062 次 |
最近记录: |