Chef-Chef DSL을 사용하는 Plain Ruby

Chef에서 간단한 레시피를 만들어야하는 경우 템플릿, remote_file 및 서비스와 같은 Chef에서 사용할 수있는 리소스를 사용할 수 있습니다. 그러나 레시피가 정교 해짐에 따라 조건에 따라 레시피의 일부를 실행하는 조건문과 같은 고급 기술이 필요합니다. 이것이 바로 일반 Ruby와 Chef Domain Specific Language (DSL)를 혼합 한 것입니다.

사용 방법?

Chef 서버에 액세스 할 수 있도록 클라이언트 모드의 노드에서 Chef Shell을 시작하십시오.

user@server:~$ sudo chef-shell --client 
loading configuration: /etc/chef/client.rb 
Session type: client 
...TRUNCATED OUTPUT... 
run `help' for help, `exit' or ^D to quit. 
Ohai2u user@server! 
Chef>

Chef DSL의 기본 조건

일반 Ruby를 사용하여 이름별로 노드를 정렬합니다.

chef > nodes.sort! {|a,b| a.name <=> b.name } 
=> [node[alice],node[server]]

노드를 반복하여 운영 체제를 인쇄합니다.

chef > nodes.each do |n| 
   chef > puts n['os'] 
   chef ?> 
end  
linux 
windows 
=> [node[server], node[alice]]

배열, 루프 및 문자열 확장을 사용하여 여러 Ruby gem을 설치하여 gem 이름을 구성합니다.

chef > %w{ec2 essentials}.each do |gem| 
   chef > gem_package "knife-#{gem}" 
   chef ?> end   => ["ec2", "essentials"]

작업 방법

Chef 레시피는 Ruby 파일이며 Chef 실행 컨텍스트에서 평가됩니다. 여기에는 리소스와 같은 Chef DSL 요소뿐만 아니라 if 문 및 루프와 같은 일반 Ruby 코드가 포함될 수 있습니다.

레시피 내에서 Ruby 변수를 선언하고 값을 할당 할 수 있습니다.