2016-10-31 1 views
0

Ich verwende remote_file in einer for-Schleife, um Deployment-Dateien zu durchlaufen (angegeben in Knotenattributen). Ich überprüfe die gegebene Prüfsumme (sha256sum), um zu sehen, ob bereits existierende Dateien gleich sind oder nicht; wenn nicht, aktualisiere ich sie; Wenn es gleich ist, wird einfach übersprungen.So erkennen Sie eine Dateiaktualisierung, wenn Sie remote_file verwenden

Ich muss in dem Rezept wissen, ob eine Datei aktualisiert wurde oder nicht, so dass ich App-Server neu starten, falls eine Datei im Bereitstellungsverzeichnis geändert wird.

Gibt es ein Standardattribut, das ich verwenden kann (was sagt, dass alle Dateiupdates übersprungen wurden) oder alternativ, was ist der beste Ansatz dafür?

Danke,

node['app']['deployments'].each do |file, value| 
    remote_file "/apps/deployments/#{value['file-name']}" do 
     source "file:///tmp/deployments/#{value['file-name']}" 
     checksum value['check-sum'] 
    end 
end 

Antwort

2

das Konzept der notifications in Chef Es ist, was Sie in diesem Fall hilft:

node['app']['deployments'].each do |file, value| 
    remote_file "/apps/deployments/#{value['file-name']}" do 
     source "file:///tmp/deployments/#{value['file-name']}" 
     checksum value['check-sum'] 
     notifies :restart, 'service[appserver]' 
    end 
end 

service "appserver" 

Solange Sie nicht über einen :immediately Parameter notifies liefern Chef-Client wird alle Benachrichtigungen in Warteschlange stellen und sie ausführen (auch als Neustart des Dienstes) einmal am Ende des Kochs laufen.

+0

Danke, aber ich muss wissen, ob eine Datei aktualisiert wurde oder nicht und nur neu starten, wenn eine der Dateien aktualisiert wurde – hamdani

+0

Chef wird das automatisch tun. Wenn keine Datei aktualisiert wird, wird die Ressource 'service' niemals benachrichtigt. Wenn alle Dateien aktualisiert wurden, werden sie mehrmals benachrichtigt, aber am Ende nur einmal neu gestartet. – StephenKing

+0

Mit anderen Worten: Benachrichtigungen werden nur ausgelöst, wenn die Ressource aktualisiert wird (in Ihrem Fall ändert sich die Datei). – StephenKing

Verwandte Themen