无法从 Ansible 变量中搜索子字符串
Posted
技术标签:
【中文标题】无法从 Ansible 变量中搜索子字符串【英文标题】:Unable to search sub-string from Ansible variable 【发布时间】:2020-11-07 02:41:55 【问题描述】:如果变量包含字符串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
但仍然 when condition
失败并跳过。
输出:
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')
我更喜欢使用raw
模块而不是command
或shell
模块以避免python 依赖。
有人可以推荐吗?
【问题讨论】:
match 需要一个正则表达式。'7.0.0.GA*'
表示“匹配 '7' 后跟任意字符后跟 '0' 后跟任意字符后跟 '0' 后跟任意字符后跟 'G' 后跟 0 或多个 'A'”。我怀疑这是您要完全匹配的内容...此外,如果不知道您的输入数据是什么,就不可能为您提供帮助。最后,使用raw
是邪恶的(除非在目标上安装python如果尚未安装)。
@Zeitounator 我尝试匹配的文本在输出共享用户debug
中可见
对不起数据,我下次阅读时会更加小心。同时,我的其余评论仍然有效。
完全同意您的建议。谢谢@Zeitounator
【参考方案1】:
你可以试试in
when: "'7.0.0.GA' in res.stdout"
【讨论】:
以上是关于无法从 Ansible 变量中搜索子字符串的主要内容,如果未能解决你的问题,请参考以下文章