Limpar diretório com arquivo de estado de sal


11

Como limpo um diretório em um salt-minion usando um arquivo de estado? Quero excluir todos os *.confarquivos /etc/supervisord/conf.d/antes de configurar outros serviços de supervisor.

A seguinte top.slsconfiguração não tem efeito:

/etc/supervisor/conf.d/*:
  file.absent

file.remove falha como indisponível.

Respostas:


10

Teve o mesmo problema que você. Foi o que funcionou para mim.

remove-supervisord-confd:
   file.directory:
      - name: /etc/supervisord/conf.d/           
      - clean: True

4

Não é uma resposta perfeita, mas você pode usar file.absent no diretório e, em seguida, recriá-lo. Observe que isso excluirá o dir toda vez que o estado for executado. Você pode gostar de um condicional jinja em torno do seguinte:

supervisor-conf-delete:
  file.absent:
    - name: /etc/supervisord/conf.d

supervisor-conf-create:
  file.directory:
    - name: /etc/supervisord/conf.d
    - user: root
    - group: root
    - mode: 0755
    - require:
        - file: supervisor-conf-delete

1

Você pode usar o módulo cmd nos estados salt. O código a seguir pode estar presente no seu arquivo de estado:

rm -f /etc/supervisord/conf.d/*.conf:
    cmd.run

Você também pode escrever comandos mais complicados, se desejar.


Obrigado, isso faria isso, mas não parece muito estável. Alguma idéia de por que o file.absent não funcionaria? Talvez não entenda curingas. Ou talvez um directorymódulo com uma função ausente seja mais apropriado?
— Petrus Theron

Não vejo como "directory.absent" seria mais stateful do que um comando executado com estados. Se você precisa ter um estado, apenas apresentá-los em seu script shell conforme necessário: docs.saltstack.com/en/latest/ref/states/all/...
— noamik
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.