Ansible:如何在when条件下检查值:密钥对

Ansible:如何在when条件下检查值:密钥对,ansible,yaml,Ansible,Yaml,首先,我以这种方式将我的剧本分开: environtments/something/host_vars/host1.yml roles/sshd/tasks/main.yml 主机的环境变量包含一些值:键对,在本例中: specialinfo: 'blah' 并且该角色包含一个块,当此“specialinfo”值与blah匹配时,应运行该块: - name: Check that specialvalue is blah block: - name: Do something

首先,我以这种方式将我的剧本分开:

environtments/something/host_vars/host1.yml
roles/sshd/tasks/main.yml
主机的环境变量包含一些值:键对,在本例中:

specialinfo: 'blah'
并且该角色包含一个块,当此“specialinfo”值与blah匹配时,应运行该块:

- name: Check that specialvalue is blah
  block:
  - name: Do something
    ...
  - name: Do something else
    ...
  when: {{ specialinfo }} == 'blah'
请帮助我实现这一点,因为我非常确定问题在“何时”条件内。如果我需要一个名字里面的副本或者类似的东西,我可以使用{{specialinfo}


还请注意,我不能在这里与_items一起使用,因为它不能在block元素中使用。

首先,在when中不能使用双大括号,因为条件本身需要是一个jinja表达式。将条件更改为when:specialinfo=='blah'

请注意,当块的条件应用于块内的所有任务时。这意味着相同的…=='“blah”条件将应用于“做某事”和“做其他事情”任务。如果要控制特定任务的执行时间,请将when单独用于任务,如下所示:

-调试:做点什么 是废话吗 时间:specialinfo=='blah' -调试:做些别的事情 味精:这不是废话 时间:specialinfo!='废话
是的,我想为块内的所有任务运行when条件。但无论如何,你是对的。如果我修改:when:{{specialinfo}}='blah'到when:specialinfo=='blah',它现在可以运行了,剧本也可以运行了。很酷,为了清楚起见,我重新安排了答案。