Estou usando blockinfile
o módulo do Ansible para adicionar um bloco de linhas entre linhas específicas em um arquivo. O bloco deve ser recuado com 8 espaços. No entanto, quando executo o playbook, as linhas são inseridas no início da linha (sem recuo), ignorando os espaços que adicionei no bloco. Aqui está o playbook que estou usando:
- 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
Comportamento esperado: O bloco deve ser inserido assim, com 8 espaços de recuo:
# BEGIN ANSIBLE MANAGED BLOCK
# first line
second line
# END ANSIBLE MANAGED BLOCK
Comportamento real: O bloco é inserido sem recuo:
# BEGIN ANSIBLE MANAGED BLOCK
# first line
second line
# END ANSIBLE MANAGED BLOCK
Tentei adicionar espaços diretamente no bloco, mas eles estão sendo ignorados. Existe uma maneira de fazer blockinfile
respeitar o recuo do bloco inserido?
Este é YAML, adicione o indicador/marcador de recuo, pois todos os recuos são iguais.
Observe o número dois "2" depois da barra vertical "|" na primeira linha do exemplo a seguir:
Direi ao analisador para usar apenas os dois primeiros caracteres de espaço para recuo e os outros caracteres de espaço para fazer parte da string multilinha (escalar) mapeada para a string "bloco" (escalar, no Ansible chamado parâmetro ).
Veja 8.1.2. Estilo literal (yaml.org) e 8.1.1.1. Indicador de recuo de bloco (yaml.org) .
Compare Como faço para quebrar uma string em YAML em várias linhas? (Perguntas e respostas) .
Leia sobre strings YAML Multiline em uma linguagem mais inclusiva em https://yaml-multiline.info/ .