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
.
时遇到错误
根据我在网上找到的信息,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
.