我正试着写一本不可信的剧本。需要帮助编写其中一项任务。如何在名为CONF的任务中正确地写出"when:“?
我的一个寄存器将包括一个数组:
{
"current_ntp_servers.stdout_lines": [
"ntp server 10.190.248.248",
"ntp server 10.190.248.8",
"ntp server 10.190.248.16",
"ntp server 10.190.248.1",
"ntp server 10.190.248.9",
"ntp server 10.190.248.17",
"ntp server 10.190.248.2",
"ntp server 10.190.248.10",
"ntp server 10.190.248.34",
"ntp server 10.190.248.98",
"ntp server 10.190.248.18",
"ntp server 10.180.248.3"
]
}
我还有一个预定义的变量:
vars:
ntp_server: "ntp server 10.190.248.248"
当数组中的任何项与预定义变量不匹配时,我希望运行一个任务。但是,变量可以匹配数组中的任何行,如果其他行不匹配,则任务仍然需要运行。
即使数组中存在ntp_server,如果其他数组项不匹配,我仍然需要运行该任务。因此,我必须通过使用数组项来匹配它,并检查每个条目是否与ntp_server匹配。如果没有匹配,则运行任务。但是,即使存在多个非匹配,任务也只需要运行一次。
名为"CONF“的任务和相关的"when:”不适用于我。名为"remove服务器“的任务工作正常。
---
- hosts: switches
gather_facts: false
connection: network_cli
vars:
ntp_server: "ntp server 10.190.248.248"
tasks:
- name: "sh run | s ntp server"
cli_command:
command: sh run | s ntp server
register: current_ntp_servers
- name: THESE ARE THE CURRENT NTP SERVERS CONFIGURED ON THIS DEVICE BEFORE ANY CHANGES
debug:
var: current_ntp_servers.stdout_lines
- name: REMOVE NTP SERVERS CONF T
block:
- name: CONF T
when: "(current_ntp_servers.stdout_lines not in ntp_server)"
cli_command:
command: conf t
register: conf_t
- debug:
var: conf_t
- name: remove ntp servers
with_items: "{{ current_ntp_servers.stdout_lines }}"
when: "(item != ntp_server)"
cli_command:
command: "no {{item}}"
register: remove_ntp_output.stdout_lines
对我来说是新的。我是一个网络工程师,有10年的经验,但没有编码经验。
发布于 2019-08-21 20:13:09
问:“当数组中的任何项与预定义变量不匹配时,我希望运行一个任务。”
下面的条件起作用了
- debug:
msg: This task will run
when: current_ntp_servers.stdout_lines|
reject('match', ntp_server)|
list|
length > 0
根据用例,可以将测试match
更改为equalto
或search
。
https://stackoverflow.com/questions/57598400
复制相似问题