我正在使用 Ansible 的blockinfile
模块在文件中的特定行之间添加一行代码。该代码块应缩进 8 个空格。但是,当我运行剧本时,这些行会插入到行的开头(没有缩进),忽略我在代码块中添加的空格。这是我正在使用的剧本:
- 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: |
# first line
second line
预期行为:应像这样插入块,并缩进 8 个空格:
# BEGIN ANSIBLE MANAGED BLOCK
# first line
second line
# END ANSIBLE MANAGED BLOCK
实际行为:块插入时没有缩进:
# BEGIN ANSIBLE MANAGED BLOCK
# first line
second line
# END ANSIBLE MANAGED BLOCK
我尝试直接在块中添加空格,但它们被忽略了。有没有办法让blockinfile
插入的块尊重缩进?
这是 YAML,添加缩进指示符/标记,因为所有缩进都是相同的。
请注意以下示例第一行中管道“|”后面的数字“2”:
将告诉解析器仅使用前两个空格字符进行缩进,并将其他空格字符作为映射到字符串“block”(标量,在 Ansible 中称为参数)的多行字符串(标量)的一部分。
请参阅8.1.2. 文字样式(yaml.org)和8.1.1.1. 块缩进指示器(yaml.org)。
比较如何将 YAML 中的字符串拆分为多行?(问答)。
请在https://yaml-multiline.info/上阅读有关更具包容性的语言中的 YAML 多行字符串的信息。