如何在Ansible的blockinfile模块中保留缩进格式?
Ansible blockinfile模块保留插入内容缩进的解决方案
你遇到的问题核心是YAML的**折叠块(|)**会自动去除行首的公共缩进,所以你在block里手动添加的空格会被YAML解析器忽略,导致最终插入内容无缩进。以下是两种可行的解决方法:
方法1:使用blockinfile的indent参数(推荐,Ansible 2.10+支持)
这个参数可以直接指定块内容的缩进空格数,无需手动在block里加空格,同时可以给marker添加固定缩进,让整个块的格式完全符合预期:
修改后的剧本:
- name: Add lines between specific lines with 8 spaces of indentation hosts: all tasks: - name: Add lines ansible.builtin.blockinfile: path: /path/to/my/file marker: " # {mark} Do not edit manually" # 给marker添加8空格缩进 insertbefore: '^\s*the line that exists' indent: 8 # 指定block内容的缩进为8空格 block: | # first line second line
执行后会生成你预期的格式:
# BEGIN ANSIBLE MANAGED BLOCK # first line second line # END ANSIBLE MANAGED BLOCK
方法2:使用YAML的层级标记保留手动缩进
如果你的Ansible版本低于2.10,不支持indent参数,可以通过给YAML折叠块添加层级数字(如|2)来保留行首缩进。这个数字表示以当前block:所在的缩进层级为基准,超出的空格会被完整保留:
修改后的剧本:
- name: Add lines between specific lines with 8 spaces of indentation hosts: all tasks: - name: Add lines ansible.builtin.blockinfile: path: /path/to/my/file marker: " # {mark} Do not edit manually" insertbefore: '^\s*the line that exists' block: |2 # first line second line
这里的|2表示以block:所在的2空格缩进为基础,你手动添加的8个空格会被保留,最终插入内容符合预期。
内容的提问来源于stack exchange,提问作者medisamm
相关产品推荐
相关产品推荐

