首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使..stdout_lines/数组中的每一行匹配一个变量

如何使..stdout_lines/数组中的每一行匹配一个变量
EN

Stack Overflow用户
提问于 2019-08-21 19:53:40
回答 1查看 89关注 0票数 3

我正试着写一本不可信的剧本。需要帮助编写其中一项任务。如何在名为CONF的任务中正确地写出"when:“?

我的一个寄存器将包括一个数组:

代码语言:javascript
运行
复制
{
    "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"
    ]
}

我还有一个预定义的变量:

代码语言:javascript
运行
复制
vars:
    ntp_server: "ntp server 10.190.248.248"

当数组中的任何项与预定义变量不匹配时,我希望运行一个任务。但是,变量可以匹配数组中的任何行,如果其他行不匹配,则任务仍然需要运行。

即使数组中存在ntp_server,如果其他数组项不匹配,我仍然需要运行该任务。因此,我必须通过使用数组项来匹配它,并检查每个条目是否与ntp_server匹配。如果没有匹配,则运行任务。但是,即使存在多个非匹配,任务也只需要运行一次。

名为"CONF“的任务和相关的"when:”不适用于我。名为"remove服务器“的任务工作正常。

代码语言:javascript
运行
复制
---

- 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年的经验,但没有编码经验。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-21 20:13:09

问:“当数组中的任何项与预定义变量不匹配时,我希望运行一个任务。”

下面的条件起作用了

代码语言:javascript
运行
复制
- debug:
    msg: This task will run
  when: current_ntp_servers.stdout_lines|                           
        reject('match', ntp_server)|
        list|
        length > 0

根据用例,可以将测试match更改为equaltosearch

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57598400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档