2016-06-14 6 views
0

Ich versuche herauszufinden, ob ein bestimmter Buchstabe in einem stdout_lines-Array existiert.Suche nach einem String innerhalb eines stdout_lines-Arrays

Ich möchte die Rolle ausführen, wenn ein 'P' in der stdout_output gefunden wird.

Die stdout_lines Array sieht wie folgt aus:

"stdout": "P\r\nA\r\nS\r\nI\r\n", "stdout_lines": ["P", "A", "S", "I"] 

myrole.yml

--- 
- hosts: windows 
    gather_facts: false 
    roles: 
    - all_servers 
    - {role: production_server, when: prod_fact.find('P')} 

Der Fehler, den ich bekommen habe ist

fatal: [Hostname]: failed! => {"failed": true, "msg": "FEHLER! Die bedingte Prüfung '{{prod_fact}}. find (' P ')' ist fehlgeschlagen. Der Fehler war: ERROR! Template Fehler beim Templating String: expected token ' , 'erwartet, 'string' "}

um die stdout_variable ich bin mit set_fact

--- 
- name: Check Env Type and Save it in Var=prod_fact 
    script: files/CheckEnvType.ps1 -hostname {{inventory_hostname}} 
    register: result 
- set_fact: 
    prod_fact: "{{result.stdout_lines | default('')}}" 

Antwort

0

die Fehlermeldung ist seltsam, und ich kann nicht reproduzieren es in ansible 2. Aber Ihr Zustand zu erhalten funktioniert immer noch nicht, eine Liste hat keine Suchmethode. In Ansible können Sie eine Liste mit in suchen:

roles: 
    - all_servers 
    - {role: production_server, when: '"P" in prod_fact'} 
Verwandte Themen