Ansible WHEN 变量插值

Ansible WHEN with variable interpolation

根据我在网上找到的信息,Ansible 在涉及到 jinja 模板时不能很好地支持变量插值。

不过,我确信 Ansible 中更高级的人已经在下面找到了解决我的问题的方法。

我想 "interpolate" 一个变量到 WHEN 语句。 即 when: Disabled in (smart_link_status.results[item[0]].stdout)

这是我的剧本:

    - name: "Get Smart Link status"
      shell: "{{ssh_command}} show network {{network_name}}_{{item}} | grep 'Smart Link'"
      register: "smart_link_status"
      with_items:
       - "{{uplink_id}}"

   - name: "enable SmartLink for the network"
     shell: "{{ssh_command}} set network {{network_name}}_{{item[1]}} SmartLink={{smart_link}}"
     when: Disabled in (smart_link_status.results[item[0]].stdout)
     with_indexed_items:
       - "{{uplink_id}}"

我怎样才能做到这一点?似乎我可以使用普通模块轻松地做到这一点,即 debug 但不能使用 WHEN 语句。

这很好用:

- debug:
    msg: "{{ls_bin.results[item[0]].stdout}}"
  with_indexed_items:
    - "{{bob}}"

任何帮助或指点将不胜感激。

这里有两个问题:

  • @Konstantin Suvorov 正确指出的其中一个是我没有使用引文。

  • 另一个问题是我是 运行 带有 --start-at-task 的 ansible-playbook,因此跳过了创建 smart_link_status 的步骤。

试试这个:

    when: smart_link_status is defined and smart_link_status.results[item[0]].stdout.find('Disabled') != -1

此外,在 shell 任务中,我会使用 check_mode: no 以便 smart_link_status 在 运行 处于检查模式时未定义。否则,您将在随后访问 smart_link_status.results.

时遇到错误