Этот и последующие посты – краткий перевод с сайта 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 – управление пакетами и службами.