Como posso usar o Ansible para anexar condicionalmente uma linha em um arquivo?

2

Estou tentando criar uma tarefa Ansible que configura aparar / descartar. Eu tenho um playbook que cuida de todo o resto (LVM, fstrim), mas não consigo descobrir como obter o crypttab configurado corretamente.

Estou tentando usar o módulo substituir para acrescentar discard ao final de cada linha que não tem discard presente, mas parece que não consigo acertar o regex (acho que esse é o meu problema, de qualquer forma).

Eu tenho um arquivo /etc/crypttab parecido com isto:

luks-nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn UUID=nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn none discard
luks-nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn UUID=nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn none

E aqui está a tarefa:

- name: ensure crypttab is configured to issue discards
  replace: dest=/etc/crypttab backup=yes
    regexp='^(.*(?! discard))$'
    replace=' discard'
    
por Mark Caudill 20.05.2016 / 19:46

1 resposta

3

Tenho certeza de que seu problema está no regexp. Você precisará mover a asserção antecipada na frente do caractere curinga para corresponder somente as linhas que não terminam em discard . Por exemplo, ^(?!.* discard$)(.*)$ .

Depois de fazer essa alteração, você terá um problema adicional em que as linhas vazias também corresponderão - provavelmente indesejáveis. Use algo como ^(?!.* discard$)(.+)$ para corrigir esse problema, combinando um ou mais caracteres com .+ (em vez de zero ou mais, .* ).

Como alternativa, você pode usar uma declaração lookbehind, como em ^(.+)(?<! discard)$ .

    
por 24.05.2016 / 00:56