2017-07-19 4 views
-1

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?

Antwort

1

ios_command kehrt stdout als Liste und stdout_lines als Liste von Listen (während command Modul return stdout als Streich- und stdout_lines als Liste).

in Ihrem Fall also, Sie versuchen möchten:

- debug: "msg='4548 Card Found'" 
    when: showmod.stdout | join(" ") | search("/4548/") 
+0

Das tat es, danke! – Ross

Verwandte Themen