2017-07-19 9 views
-1

Je suis en train d'utiliser Ansible pour frapper un groupe (100+) commutateurs Cisco Catalyst et vérifier si elles ont une certaine carte de ligne installée. Via SSH, cela peut être fait avec la commande "sh mod". Je veux analyser la sortie de cette commande dans un playbook et ensuite montrer la sortie de la commande si une certaine chaîne correspond. En ce moment, avec le livre de jeux ci-dessous je reçois l'erreur suivante:Ansible Imprimer la sortie IOS sur le match string

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"}

Code actuel PlayBook:

--- 
- 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/") 

J'ai essayé le when dans la mise au point avec et sans le .stdout en vain. J'ai fait quelques recherches et l'erreur que j'obtiens se produit habituellement quand, dans mon cas, showmod est indéfini mais c'est définitivement le cas. Si je remplace le débogage par l'extrait suivant, le playbook fonctionne bien mais bien sûr il imprimera la sortie pour chaque commutateur qui n'est pas ce que je veux.

- name: IOS | Show Output 
    debug: 
     var: showmod 

Des suggestions?

Répondre

1

ios_command retours stdout liste et stdout_lines liste des listes (alors que command retour du module stdout sous forme de chaîne et stdout_lines liste).

Donc dans votre cas, vous pouvez essayer:

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

qui l'a fait, je vous remercie! – Ross