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.