Учебники

Шеф-повар — кросс-платформенный для поваренных книг

Кроссплатформенные кулинарные книги — это те кулинарные книги, которые используют базовую среду, в которой они будут работать. Chef предоставляет множество функций, которые помогают в написании кроссплатформенных кулинарных книг, способных работать в любой ОС, на которой он будет развернут. Это помогает разработчику написать полностью готовую кулинарную книгу.

Для этого нам нужна кулинарная книга. В нашем случае это будет test_cookbook и список запусков, в котором будет указано определение поваренной книги.

Метод работы

Получение сведений о платформе узлов и выполнение условной логики в нашей поваренной книге зависит от платформы. В нашем случае мы проверим его на Ubuntu.

Шаг 1 — Зарегистрируйте сообщение, если узлом является Ubuntu.

vipin@laptop:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb 
Log.info("Running on ubuntu") if node.platform['ubuntu'] 

Шаг 2 — Загрузите поваренную книгу на сервер Chef.

vipin@laptop:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb 
Uploading my_cookbook [0.1.0] 
Uploaded 1 cookbook. 

Шаг 3 — Запустите клиент Chef на узле.

user@server:~$ sudo chef-client 
...TRUNCATED OUTPUT... 
[2013-03-03T20:07:39+00:00] INFO: Running on Ubuntu 
...TRUNCATED OUTPUT...

В качестве альтернативы, если кто-то не заинтересован в конкретной платформе, а должен знать только, какая декларативная платформа используется, можно использовать следующее утверждение.

Log.info("Running on a debian derivative") if 
platform_family?('debian')

Загрузка модифицированной поваренной книги и запуск клиента Chef на узле Ubuntu покажет следующий результат.

[2013-03-03T20:16:14+00:00] INFO: Running on a debian 
derivative 

Рабочий процесс сценариев

В приведенной выше команде Ohai обнаружит текущее состояние операционной системы узла и сохранит его как атрибут платформы с объектом узла.

node['platform'] 

Или вы можете использовать синтаксис стиля метода —

node.platform 

Установка значений, специфичных для платформы

Чтобы установить специфические для платформы значения, chef предлагает удобные методы value_for_platform и value_for_platform_family. Их можно использовать, чтобы избежать сложного оператора case и вместо этого использовать простой хеш.

Пример кулинарной книги

execute "start-runsvdir" do 
   command value_for_platform( 
      "debian" => { "default" => "runsvdir-start" }, 
      "ubuntu" => { "default" => "start runsvdir" }, 
      "gentoo" => { "default" => "/etc/init.d/runit-start start" } 
   ) 
   action :nothing 
end 

В приведенном выше примере команда зависит от ОС, как определено.