在stdout_lines数组中查找字符串

时间:2016-06-14 18:52:05

标签: python ansible stdout jinja2 ansible-playbook

我试图找出stdout_lines数组中是否存在某个字母。

如果有一个' P'我希望该角色能够运行。在stdout_output中找到。

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

我得到的错误是

  

致命:[主机名]:失败! => {"失败":是的," msg":"错误!条件检查' {{prod_fact}}。找到(' P')'失败。错误是:错误!模板字符串时出现模板错误:期望令牌',',得到'字符串'"}

为了获得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('')}}"

1 个答案:

答案 0 :(得分:0)

错误消息很奇怪,我无法在Ansible 2中重现它。但是你的状况仍然无效,列表没有find方法。在Ansible中,您可以使用in搜索列表:

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