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 – управление пакетами и службами.