如何使用Ansible检查文件中是否存在特定的文本块?
我正在使用Ansible在安装某些应用程序时自动执行某些任务 在某些情况下,我想检查文件中是否存在某些行。文件中有几行内容始终相同,顺序相同。我要检查在前面的行之间是否插入了额外的行 我认为正确的命令是如何使用Ansible检查文件中是否存在特定的文本块?,ansible,Ansible,我正在使用Ansible在安装某些应用程序时自动执行某些任务 在某些情况下,我想检查文件中是否存在某些行。文件中有几行内容始终相同,顺序相同。我要检查在前面的行之间是否插入了额外的行 我认为正确的命令是blockinfle,它与state:present混合使用,以确保行在那里。此外,我还使用check_mode不更改文件。那么任务是: - name: Check content of file delegate_to: localhost blockinfile: dest:
blockinfle
,它与state:present
混合使用,以确保行在那里。此外,我还使用check_mode
不更改文件。那么任务是:
- name: Check content of file
delegate_to: localhost
blockinfile:
dest: "{{ file.path }}"
block:
line 1 text....
line 2 text....
line 3 text....
state: present
check_mode: yes
但是,如果块存在或不存在,任务也不会失败。Ansible不停地继续。正如建议的那样。当为时,我可以将失败添加为:
- name: Check content of file
delegate_to: localhost
blockinfile:
dest: "{{ file.path }}"
block:
line 1 text....
line 2 text....
line 3 text....
state: present
check_mode: yes
register: block_exists
failed_when: (block_exists | changed)
始终块_存在
标记为已更改
blockinfle
是正确的命令吗?如何检查文件中是否存在一组行?模块的blockinline
块是一个多行文本,由开始和结束标记(默认情况下以注释的形式添加)标记
对于您的用例,在检查模式下使用替换模块是合适的:
- name: Check content of file
delegate_to: localhost
replace:
path: "{{ file.path }}"
regexp: |
line 1 text....
line 2 text....
line 3 text....
check_mode: yes
register: block_exists
failed_when: block_exists is changed
我尝试过这个选项,任务从未失败过。无论regexp
中的一行文本是否包含在文件中,这都无关紧要。因此,您做了一些错误的事情,因为如果多行文本出现错误,它确实会失败:失败!=>{“changed”:true,“failed_when_result”:true,“msg”:“1 replacements made”}
。请记住,regexp
值是一个正则表达式。您可能需要转义某些字符才能获得匹配。好的,我已转义了这些字符,但我将检查完整的测试以查找可能缺少的字符。好的,这是一个缺少的转义字符。谢谢