2016-10-19 4 views
0

Ich habe eine Ressource, wie unten aussieht:Wie führe ich die Chef-Ressource nicht aus, wenn das Verzeichnis leer ist?

execute 'run_command' do 
    command "chown -R user:user * " 
    not_if Dir["/home/user/dir1/*"].empty? 
end 

ich sicherstellen möchten, dass die Ressource nicht ausgeführt wird, wenn /home/user/dir1 leer

+0

Sie werden nicht wirklich alles, was viel Zeit sparen; Chown ist ziemlich schnell. Warum spielt es eine Rolle? –

+0

Wenn das Verzeichnis leer ist, funktioniert der Befehl nicht und gibt einen Fehler – meallhour

+0

Der Fehler ist was? – StephenKing

Antwort

-2

Nur enge Standardfehler. Zum Beispiel:

execute 'chown a directory' do 
    command 'chown -R user:group /path/to/directory 2>&-' 
end 
+0

Dies ist ein ziemlich schlechter Stil vom Standpunkt der Idempotenz (der Grund, warum @meallhour nach einem gültigen Wächter sucht). – StephenKing

+0

@StephenKing Vielen Dank für das Fahrradvergießen. Bitte schauen Sie nach "Konvergenz". Ich werde es nicht weiter diskutieren, aber Sie können gerne Ihre eigene Antwort für das OP hinterlassen. –

+0

Ich konnte das Problem nicht innerhalb der Zeit reproduzieren, die ich hatte. Deshalb habe ich keine Antwort hinterlassen. Da Sie diesen Aspekt des Chefs nicht zu kennen schienen, habe ich versucht, Ihnen dies so freundlich wie möglich bewusst zu machen. – StephenKing

0

Try this:

not_if { Dir.entries("/home/user/dir1/").select {|entry| ::File.join("home","user","dir1",entry) and !(entry =='.' || entry == '..') }.empty? } 
Verwandte Themen