You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Ansible任务的stdout结果编写正确的判断条件?

解决Ansible Playbook中CDP启用检查的条件判断问题

问题场景

编写Ansible Playbook检查Cisco设备上CDP是否启用,由于CDP状态不在运行配置中,使用ios_command模块执行show cdp | i enabled命令,但后续的条件判断任务被跳过,未触发预期输出。

原Playbook代码

- name: Check if CDP is running
  cisco.ios.ios_command:
    commands:
      - "show cdp | i enabled"
  register: cdp_check
  check_mode: no

- name: Check if CDP is enabled
  set_fact:
    cdp_check_status: "{{ cdp_check.stdout }}"

- name: Print Value 
  debug:
    msg: Works
  when: '"enabled" in cdp_check_status'

执行输出

TASK [Check if CDP is enabled] ************************************
redirecting (type: connection) ansible.builtin.network_cli to ansible.netcommon.network_cli
redirecting (type: terminal) ansible.builtin.ios to cisco.ios.ios
redirecting (type: cliconf) ansible.builtin.ios to cisco.ios.ios
redirecting (type: become) ansible.builtin.enable to ansible.netcommon.enable 
ok: [atl01-sw-lab01] => {
  "ansible_facts": {         
     "cdp_check_status": [
         "Sending CDPv2 advertisements is  enabled"
     ]
  },
  "changed": false
}
TASK [Print Value] ************************************
skipping: [atl01-sw-lab01] => {}

问题原因

从输出可以看到,cdp_check_status是列表类型,其中包含一个字符串元素"Sending CDPv2 advertisements is enabled"。原条件"enabled" in cdp_check_status是检查字符串"enabled"是否是列表的直接元素,而非检查列表中某个元素是否包含"enabled"子串,因此条件不成立,任务被跳过。

解决方法

方法1:转换列表为单个字符串

修改set_fact任务,直接提取列表的第一个元素(因为show cdp | i enabled只会返回一行结果):

- name: Check if CDP is enabled
  set_fact:
    cdp_check_status: "{{ cdp_check.stdout[0] }}"

- name: Print Value 
  debug:
    msg: Works
  when: '"enabled" in cdp_check_status'

方法2:直接在条件中访问列表元素

无需修改set_fact,直接在when条件里指定列表的第一个元素进行判断:

- name: Print Value 
  debug:
    msg: Works
  when: '"enabled" in cdp_check_status[0]'

方法3:用过滤器处理多结果场景

如果命令可能返回多行结果,可使用select和search过滤器检查列表中是否存在包含指定子串的元素:

- name: Print Value 
  debug:
    msg: Works
  when: cdp_check_status | select('search', 'enabled') | list | length > 0

内容的提问来源于stack exchange,提问作者Sachin Prasad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 08:26:17