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 и присвоить им значения.