Chef - Bibliotheken

In den Bibliotheken von Chef können Sie die kompilierte Logik zusammenfassen, damit die Kochbuchrezepte sauber und ordentlich bleiben.

Bibliothek erstellen

Step 1 - Erstellen Sie eine Hilfsmethode in der Bibliothek des Kochbuchs.

vipin@laptop:~/chef-repo $ subl cookbooks/my_cookbook/libraries/ipaddress.rb 
class Chef::Recipe 
def netmask(ipaddress) 
IPAddress(ipaddress).netmask 
end 
end

Step 2 - Verwenden Sie die Hilfsmethode.

vipin@laptop:~/chef-repo $ subl cookbooks/my_cookbook/recipes/default.rb 
ip = '10.10.0.0/24' 
mask = netmask(ip) # here we use the library method 
Chef::Log.info("Netmask of #{ip}: #{mask}")

Step 3 - Laden Sie das geänderte Kochbuch auf den Chef Server hoch.

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

Testen der Bibliothek

user@server $ sudo chef-client 
...TRUNCATED OUTPUT... 
[2013-01-18T14:38:26+00:00] INFO: Netmask of 10.10.0.0/24: 
255.255.255.0 
...TRUNCATED OUTPUT...

Arbeitsmethode

Der Code der Chefbibliothek kann die Klasse chef :: Recipe öffnen und neue Methoden hinzufügen, wie in Schritt 1 beschrieben. Dieser Schritt ist nicht der sauberste, aber der einfachste Weg, dies zu tun.

class Chef::Recipe 
def netmask(ipaddress) 
... 
end 
end

Empfohlene Vorgehensweise

Sobald wir die Chef :: Rezeptklasse öffnen, gibt es Änderungen, die verschmutzt werden. Als bewährte Methode ist es immer besser, eine neue Unterklasse in die Bibliothek einzuführen und eine Methode als Klassenmethode zu definieren. Dadurch wird vermieden, dass der Chef-Namespace von chef :: prescription abgerufen wird.

vipin@laptop:~/chef-repo $ subl cookbooks/my_cookbook/libraries/ipaddress.rb 
class Chef::Recipe::IPAddress 
def self.netmask(ipaddress) 
IPAddress(ipaddress).netmask 
end 
end

Wir können die Methode innerhalb des Rezepts wie verwenden

IPAddress.netmask(ip)