无法从Ansible变量中搜索子字符串

无法从Ansible变量中搜索子字符串,ansible,substring,version,string-matching,Ansible,Substring,Version,String Matching,如果变量包含字符串7.0.0.GA,我将尝试在Ansible中创建一个目录 下面是我的剧本: - name: Determine the version of Tom raw: "cat {{ homefound.path | dirname }}/version.txt | grep -i version" register: Tomver - debug: msg: "Tom VERSION IS: {{ Tomver.stdout }}&qu

如果变量包含字符串7.0.0.GA,我将尝试在Ansible中创建一个目录

下面是我的剧本:

- name: Determine the version of Tom
  raw: "cat {{ homefound.path | dirname }}/version.txt | grep -i version"
  register: Tomver

- debug:
    msg: "Tom VERSION IS: {{ Tomver.stdout }}"

- name: Create patch folder /app/Tom_Patches/7.0 on target servers
  file:
    path: /app/Tom_Patches/7.0
    state: directory
    mode: '0755'
  when: Tomver.stdout is match('7.0.0.GA*')
在输出中,我可以看到变量具有字符串7.0.0.GA,但在条件失败和跳过时仍然存在

输出:

TASK [debug] ***********************************************************************************************************************************************************
ok: [10.9.156.126] => {
    "msg": "Tom VERSION IS: Red Hat Tom Enterprise Application Platform - Version 7.0.0.GA\r\n"
}

TASK [Create patch folder /app/Tom_Patches/7.0 on target servers] ****************************************************************************************************
skipping: [10.9.156.126]
我甚至尝试了以下条件检查,但也失败了:

  when: Tomver.stdout | join('') | search('7.0.0.GA')
我更喜欢使用原始模块而不是命令或shell模块来避免python依赖性


有人能提出建议吗?

你可以试试这个


match需要一个regexp。“7.0.0.GA*'表示匹配“7”,后跟任何字符,后跟“0”,后跟任何字符,后跟“0”,后跟任何字符,后跟“G”,后跟0或更多“A”。我怀疑这正是你想要匹配的。。。此外,如果不知道输入数据是什么,就不可能帮助您。最后,使用raw是有害的,除非在目标上安装python(如果尚未安装)。@Zeitounator或者我试图匹配的文本在输出共享用户调试中可见。对不起,关于数据,下次阅读时我会更加小心。同时,我的其余评论仍然有效。完全同意你的建议。谢谢你@Zeitounator
when: "'7.0.0.GA' in res.stdout"