Ich versuche mit Ansible eine Reihe (100+) Cisco Catalyst-Switches zu testen und zu prüfen, ob sie eine bestimmte Line-Karte installiert haben. Über SSH kann dies mit dem Befehl "sh mod" erfolgen. Ich möchte die Ausgabe dieses Befehls in einem Playbook analysieren und dann die Ausgabe des Befehls anzeigen, wenn eine bestimmte Zeichenfolge übereinstimmt. Gerade jetzt mit dem Textbuch unten bekomme ich folgende Fehlermeldung:Ansible Print IOS-Ausgabe bei String-Übereinstimmung
fatal: [redacted-hostname]: FAILED! => {"failed": true, "msg": "The conditional check 'showmod | search(\"4548\")' failed. The error was: Unexpected templating type error occurred on ({% if showmod | search(\"4548\") %} True {% else %} False {% endif %}): expected string or buffer\n\nThe error appears to have been in '/etc/ansible/playbooks/linecard-4548.yaml': line 22, column 5, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n - debug: \"msg='4548 Card Found'\"\n ^here\n"}
Aktuelles Textbuch Code:
---
- hosts: redacted-hostname
gather_facts: yes
connection: local
tasks:
- name: SYS | Define provider
set_fact:
provider:
host: "{{ inventory_hostname }}"
username: redacted-user
password: redacted-password
- name: IOS | Get Module List
ios_command:
provider: "{{ provider }}"
commands:
- sh mod | inc 4548
register: showmod
- debug: "msg='4548 Card Found'"
when: showmod.stdout | search("/4548/")
Ich habe versucht, die when
im Debug mit und ohne .stdout
ohne Erfolg. Ich habe einige Nachforschungen angestellt und der Fehler, den ich bekomme, tritt normalerweise auf, wenn in meinem Fall showmod
nicht definiert ist, aber es ist definitiv. Wenn ich das Debugging durch das folgende Snippet ersetze, läuft das Playbook gut, aber natürlich wird es die Ausgabe für jeden Switch ausgeben, der nicht das ist, was ich will.
- name: IOS | Show Output
debug:
var: showmod
Irgendwelche Vorschläge?
Das tat es, danke! – Ross