Ansible WHEN with variable interpolation

时间:2017-06-20 15:58:07

标签: ansible ansible-template

从我在网上找到的内容来看,Ansible在jinja模板方面并不能很好地支持varibale intrepolation。

但是,我确信在Ansible中有更高级的人找到了我的问题的解决方法。

我想"插入" 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}}"

我怎样才能做到这一点?似乎我可以使用普通模块轻松完成,例如调试,但不能使用 WHEN 语句。

这很好用:

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

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

2 个答案:

答案 0 :(得分:0)

这是两个问题:

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

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

答案 1 :(得分:0)

试试这个:

    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时收到错误。