- PVSM.RU - https://www.pvsm.ru -
Привет-привет, читатель! Все еще с нами? CHEF – это интересно! Продолжим наш вояж к мастерству воина-автоматизатора, который начался в первой части [1] данной статьи. В этой статье речь пойдет о первом опыте написания cookbook-а, о рецептах, атрибутах и шаблонах.
Прежде чем идти дальше, маленькое отступление по поводу инфраструктуры. В дальнейшем нам понадобиться пара компьютеров или виртуальных машин. Конечно же, есть VirtualBox, есть Vagrant, но я настоятельно советую использовать Amazon Web Services (AWS). Основная причина – AWS повсеместно используется разными компаниями, и знакомство с ним – дополнительный бонус Вам же. Есть бесплатные образы на нем, которые каждый может использовать. Существует большое количество разных сервисов и инструментов, которые предлагает Amazon. Некоторые из них — крайне актуальны. Я считаю, что данный опыт — must-have experience.
Добро пожаловать на кухню! В наших руках находится самый главный и незаменимый инструмент – knife!
Что мы будем готовить? Конечно же наш первый рецепт, и дабы не забыть его и использовать его в будущем – запишем его в наш cookbook. Именно в этом нам поможет knife, который умеет создавать cookbook-и. Конечно же можно воссоздать структуру cookbook-а вручную, но зачем? Лучше познакомиться с корректной структурой стандартного cookbook-а.
В создании нам поможет директива knife cookbook create. Она создаст в директории /cookbooks (указать ее местоположение можно указать в файле конфигурации knife.rb) папку с нашим первым cookbook-ом. Давайте ознакомимся с основным содержимым данной папки.
template “/path/to/file/on/our/node.cmd” do
source “node.erb”
end
Также, есть возможность задать, например, права доступа, владельца и группу владельцев этого файла. В этом конкретном случае на узле создастся файл cmd с указанным абсолютным путем, шаблоном которого является файл node.erb. Этот шаблон может быть набором команд, которые необходимо запустить на узле через командную строку. А может также содержать какие-то переменные и логику. Переменные в шаблоне могут быть, например, атрибутами Вашего cookbook-а, придавая шаблону упомянутую динамичность. Выглядит это так:
<%= node['sql_server']['product_key'] %>
,
и является объявлением атрибута (ключа SQL сервера), присутствующего в cookbook-е. Также, стоит отметить, что, как и имена файлов в директории /files, имена шаблонов имеют такое же свойство имени, а именно описывают соответствие шаблона конкретной ОС и версии, либо FQDN узла.
r = chef_gem «mail» do
action :install
end
Gem.clear_paths
require 'mail'
options = {
:address => new_resource.server,
:port => new_resource.port,
:mailto => new_resource.mailto,
:user_name => new_resource.user_name,
:password => new_resource.password,
:authentication => 'plain',
:enable_starttls_auto => true
}
Mail.defaults do
delivery_method :smtp, options
end
mail = Mail.deliver do
from options[:user_name]
to options[:mailto]
subject 'Hello'
body new_resource.msg
end
end
attribute :app_name, :kind_of => String
attribute :user_name, :kind_of => String, :default => ""
attribute :password, :kind_of => String, :default => ""
attribute :server, :kind_of => String, :default => ""
attribute :port, :kind_of => Integer, :default => 465
attribute :mailto, :kind_of => [String, NilClass], :default => ""
attribute :from, :kind_of => [String, NilClass], :default => ""
attribute :msg, :kind_of => String, :default => «Hi there»
def initialize(*args)
super
@ action = :create
End
Я думаю, достаточно очевидно, даже для тех, кто не встречался с синтаксисом Ruby, что описано в данном файле. Это функция отправки письма по электронной почте. В следующей части – мы познакомимся с cookbook-ом, который использует LWRP для отправки сообщений об изменениях в системе.
Ну что ж, давайте представим себе, что наш cookbook уже готов (я предоставлю его пример и опишу использование в следующей части).
Что делать дальше? Как загрузить его на сервер и отправить на исполнение узлами? Knife сделает это за нас. Для того, чтобы успешно провести дальнейшие операции, нам необходимо, чтобы Chef-админ имел верно сконфигурированный knife (файл knife.rb) и сертификат администратора (например, admin.pem). Далее, необходимо перейти в директорию /chef-repo (там, где находится наш starter kit, например) и, находясь в ней, исполнять команды.
Первое действие — удостоверится, что узлы зарегистрированы на сервере — knife node list
. В результате должны получить имена активных узлов.
Далее, загрузим наш cookbook на сервер. Он должен находится в директории, указанной в cookbook_path файла knife.rb.
Выполняем — knife cookbook upload name-of-cookbook
. В результате — сообщение об успешной загрузке и присутствие нашего cookbook-а в списке, полученном командой knife cookbook list
.
Следующий шаг — назначение run-list узла. Тут можно пойти 2 путями — простым или правильным.
Простой — сразу добавить в run-list рецепт — knife node edit name-of-node
и внести текстовые изменения в раздел run-list, добавляя туда строку «recipe[name-of-recipe]». А что, если таких рецептов десяток? Не очень удобно.
Правильный путь — добавить роль. Файл роли представляет собой описание атрибутов run-list. В том числе — и рецептов. Соответственно, одна роль может быть назначена множеству узлов. Файл роли находится по адресу /chef-repo/roles:
name «mailer»
description «Role for host that will notify us on changes»
run_list «recipe[name-of-recipe]»
Для того, чтоб загрузить роль на сервер, используется команда knife role from file name-of-role-file
. После загрузки — роль можно назначить в run-list узла, что мы и сделаем.
На этом нехитрый процесс закончен, мы готовы запускать клиента на узле. После этого — получим узел с (условно) реализованным на нем cookbook-ом.
На этом я буду заканчивать вторую часть и буду анонсировать третью — более технически-ориентированную (с большим количеством кода), которая расскажет о примере использование AWS и Chef.
Автор: MistiC
Источник [2]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/news/52932
Ссылки в тексте:
[1] первой части: http://habrahabr.ru/company/epam_systems/blog/208542
[2] Источник: http://habrahabr.ru/post/209368/
Нажмите здесь для печати.