2016-06-14 3 views
0

Я пытаюсь найти, существует ли определенная буква в массиве stdout_lines.Поиск строки в массиве stdout_lines

Я хочу, чтобы роль выполнялась, если в файле stdout_output есть «P».

Массив stdout_lines выглядит следующим образом:

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

Ошибка я получаю

фатальным: [имя хоста]: FAILED! => {"failed": true, "msg": "ERROR! Условная проверка '{{prod_fact}}. find (' P ')' не удалось. Ошибка: ошибка ERROR! template при шаблоне шаблона: ожидаемый токен ' ', есть „строка“ "}

для того, чтобы получить stdout_variable Я использую 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('')}}" 

ответ

0

ошибка странно, и я не могу воспроизвести его в анзибль 2. Но ваше состояние все еще не будет работать, список не имеет метода поиска. В Ansible вы можете найти список с in:

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