Chef - Umgebungsvariable

Die Umgebungsvariable ist eine wichtige Methode, um das Chef-Rezept erfolgreich auf einem bestimmten Knoten auszuführen. Es gibt mehrere Möglichkeiten, dies entweder manuell einzurichten oder mithilfe eines Shell-Skripts zu verwenden. Hier müssen wir sie per Rezept einstellen.

Dazu benötigen wir ein Kochbuch. Wir würden test_cookbook und eine Ausführungsliste verwenden, die test_cookbook enthält.

Einstellen der Umgebungsvariablen mithilfe des Chef-Rezepts

Step 1 - Aktualisieren Sie das Standardrezept des Kochbuchs mit einer Umgebungsvariablen.

vipin@laptop:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb  
ENV['MESSAGE'] = 'Testing environment variable update with chef !'  
execute 'print value of environment variable $MESSAGE' do 
   command 'echo $MESSAGE > /tmp/message' 
end

Step 2 - Laden Sie das aktualisierte Kochbuch auf den Server hoch.

vipin@laptop:~/chef-repo $ knife cookbook upload test_cookbook 
Uploading my_cookbook [0.1.0]

Step 3 - Ausführen des Chef-Clients zum Erstellen einer temporären Datei.

user@server:~$ sudo chef-client 
...TRUNCATED OUTPUT... 
[2013-01-25T15:01:57+00:00] INFO: Processing execute[print 
value of environment variable $MESSAGE] action run 
(my_cookbook::default line 11) 
[2013-01-25T15:01:57+00:00] INFO: execute[print value of 
environment variable $MESSAGE] ran successfully 
...TRUNCATED OUTPUT...

Variable validieren

user@server:~$ cat /tmp/message 
Hello from Chef

Arbeitsmethode

Ruby macht die aktuelle Umgebungsvariable über ENV verfügbar –a Hash zum Lesen und Ändern der Umgebungsvariablen.

Ressource ausführen

Wir können die Ausführungsressource verwenden, um dasselbe im Standardrezept des Kochbuchs zu tun.

mma@laptop:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb  
execute 'print value of environment variable $MESSAGE' do 
   command 'echo $MESSAGE > /tmp/message' 
   environment 'MESSAGE' => 'Hello from the execute resource' 
end

Note- Durch Festlegen einer Umgebungsvariablen mit ENV wird diese Variable während des gesamten Chef-Laufs verfügbar. Wenn Sie es dagegen an die Ausführungsressource übergeben, wird es nur für diesen einen Befehl verfügbar, der von der Ressource ausgeführt wird.