如何使用 Ansible 验证文件是否具有特定的子字符串?
How to validate that a file has a specific substring with Ansible?
我想在我的 Ansible 游戏中有一个 assert
或 fail
任务来验证是否部署了正确的代码构建。部署附带一个 version.properties
文件,其中包含我关心的构建信息。
'correct' 代码版本来自一个 vars 文件,名为 desired_build_id
。
如何验证我的 version.properties
提到了这个构建 ID?某种子字符串搜索?
我试过以下方法:
---
- name: Validate deployment success
hosts: app-nodes
tasks:
- name: Read version.properties file
shell: cat /path/to/version.properties
register: version_prop_content
- fail: Wrong build ID found in version.properties
when: desired_build_id not in version_prop_content.stdout
然而,这给出了一个错误:error while evaluating conditional: esired_build_id not in version_prop_content.stdout
正确的语法是什么?或者,有更好的方法吗?
想通了!
进行子字符串比较的方法是 version_prop_content.stdout.find(desired_build_id) > 0
如果存在子字符串则为真
find
命令 returns 子字符串的索引,如果不存在则为 -1。
我还将它更改为断言任务,使它看起来更漂亮(fail
是一个丑陋的词;))。
- name: Check that desired version was deployed
assert:
that:
- version_prop_content.stdout.find(desired_build_id) > 0
更简单的 python 表达式也可以:
- name: Read version.properties file
shell: cat /path/to/version.properties
register: version_prop_content
- debug: msg="desired build installed"
when: "'{{desired_build_id}}' in '{{version_prop_content.stdout}}'"
或者像我一直建议的那样,尽可能避免使用 ansible
:
- name: verify version
shell: grep '{{desired_build_id}}' /path/to/version.properties
我想在我的 Ansible 游戏中有一个 assert
或 fail
任务来验证是否部署了正确的代码构建。部署附带一个 version.properties
文件,其中包含我关心的构建信息。
'correct' 代码版本来自一个 vars 文件,名为 desired_build_id
。
如何验证我的 version.properties
提到了这个构建 ID?某种子字符串搜索?
我试过以下方法:
---
- name: Validate deployment success
hosts: app-nodes
tasks:
- name: Read version.properties file
shell: cat /path/to/version.properties
register: version_prop_content
- fail: Wrong build ID found in version.properties
when: desired_build_id not in version_prop_content.stdout
然而,这给出了一个错误:error while evaluating conditional: esired_build_id not in version_prop_content.stdout
正确的语法是什么?或者,有更好的方法吗?
想通了!
进行子字符串比较的方法是 version_prop_content.stdout.find(desired_build_id) > 0
如果存在子字符串则为真
find
命令 returns 子字符串的索引,如果不存在则为 -1。
我还将它更改为断言任务,使它看起来更漂亮(fail
是一个丑陋的词;))。
- name: Check that desired version was deployed
assert:
that:
- version_prop_content.stdout.find(desired_build_id) > 0
更简单的 python 表达式也可以:
- name: Read version.properties file
shell: cat /path/to/version.properties
register: version_prop_content
- debug: msg="desired build installed"
when: "'{{desired_build_id}}' in '{{version_prop_content.stdout}}'"
或者像我一直建议的那样,尽可能避免使用 ansible
:
- name: verify version
shell: grep '{{desired_build_id}}' /path/to/version.properties