Effacer le répertoire avec le fichier d'état du sel

11

Comment effacer un répertoire sur un sel-minion en utilisant un fichier d'état? Je souhaite supprimer tous les *.conffichiers /etc/supervisord/conf.d/avant de configurer d'autres services de superviseur.

La top.slsconfiguration suivante n'a aucun effet:

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

file.remove échoue car non disponible.

Petrus Theron
la source

Réponses:

10

J'ai eu le même problème que vous. C'est ce qui a fonctionné pour moi.

remove-supervisord-confd:
   file.directory:
      - name: /etc/supervisord/conf.d/           
      - clean: True
holms
la source
4

Pas une réponse parfaite, mais vous pouvez utiliser file.absent sur le répertoire, puis le recréer. Notez que cela supprimera le répertoire à chaque exécution de l'état. Vous pourriez avoir envie d'un jinja conditionnel entourant les éléments suivants:

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
la source
1

Vous pouvez utiliser le module cmd dans les états de sel. Le code suivant peut être présent dans votre fichier d'état:

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

Vous pouvez également écrire des commandes plus compliquées si vous le souhaitez.

code PIN
la source
Merci, ça le ferait, mais ça ne semble pas très dynamique. Une idée pourquoi le fichier.absent ne fonctionnerait pas? Peut-être qu'il ne comprend pas les caractères génériques. Ou peut-être qu'un directorymodule avec une fonction absente serait plus approprié?
Petrus Theron
Je ne vois pas comment "directory.absent" serait plus dynamique qu'avec une commande exécutée avec des états. Si vous avez besoin d'un état, introduisez-les simplement dans votre script shell comme requis: docs.saltstack.com/en/latest/ref/states/all/…
noamik