基于 extra vars
参数我需要在ansible playbook
中写入变量值
ansible-playbook playbook.yml -e "param1=value1 param2=value2 param3=value3"
如果只是参数 1 通过
myvariable: 'param1'
如果只是参数 1,参数 2 通过
myvariable: 'param1,param2'
如 参数 1、参数 2、参数 3 传递然后变量值将是
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
模板/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 中动态分配值?
最佳答案
我相信有一种更聪明的方法可以做你想做的事,但这应该有效:
- 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
希望有帮助。我不确定您是否可以动态构造变量并在迭代器中执行此操作。但是你也可以编写一个小的 python 代码或任何其他语言并将其插入 ansible
关于jinja2 - 如何在 Ansible playbook 中编写动态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23264226/