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.