Chef: часть 1 — установка, файл рецепта, ресурс

Автор: | 26/05/2015
 

pic-chef-logoЭтот и последующие посты — краткий перевод с сайта Learn Chef.

Установка Chef

Устанавливаем набор Chef Development Kit (ChefDK).

В данном примере установка выполняется на Debian 7 Wheezy.

На странце загрузок Chef выбираем нужную систему, в данном случае — Ubutntu:

# cd /tmp/ && wget https://opscode-omnibus-packages.s3.amazonaws.com/ubuntu/12.04/x86_64/chefdk_0.4.0-1_amd64.deb

Запускаем установку:

# dpkg -i chefdk_0.4.0-1_amd64.deb
Selecting previously unselected package chefdk.
(Reading database ... 44603 files and directories currently installed.)
Unpacking chefdk (from chefdk_0.4.0-1_amd64.deb) ...
Setting up chefdk (0.4.0-1) ...
Thank you for installing Chef Development Kit!

Рассмотрим работу с простым файлом.

Создание рецепта и описание ресурса

Создадим каталог для наших файлов рецептов (понятие «рецепт» мы обсудим позже):

$ mkdir ~/chef-repo
$ cd chef-repo/

Создаём первый файл рецепта hello.rb с таким содержимым:

file 'motd' do
  content 'hello world'
end

И выполняем команду chef-apply:

$ chef-apply hello.rb
Recipe: (chef-apply cookbook)::(chef-apply recipe)
  * file[motd] action create
    - create new file motd
    - update content in file motd from none to b94d27
    --- motd    2015-04-30 07:28:58.603156522 -0400
    +++ ./.motd20150430-2456-ty7iky     2015-04-30 07:28:58.603156522 -0400
    @@ -1 +1,2 @@
    +hello world

В результате — в текущей директории у нас появлися файл с именем motd и содержимым hello world:

$ cat motd
hello world

Если запустить chef-apply ещё раз — ничего не произойдёт, так как файл с необходимым текстом уже имеется:

$ chef-apply hello.rb
Recipe: (chef-apply cookbook)::(chef-apply recipe)
  * file[motd] action create (up to date)

Что бы обновить содержимое файла — измените текст в файле рецепта:

file 'motd' do
  content 'hello chef'
end

Запускаем chef-apply ещё раз:

$ chef-apply hello.rb
Recipe: (chef-apply cookbook)::(chef-apply recipe)
  * file[motd] action create
    - update content in file motd from b94d27 to c38c60
    --- motd    2015-04-30 07:28:58.603156522 -0400
    +++ ./.motd20150430-2744-7o1dkm     2015-04-30 07:35:54.919170692 -0400
    @@ -1,2 +1,2 @@
    -hello world
    +hello chef

Как видно из сообщения — содержимое файла изменилось:

$ cat motd
hello chef

Предположим — файл был изменён вручную кем-то:

$ echo 'hello robots' > motd
$ cat motd
hello robots

Если мы запустим chef-apply снова — он восстановит его содержимое:

$ chef-apply hello.rb
Recipe: (chef-apply cookbook)::(chef-apply recipe)
  * file[motd] action create
    - update content in file motd from 548078 to c38c60
    --- motd    2015-04-30 07:37:23.771174126 -0400
    +++ ./.motd20150430-2891-12hc9vv    2015-04-30 07:38:05.623172422 -0400
    @@ -1,2 +1,2 @@
    -hello robots
    +hello chef

Тепреь давайте удалим файл.

Создаём новый файл рецепта — goodbye.rb с таким содержимым:

file 'motd' do
  action :delete
end

Запускаем:

$ chef-apply goodbye.rb
Recipe: (chef-apply cookbook)::(chef-apply recipe)
  * file[motd] action delete
    - delete file motd

Проверяем:

$ cat motd
cat: motd: No such file or directory

Мы рассмотрели самые основы работы с Chef. Мы поработали с ресурсом — файлом motd. Ресурсы описывают над чем произвести действия — но не как их произвести. В файле рецепта hello.rb мы указали, что файл motd должен существовать и иметь какой-то текст.

Для ресурса мы так же указали действие (action) — например, действие :delete. Каждый ресурс в Chef имеет определённое действие по умолчанию, например — создание файла, установка пакета, запуск сервиса. Когда мы создавали файл — мы не указывали явно действие :create, так как оно является действием по умолчанию. Для каждого типа ресурса его действие по умолчанию описывается в документации, например — для ресурса file действия описаны тут>>>.

Рецепт описывает ресурсы.

Файл hello.rb является простым примером рецепта — упорядоченным списком состояний. Как правило — рецепт содержит связанные состояния и ресурсы, например — всё, что необходимо для установки веб-сервера.

Продолжение — Chef: часть 2 – управление пакетами и службами.