Ansible blockinfile 替换除块之外的所有内容
Ansible blockinfile replace everything except a block
我正在尝试使用 Ansible blockinfile 替换除特殊块之外的所有内容。可以安全地假设这个特殊块位于文件的开头。
ansible之前的文件内容运行:
# BEGIN SPECIAL
blah
# END OF SPECIAL
... bunch of configs
ansible 后的预期文件内容运行:
# BEGIN SPECIAL
blah
# END OF SPECIAL
[MY REPLACED CONFIGS]
使用 blockinfile 标记有两个问题。
marker_start
和 marker_end
不支持正则表达式
- 无法将 EOF 指定为
marker_end
我的任务:
- name: testing replacing file
blockinfile:
path: /tmp/testfile
marker: "{mark}"
marker_begin: "# END OF SPECIAL"
marker_end: EOF
block: "[MY REPLACED CONFIGS]"
state: present
这似乎并不能解决问题。有没有办法用 blockinfile 实现这个?
问:"有没有办法用 blockinfile 实现这个?"
A: 不行。模块blockinfile不能改变块外的内容。相反,一个简单的模板就可以完成这项工作。例如,给定变量
begin: "# BEGIN SPECIAL"
end: "# END OF SPECIAL"
block2: "[MY REPLACED CONFIGS]"
读块
- command: "sed -n '/{{ begin }}/,/{{ end }}/p' tmp/testfile"
register: result
- set_fact:
block1: "{{ result.stdout_lines[1:-1]|join('\n') }}"
给予
block1: blah
现在,将所有元素放在一起
- copy:
dest: tmp/testfile
content: |
{{ begin }}
{{ block1 }}
{{ end }}
{{ block2 }}
给予
shell> cat tmp/testfile
# BEGIN SPECIAL
blah
# END OF SPECIAL
[MY REPLACED CONFIGS]
我正在尝试使用 Ansible blockinfile 替换除特殊块之外的所有内容。可以安全地假设这个特殊块位于文件的开头。
ansible之前的文件内容运行:
# BEGIN SPECIAL
blah
# END OF SPECIAL
... bunch of configs
ansible 后的预期文件内容运行:
# BEGIN SPECIAL
blah
# END OF SPECIAL
[MY REPLACED CONFIGS]
使用 blockinfile 标记有两个问题。
marker_start
和marker_end
不支持正则表达式- 无法将 EOF 指定为
marker_end
我的任务:
- name: testing replacing file
blockinfile:
path: /tmp/testfile
marker: "{mark}"
marker_begin: "# END OF SPECIAL"
marker_end: EOF
block: "[MY REPLACED CONFIGS]"
state: present
这似乎并不能解决问题。有没有办法用 blockinfile 实现这个?
问:"有没有办法用 blockinfile 实现这个?"
A: 不行。模块blockinfile不能改变块外的内容。相反,一个简单的模板就可以完成这项工作。例如,给定变量
begin: "# BEGIN SPECIAL"
end: "# END OF SPECIAL"
block2: "[MY REPLACED CONFIGS]"
读块
- command: "sed -n '/{{ begin }}/,/{{ end }}/p' tmp/testfile"
register: result
- set_fact:
block1: "{{ result.stdout_lines[1:-1]|join('\n') }}"
给予
block1: blah
现在,将所有元素放在一起
- copy:
dest: tmp/testfile
content: |
{{ begin }}
{{ block1 }}
{{ end }}
{{ block2 }}
给予
shell> cat tmp/testfile
# BEGIN SPECIAL
blah
# END OF SPECIAL
[MY REPLACED CONFIGS]