В Chef, если нужно создать простые рецепты, можно использовать ресурсы, доступные в Chef, такие как шаблоны, remote_file и сервисы. Однако по мере того, как рецепты становятся более сложными, нужны передовые методы, такие как условные операторы, для выполнения частей рецепта при условии. Это сила смешивания простого Ruby с языком специфики домена Chef (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>
Основные условия с шеф-поваром 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 и присвоить им значения.