Chef - Skripte für Datentaschen

Unter bestimmten Umständen ist es nicht möglich, den Server unter die volle Kontrolle von Chef zu stellen. In solchen Fällen muss möglicherweise über Skripte auf Werte in Chef-Datentaschen zugegriffen werden. Dazu muss man Datenbeutelwerte in einer JSON-Datei speichern und das hinzugefügte Skript auf diese Werte zugreifen lassen.

Dafür braucht man ein Kochbuch. In unserem Fall würden wir test_cookbook wie zuvor verwenden und sollten die Ausführungsliste des Knotens einschließlich der Definition von test_cookbook enthalten.

Arbeitsmethode

Step 1 - Erstellen Sie eine Datentasche.

vipin@laptop:~/chef-repo $ mkdir data_bags/servers 
vipin@laptop:~/chef-repo $ knife data bag create servers 
Created data_bag[servers]

Step 2 - Erstellen Sie einen Datentaschenartikel.

vipin@laptop:~/chef-repo $ subl data_bags/servers/Storage.json { 
   "id": "storage", 
   "host": "10.0.0.12" 
}

Step 3 - Aktualisieren Sie den Datentaschenartikel.

vipin@laptop:~/chef-repo $ subl data_bags/servers/Storage.json { 
   "id": "storage", 
   "host": "10.0.0.12" 
}

Verwendung im Kochbuch

Step 1 - Sie müssen eine JSON-Datei mit Datenbeutelwerten mithilfe des obigen Kochbuchs erstellen, damit externe Skripts auf diese Werte zugreifen können.

vipin@laptop:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb 
file "/etc/backup_config.json" do 
   owner "root"
   group "root" 
   mode 0644 
   content data_bag_item('servers', 'backup')['host'].to_json 
end

Step 2 - Laden Sie test_cookbook auf den Chef-Server hoch.

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

Step 3 - Führen Sie den Chef-Client auf dem Knoten aus.

user@server:~$ sudo chef-client 
...TRUNCATED OUTPUT... 
[2013-03-14T20:30:33+00:00] INFO: Processing 
file[/etc/backup_config.json] action create 
(my_cookbook::default line 9) 
[2013-03-14T20:30:34+00:00] INFO: entered create 
[2013-03-14T20:30:34+00:00] INFO: 
file[/etc/backup_config.json] owner changed to 0 
[2013-03-14T20:30:34+00:00] INFO: 
file[/etc/backup_config.json] group changed to 0 
[2013-03-14T20:30:34+00:00] INFO: 
file[/etc/backup_config.json] mode changed to 644 
[2013-03-14T20:30:34+00:00] INFO: 
file[/etc/backup_config.json] created file 
/etc/backup_config.json 
...TRUNCATED OUTPUT...

Step 4 - Überprüfen des Inhalts der generierten JSON-Datei.

user@server:~$ cat /etc/backup_config.json 
"10.0.0.12"

Workflow von Skripten

Im obigen Befehl die Dateiressource, die wir verwendet haben und die eine JSON-Datei innerhalb der erstellt /etcVerzeichnis ist im Standardkochbuch definiert. Der Dateiinhalt wird mithilfe der Methode data_bag_item direkt aus dem Datentasche abgerufen. Wir greifen über das Data-Bag-Element auf die Host-Werte zu und konvertieren sie in JSON. Die Dateiressource verwendet die JSON-konvertierten Werte als Inhalt und schreibt sie auf die Festplatte.