我正在通过SNMP收集事实,但是如果在OID响应中找不到字符串,我希望触发失败。
下面是我的剧本。但我不能让它触发。
注:我在使用Ansible 2.8.3
tasks:
- name: "TASK 1: GATHER FACTS VIA SNMP"
snmp_facts:
host: "{{ ansible_host }}"
version: v3
level: authPriv
integrity: sha
privacy: aes
username: "{{ item.user }}"
authkey: "{{ item.pwd }}"
privkey: "{{ item.privacy }}"
with_items: "{{ snmp_users }}"
delegate_to: localhost
notify: snmp_facts_collected
- debug:
msg: "SNMP System Name: {{ ansible_sysname }} SNMP OID: {{ ansible_sysobjectid }} ansible_sysdescr {{ ansible_sysdescr }} "
handlers:
- name: "HANDLER 1: Check SNMP Response"
listen: snmp_facts_collected
fail:
msg: parse err
when: "{{ 'Xisco NX-OS' not in ansible_sysdescr }}"发布于 2019-08-14 16:56:15
模块snmp_facts不报告changed: true。注册并查看result。
tasks:
- name: "TASK 1: GATHER FACTS VIA SNMP"
snmp_facts:
host: "{{ ansible_host }}"
...
register: result
- debug:
var: result调试给出
"result": {
"ansible_facts": {
...
"changed": false,
"failed": false
}
}"changed": false是处理程序未被触发的原因。如果你想测试ansible_sysdescr,就把它作为剧本中的下一个任务
- fail:
msg: parse err
when: ansible_sysdescr is not search('Xisco NX-OS')发布于 2019-07-31 09:04:06
在阅读Ansible 什么时候文档时,我建议从when:子句中删除{{ & }}:
when: 'Xisco NX-OS' not in ansible_sysdescr如果这还不够,请尝试debug:模块在ansible_sysdescr键上,以直观地检查是否存在这个确切的短语。
发布于 2019-07-31 09:07:32
问题的原因是只有在更改状态时才触发处理程序。由于snmp事实,没有对其进行更改,因此不会触发。
https://stackoverflow.com/questions/57277894
复制相似问题