【发布时间】: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
标签: ansible substring version string-matching