使用ansible中的嵌套条件为变量赋值
Assign value to variable using nested condition in ansible
我想在 ansible 中使用嵌套条件为变量赋值,有人可以帮助了解如何实现这一点吗?我不确定如何在角色中使用 if else,在下面的示例中:我想要一个
使用以下逻辑设置 my_host 变量
我想在游戏中实现的逻辑sudo代码
if component.Comp1.SubComp1.host defined
set my_host = component.Comp1.SubComp1.host
elif component.Comp1.host defined;
set my_host = component.Comp1.host
else
set my_host = host
endif
库存文件
all:
hosts:
host1:
host2:
host3
vars:
app: myApp
host:host3
basePath: /home/foo/test/
component:
Comp1:
SubComp1:
host: host2
basePath: /home/foo/test1/
SubComp2:
host: host2
basePath: /home/foo/test1/
Comp2:
host:host1
basePath: /home/bar/test1/
SubComp1:
SubComp2:
host: host3
basePath: /home/bar/test1/
播放
- include_role:
name: create_config
vars:
VENUE: "{{ play_item.key }}"
COMPONENT_NAME: comp1
dest_folder: "{{ play_item.value.basePath}}"
my_host: "{{ play_item.value.host}}"
when: my_host == ansible_fqdn and include_Component.comp1 is defined
with_items:
- "{{component.comp1| dict2items }}"
loop_control:
loop_var: play_item
让我们稍微简化一下变量
if SubComp1 defined
set my_host = SubComp1
elif Comp1 defined;
set my_host = Comp1
else
set my_host = 'host'
endif
在 Ansible 中,使用 默认 过滤器,例如
my_host: "{{ SubComp1|d(Comp1|d('host')) }}"
默认给
my_host: host
如果定义了Comp1
shell> ansible-playbook test.yml -e Comp1='Comp1'
my_host: Comp1
如果定义了SubComp1
shell> ansible-playbook test.yml -e SubComp1='SubComp1'
my_host: SubComp1
我想在 ansible 中使用嵌套条件为变量赋值,有人可以帮助了解如何实现这一点吗?我不确定如何在角色中使用 if else,在下面的示例中:我想要一个 使用以下逻辑设置 my_host 变量
我想在游戏中实现的逻辑sudo代码
if component.Comp1.SubComp1.host defined
set my_host = component.Comp1.SubComp1.host
elif component.Comp1.host defined;
set my_host = component.Comp1.host
else
set my_host = host
endif
库存文件
all:
hosts:
host1:
host2:
host3
vars:
app: myApp
host:host3
basePath: /home/foo/test/
component:
Comp1:
SubComp1:
host: host2
basePath: /home/foo/test1/
SubComp2:
host: host2
basePath: /home/foo/test1/
Comp2:
host:host1
basePath: /home/bar/test1/
SubComp1:
SubComp2:
host: host3
basePath: /home/bar/test1/
播放
- include_role:
name: create_config
vars:
VENUE: "{{ play_item.key }}"
COMPONENT_NAME: comp1
dest_folder: "{{ play_item.value.basePath}}"
my_host: "{{ play_item.value.host}}"
when: my_host == ansible_fqdn and include_Component.comp1 is defined
with_items:
- "{{component.comp1| dict2items }}"
loop_control:
loop_var: play_item
让我们稍微简化一下变量
if SubComp1 defined
set my_host = SubComp1
elif Comp1 defined;
set my_host = Comp1
else
set my_host = 'host'
endif
在 Ansible 中,使用 默认 过滤器,例如
my_host: "{{ SubComp1|d(Comp1|d('host')) }}"
默认给
my_host: host
如果定义了Comp1
shell> ansible-playbook test.yml -e Comp1='Comp1'
my_host: Comp1
如果定义了SubComp1
shell> ansible-playbook test.yml -e SubComp1='SubComp1'
my_host: SubComp1