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.

Petrus Theron
fonte

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
holms
fonte
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
Dan Garthwaite
fonte
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.

codificado
fonte
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