1

从我在网上找到的资料来看,Ansible 在 jinja 模板方面并不能很好地支持变量插值。

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

我想将一个变量“插入”到WHEN语句中。IEwhen: 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}}"

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

4

2 回答 2

0

这里有两个问题:

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

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

于 2017-06-20T16:36:45.607 回答
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.

于 2017-06-20T20:35:18.440 回答