使用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