从我在网上找到的内容来看,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}}"
任何帮助或指示将不胜感激。
答案 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
时收到错误。