Chef - Обычный Ruby с Chef DSL

В Chef, если нужно создать простые рецепты, можно использовать ресурсы, доступные в Chef, такие как шаблоны, remote_file и службы. Однако по мере того, как рецепты становятся более сложными, необходимы продвинутые методы, такие как условные операторы для выполнения частей рецепта по условию. Это сила смешивания простого Ruby с Chef Domain Specific Language (DSL).

Как это использовать?

Запустите Chef Shell на любом из узлов в режиме клиента, чтобы иметь доступ к серверу Chef.

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, используя массив, цикл и расширение строки для создания имен драгоценных камней.

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

Метод работы

Рецепты Chef - это файлы Ruby, которые оцениваются в контексте выполнения Chef. Они могут содержать простой код Ruby, такой как оператор if и циклы, а также элементы Chef DSL, такие как ресурсы.

Внутри рецепта можно просто объявить переменные Ruby и присвоить им значения.