我在安装某些应用程序时使用Ansible自动执行某些任务。
在某些时候,我想检查文件中是否存在某些行。在文件中有几行总是以相同的顺序具有相同的内容。我想检查前一行之间是否没有插入额外的行。
我认为正确的命令是blockinfile
,与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继续不停。正如所建议in this answer。我可以将failed_when
添加为:
- 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)
始终block_exists
被标记为changed
。
这是blockinfile
正确的命令吗?如何检查文件中是否存在一组行?
答案 0 :(得分:2)
blockinfile
模块的阻止是由开始和结束标记标记的多行文本(默认情况下以评论的形式添加)。
对于在检查模式下使用replace
模块的用例是合适的:
- 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