Chef-도서관
Chef의 라이브러리는 쿡북 레시피가 깔끔하고 깔끔하게 유지되도록 컴파일 된 로직을 캡슐화하는 장소를 제공합니다.
라이브러리 생성
Step 1 − 요리 책 라이브러리에 도우미 메서드를 생성합니다.
vipin@laptop:~/chef-repo $ subl cookbooks/my_cookbook/libraries/ipaddress.rb
class Chef::Recipe
def netmask(ipaddress)
IPAddress(ipaddress).netmask
end
end
Step 2 − 도우미 방법을 사용합니다.
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 − 수정 된 쿡북을 Chef 서버에 업로드합니다.
vipin@laptop:~/chef-repo $ knife cookbook upload my_cookbook
Uploading my_cookbook [0.1.0]
라이브러리 테스트
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...
작업 방법
Chef 라이브러리 코드는 chef :: Recipe 클래스를 열고 1 단계에서 수행 한대로 새 메서드를 추가 할 수 있습니다.이 단계는 가장 깔끔하지는 않지만 가장 간단한 방법입니다.
class Chef::Recipe
def netmask(ipaddress)
...
end
end
모범 사례
chef :: recipe 클래스를 열면 오염되는 변경 사항이 있습니다. 모범 사례로서 라이브러리 내에 새 하위 클래스를 도입하고 메서드를 클래스 메서드로 정의하는 것이 항상 더 좋은 방법입니다. 이렇게하면 chef :: recipe 네임 스페이스를 가져 오지 않습니다.
vipin@laptop:~/chef-repo $ subl cookbooks/my_cookbook/libraries/ipaddress.rb
class Chef::Recipe::IPAddress
def self.netmask(ipaddress)
IPAddress(ipaddress).netmask
end
end
레시피 내에서 다음과 같은 방법을 사용할 수 있습니다.
IPAddress.netmask(ip)