Szef kuchni - Biblioteki
Biblioteki w Chef zapewniają miejsce do hermetyzacji skompilowanej logiki, dzięki czemu przepisy z książek kucharskich pozostają schludne i czyste.
Tworzenie biblioteki
Step 1 - Utwórz metodę pomocniczą w bibliotece książki kucharskiej.
vipin@laptop:~/chef-repo $ subl cookbooks/my_cookbook/libraries/ipaddress.rb
class Chef::Recipe
def netmask(ipaddress)
IPAddress(ipaddress).netmask
end
end
Step 2 - Użyj metody pomocniczej.
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 - Prześlij zmodyfikowaną książkę kucharską na serwer Chef.
vipin@laptop:~/chef-repo $ knife cookbook upload my_cookbook
Uploading my_cookbook [0.1.0]
Testowanie biblioteki
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...
Metoda pracy
Kod biblioteki Chef może otwierać klasę chef :: Recipe i dodawać nowe metody, tak jak w kroku 1. Ten krok nie jest najczystszym, ale najprostszym sposobem zrobienia tego.
class Chef::Recipe
def netmask(ipaddress)
...
end
end
Najlepsze praktyki
Gdy otworzymy klasę chef :: przepis, zachodzą zmiany, które powodują jej zanieczyszczenie. Najlepszą praktyką jest zawsze lepsze wprowadzenie nowej podklasy do biblioteki i zdefiniowanie metody jako metody klasowej. Pozwala to uniknąć ściągania przestrzeni nazw chef :: przepis.
vipin@laptop:~/chef-repo $ subl cookbooks/my_cookbook/libraries/ipaddress.rb
class Chef::Recipe::IPAddress
def self.netmask(ipaddress)
IPAddress(ipaddress).netmask
end
end
Możemy użyć metody wewnątrz przepisu
IPAddress.netmask(ip)