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 변수를 선언하고 값을 할당 할 수 있습니다.