Наша задача в этой части — установить пакет 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>
Заключение
Тут мы рассмотрели работу с пакетами и службами. Теперь у вас есть практические знания о работе с такими типами рерсов как file, package и 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.
