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

Автор: | 01/06/2015
 

pic-chef-logoПредыдущая часть.

Наша задача в этой части – установить пакет Apache HTTP Server и его службу.

Как и файлы – пакеты и службы так же являются ресурсами Chef.

Установка пакета

В каталоге ~/chef-repo создайте файл с именем webserver.rb с таким содержимым:

package 'apache2'

Мы не указываем тут никакого действия, так как :install является действием по умолчанию.

Теперь – запускаем выполнение:

$ sudo chef-apply chef-repo/webserver.rb
Recipe: (chef-apply cookbook)::(chef-apply recipe)
  * apt_package[apache2] action install
    - install version 2.2.22-13+deb7u4 of package apache2

Если запустить его ещё раз – ничего не произойдёт, так как Apache уже установлен:

$ sudo chef-apply chef-repo/webserver.rb
Recipe: (chef-apply cookbook)::(chef-apply recipe)
  * apt_package[apache2] action install (up to date)

Управление службой

Теперь – давайте добавим автозапуск нового сервиса после установки.

Примечание: в Debian Apache уже добавлен в автозапуск, поэтому – удалим его:

# update-rc.d -f apache2 remove

И остановим службу:

# service apache2 stop

Возвращаемся к файлу Chef.

Отредактируйте файл webserver.rb:

package 'apache2'

service 'apache2' do
  action [:enable, :start]
end

И примените изменения:

$ sudo chef-apply chef-repo/webserver.rb
Recipe: (chef-apply cookbook)::(chef-apply recipe)
 * apt_package[apache2] action install (up to date)
 * service[apache2] action enable
 - enable service service[apache2]
 * service[apache2] action start
 - start service service[apache2]

Так как пакет уже установлен – то этот шаг остаётся без изменений. Вторым шагом – он добавляет в автозапуск, и третьим – запускается:

# service apache2 status
Apache2 is running (pid 4873).

Связанные файлы

Теперь – давайте добавим создание файла index.html.

Мы уже рассматривали работу с файлами в предыдущей части, применим эти знания тут.

В файле webserver.rb добавим создание странички /var/www/index.html:

package 'apache2'

service 'apache2' do
  action [:enable, :start]
end

file '/var/www/index.html' do
  content '<html>
  <body>
    <h1>hello world</h1>
  </body>
</html>'
end

Применяем изменения:

$ sudo chef-apply chef-repo/webserver.rb
Recipe: (chef-apply cookbook)::(chef-apply recipe)
  * apt_package[apache2] action install (up to date)
  * service[apache2] action enable (up to date)
  * service[apache2] action start (up to date)
  * file[/var/www/index.html] action create
    - create new file /var/www/index.html
    - update content in file /var/www/index.html from none to 2914aa
    --- /var/www/index.html     2015-05-24 05:04:02.896350297 -0400
    +++ /var/www/.index.html20150524-5117-myw7rd        2015-05-24 05:04:02.896350297 -0400
    @@ -1 +1,6 @@
    +<html>
    +  <body>
    +    <h1>hello world</h1>
    +  </body>
    +</html>

Файл создан:

$ file /var/www/index.html
/var/www/index.html: HTML document, ASCII text

Открываем доступ к серверу

В CentOS по умолчанию IPTABLES позволяет получить доступ к серверу только по SSH. Хотя в данном примере у нас Debian – давайте продемонистрируем как можно его отключить.

Примечание: в Debian нет скриптов управления IPTABLES, поэтому – установим утилиту ufw:

# aptitude install ufw
# ufw status
Status: inactive

Мы не будем сейчас добавлять или изменять правила – а просто выключим фаервол:

package 'apache2'

service 'apache2' do
  action [:enable, :start]
end

file '/var/www/index.html' do
  content '<html>
  <body>
    <h1>hello world</h1>
  </body>
</html>'
end

service 'ufw' do
  action :disable
end

Запускаем:

$ sudo chef-apply chef-repo/webserver.rb
Recipe: (chef-apply cookbook)::(chef-apply recipe)
  * apt_package[apache2] action install (up to date)
  * service[apache2] action enable (up to date)
  * service[apache2] action start (up to date)
  * file[/var/www/index.html] action create (up to date)
  * service[ufw] action disable
    - disable service service[ufw]

Проверяем работу сайта:

$ curl localhost
<html>
  <body>
    <h1>hello world</h1>
  </body>
</html>

Заключение

Тут мы рассмотрели работу с пакетами и службами. Теперь у вас есть практические знания о работе с такими типами рерсов как filepackage и service.

Вы так же узнали как выполнять несколько действий. Однако – как именно Chef обрабатывает список действий?

Давайте ещё раз посомтрим на наш файл рецепта:

package 'apache2'

service 'apache2' do
  action [:enable, :start]
end

file '/var/www/index.html' do
  content '<html>
  <body>
    <h1>hello world</h1>
  </body>
</html>'
end

service 'ufw' do
  action :disable
end

Ресурсы применяются в том порядке, в котором они перечислены в рецепте. Сначала устанавливается пакет, затем настраивается служба, после чего создаётся домашняя страница и в конце-концов – выключается IPTABLES. Если какой-то ресурс уже находится в нужном состоянии – Chef просто переходит к следующему.

То же касается и действий в списках – [:enable, :start]. Сначала служба добавляет в автозапуск, после чего запускается. Поэтому важно продумывать порядок размещения ресурсов в вашем порядке – например, будет ошибкой указать запуск сервиса до того, как он будет установлен.

Продолжение – Chef: часть 3 — cookbooks.