Spec-Zone.ru › Chef 16

Ресурс службы

Эта страница сгенерирована из исходного кода Chef.Ссылка на исходный код Chef. Чтобы предложить изменение, отредактируйте файл service.rb и отправьте запрос на вытягивание в репозиторий Chef.

Страница справки по ресурсам


Используйте ресурс service для управления службой.

Синтаксис


Полный синтаксис всех свойств ресурса service:

service 'name' do
  init_command         String
  options              Array, String
  parameters           Hash
  pattern              String
  priority             Integer, String, Hash
  reload_command       String, false
  restart_command      String, false
  run_levels           Array
  service_name         String # default value: 'name' unless specified
  start_command        String, false
  status_command       String, false
  stop_command         String, false
  supports             Hash # default value: {"restart"=>nil, "reload"=>nil, "status"=>nil}
  timeout              Integer # default value: 900
  user                 String
  action               Symbol # defaults to :nothing if not specified
end

где:

  • service — это ресурс.
  • name — имя блока ресурса.
  • action определяет шаги, которые Chef Infra Client предпримет, чтобы привести узел в желаемое состояние.
  • init_command, options, parameters, pattern, priority, reload_command, restart_command, run_levels, service_name, start_command, status_command, stop_command, supports, timeout, и user — доступные для этого ресурса свойства.

Действия


Ресурс service имеет следующие действия:

:disable
Отключить службу. Это действие эквивалентно типу запуска Disabled на платформе Microsoft Windows. Это действие не поддерживается при использовании System Resource Controller (SRC) на платформе AIX, так как System Resource Controller (SRC) не имеет стандартного механизма для включения и отключения служб при загрузке системы.
:enable
Включить службу при загрузке. Это действие эквивалентно типу запуска Automatic на платформе Microsoft Windows. Это действие не поддерживается при использовании System Resource Controller (SRC) на платформе AIX, так как System Resource Controller (SRC) не имеет стандартного механизма для включения и отключения служб при загрузке системы.
:nothing
Этот блок ресурса не действует, пока не будет уведомлен другим ресурсом о действии. После уведомления этот блок ресурса либо выполняется немедленно, либо помещается в очередь для выполнения в конце выполнения Chef Infra Client.
:reload
Перезагрузить конфигурацию этой службы.
:restart
Перезапустить службу.
:start
Запустить службу и поддерживать ее работу до остановки или отключения.
:stop
Остановить службу.

Свойства


Ресурс service имеет следующие свойства:

init_command
Тип в Ruby: Строка

Путь к скрипту инициализации, связанному со службой. Используйте init_command для предотвращения необходимости указывать переопределения для свойств start_command, stop_command, и restart_command. Если это свойство не указано, Chef Infra Client будет использовать команду инициализации по умолчанию для используемого поставщика служб.

options
Тип в Ruby: Массив, Строка

Только для платформы Solaris. Параметры для передачи команде службы. Подробнее см. в руководстве svcadm.

parameters
Тип в Ruby: Словарь

Только для Upstart: Словарь параметров для передачи команде службы для использования в определении службы.

pattern
Тип в Ruby: Строка | Значение по умолчанию: The value provided to 'service_name' or the resource block's name

Шаблон для поиска в таблице процессов.

priority
Тип в Ruby: Целое число, Строка, Словарь

Только для платформы Debian. Относительный приоритет программы для порядка запуска и завершения. Может быть целым числом или словарем. Целое число используется для определения уровней запуска; уровни остановки — тогда 100-число. Словарь используется для определения значений для конкретных уровней выполнения. Например, { 2 => [:start, 20], 3 => [:stop, 55] } установит приоритет двадцать для уровня выполнения два и приоритет пятьдесят пять для уровня выполнения три.

reload_command
Тип в Ruby: Строка, false

Команда для перезагрузки конфигурации службы.

restart_command
Тип в Ruby: Строка, false

Команда для перезапуска службы.

run_levels
Тип в Ruby: Массив

Только для платформ RHEL: Конкретные уровни запуска, на которых будет работать служба.

service_name
Тип в Ruby: Строка | Значение по умолчанию: The resource block's name

Необязательное свойство для установки имени службы, если оно отличается от имени блока ресурса.

start_command
Тип в Ruby: Строка, false

Команда для запуска службы.

status_command
Тип в Ruby: Строка, false

Команда для проверки статуса выполнения службы.

stop_command
Тип в Ruby: Строка, false

Команда для остановки службы.

supports
Тип в Ruby: Словарь | Значение по умолчанию: {"restart" => nil, "reload" => nil, "status" => nil}

Список свойств, которые управляют тем, как Chef Infra Client пытается управлять службой: :restart, :reload, :status. Для :restart, скрипт инициализации или другой поставщик служб могут использовать команду перезапуска; если :restart не указано, Chef Infra Client пытается остановить, а затем запустить службу. Для :reload, скрипт инициализации или другой поставщик служб могут использовать команду перезагрузки. Для :status, скрипт инициализации или другой поставщик служб могут использовать команду статуса для определения того, работает ли служба; если :status не указано, Chef Infra Client пытается сопоставить service_name с таблицей процессов как регулярное выражение, если шаблон не указан как свойство параметра. Значение по умолчанию: { restart: false, reload: false, status: false } для всех платформ (за исключением семейства платформ Red Hat, для которых значение по умолчанию — { restart: false, reload: false, status: true }).

timeout
Тип в Ruby: Целое число | Значение по умолчанию: 900

Время ожидания (в секундах) до истечения времени ожидания.

user
Тип в Ruby: Строка

Только systemd: Имя пользователя для запуска службы.

Новое в Chef Client 12.21


Общие функциональные возможности ресурсов


Ресурсы Chef включают общие свойства, уведомления и защитные механизмы ресурсов.

Общие свойства

Следующие свойства являются общими для всех ресурсов:

compile_time

Тип в Ruby: true, false | Значение по умолчанию: false

Управляет фазой, во время которой ресурс выполняется на узле. Установите в значение true для выполнения во время построения коллекции ресурсов (фаза compile phase). Установите в значение false для выполнения во время настройки узла Chef Infra Client (фаза converge phase).

ignore_failure

Тип в Ruby: true, false, :quiet | Значение по умолчанию: false

Продолжить выполнение рецепта, если ресурс потерпит неудачу по любой причине. :quiet не будет отображать полный стек отладки, и рецепт будет продолжен, если ресурс потерпит неудачу.

retries

Тип в Ruby: Целое число | Значение по умолчанию: 0

Количество попыток перехватить исключения и повторить ресурс.

retry_delay

Тип в Ruby: Целое число | Значение по умолчанию: 2

Задержка повторной попытки (в секундах).

sensitive

Тип в Ruby: true, false | Значение по умолчанию: false

Обеспечить, чтобы конфиденциальные данные ресурсов не регистрировались Chef InfraClient.

Уведомления

notifies

Тип в Ruby: Символ, 'Chef::Resource[String]'

Ресурс может уведомить другой ресурс о действии при изменении его состояния. Укажите 'resource[name]', :action которое должен выполнить ресурс, а затем :timer для этого действия. Ресурс может уведомлять более одного ресурса; для каждого уведомляемого ресурса используйте инструкцию notifies.

Если указанный ресурс не существует, возникает ошибка. В отличие от этого, subscribes не будет вызывать ошибку, если исходный ресурс не найден.

Таймер определяет момент во время выполнения Chef Infra Client, когда выполняется уведомление. Доступны следующие таймеры:

:before

Указывает, что действие по уведомлённому ресурсу должно быть выполнено до обработки блока ресурса, в котором расположено уведомление.

:delayed

По умолчанию. Указывает, что уведомление должно быть помещено в очередь и выполнено в конце выполнения Chef Infra Client.

:immediate, :immediately

Указывает, что уведомление должно быть выполнено немедленно для каждого уведомлённого ресурса.

Синтаксис для notifies:

notifies :action, 'resource[name]', :timer
subscribes

Тип в Ruby: Символ, 'Chef::Resource[String]'

Ресурс может прослушивать другой ресурс и выполнять действие, если состояние прослушиваемого ресурса изменится. Укажите 'resource[name]', :action действие, которое нужно выполнить, а затем :timer для этого действия.

Обратите внимание, что subscribes не применяет указанное действие к ресурсу, за которым он следит — например:

file '/etc/nginx/ssl/example.crt' do
  mode '0600'
  owner 'root'
end

service 'nginx' do
  subscribes :reload, 'file[/etc/nginx/ssl/example.crt]', :immediately
end

В этом случае свойство subscribes перезагружает службу nginx всякий раз, когда файл сертификата, расположенный в /etc/nginx/ssl/example.crt, обновляется. subscribes не вносит никаких изменений в сам файл сертификата, он просто следит за изменениями в файле и выполняет действие :reload для своего ресурса (в этом примере nginx ) при обнаружении изменения.

Если другого ресурса не существует, подписка не будет генерировать ошибку. Противопоставьте это более строгим семантикам notifies, которые будут генерировать ошибку, если другого ресурса не существует.

Таймер определяет момент во время выполнения Chef Infra Client, в который выполняется уведомление. Доступны следующие таймеры:

:before

Указывает, что действие над уведомлённым ресурсом должно выполняться до обработки блока ресурса, в котором находится уведомление.

:delayed

По умолчанию. Указывает, что уведомление должно быть помещено в очередь и затем выполнено в конце выполнения Chef Infra Client.

:immediate, :immediately

Указывает, что уведомление должно выполняться немедленно для каждого уведомлённого ресурса.

Синтаксис для subscribes:

subscribes :action, 'resource[name]', :timer

Защиты

Свойство защиты может использоваться для оценки состояния узла во время фазы выполнения Chef Infra Client. Основываясь на результатах этой оценки, свойство защиты затем используется, чтобы сказать Chef Infra Client, следует ли продолжить выполнение ресурса. Свойство защиты принимает либо строковое значение, либо значение блока Ruby:

  • Строка выполняется как команда оболочки. Если команда возвращает 0, защита применяется. Если команда возвращает любое другое значение, то свойство защиты не применяется. Строковые защиты в powershell_script выполняют команды Windows PowerShell и могут возвращать true помимо 0.
  • Блок выполняется как код Ruby, который должен вернуть либо true или false. Если блок возвращает true, свойство защиты применяется. Если блок возвращает false, свойство защиты не применяется.

Свойство защиты полезно для обеспечения идемпотентности ресурса, позволяя этому ресурсу проверить желаемое состояние по мере его выполнения, а затем, если желаемое состояние присутствует, Chef Infra Client ничего не делает.

Свойства

Следующие свойства могут быть использованы для определения защиты, которая оценивается во время фазы выполнения Chef Infra Client:

not_if

Предотвратить выполнение ресурса, когда условие возвращает true.

only_if

Разрешить выполнение ресурса только в том случае, если условие возвращает true.

Примеры


Следующие примеры демонстрируют различные подходы к использованию ресурса service в рецептах:

Запуск службы

service 'example_service' do
  action :start
end

Запуск службы, включение её

service 'example_service' do
  supports status: true, restart: true, reload: true
  action [ :enable, :start ]
end

Использование шаблона

service 'samba' do
  pattern 'smbd'
  action [:enable, :start]
end

Использование общего действия :nothing

service 'memcached' do
  action :nothing
end

Использование общего атрибута retries

service 'apache' do
  action [ :enable, :start ]
  retries 3
end

Управление службой в зависимости от платформы узла

service 'example_service' do
  if redhat?
    service_name 'redhat_name'
  else
    service_name 'other_name'
  end
  supports restart: true
  action [ :enable, :start ]
end

Перезагрузка службы с использованием шаблона

Для перезагрузки службы, основанной на шаблоне, используйте ресурсы template и service вместе в одном рецепте, аналогично следующему:

template '/tmp/somefile' do
  mode '0755'
  source 'somefile.erb'
end

service 'apache' do
  action :enable
  subscribes :reload, 'template[/tmp/somefile]', :immediately
end

где уведомление subscribes используется для перезагрузки службы всякий раз, когда шаблон изменяется.

Включение службы после перезапуска или перезагрузки

service 'apache' do
  supports restart: true, reload: true
  action :enable
end

Установка IP-адреса с использованием переменных и шаблона

Следующий пример демонстрирует, как ресурс template может быть использован в рецепте для объединения настроек, хранящихся в файле атрибутов, переменных в рецепте и шаблона для установки IP-адресов, используемых службой Nginx. Файл атрибутов содержит следующее:

default['nginx']['dir'] = '/etc/nginx'

Затем рецепт выполняет следующее:

  • Объявляет две переменные в начале рецепта, одну для удалённого IP-адреса и другую для авторизованного IP-адреса
  • Использует ресурс service для перезапуска и перезагрузки службы Nginx
  • Загружает шаблон с именем authorized_ip.erb из каталога /templates, который используется для установки значений IP-адресов на основе переменных, указанных в рецепте
node.default['nginx']['remote_ip_var'] = 'remote_addr'
node.default['nginx']['authorized_ips'] = ['127.0.0.1/32']

service 'nginx' do
  supports :status => true, :restart => true, :reload => true
end

template 'authorized_ip' do
  path "#{node['nginx']['dir']}/authorized_ip"
  source 'modules/authorized_ip.erb'
  owner 'root'
  group 'root'
  mode '0755'
  variables(
    :remote_ip_var => node['nginx']['remote_ip_var'],
    :authorized_ips => node['nginx']['authorized_ips']
  )

  notifies :reload, 'service[nginx]', :immediately
end

где свойство variables сообщает шаблону использовать переменные, заданные в начале рецепта, а свойство source используется для вызова файла шаблона, расположенного в каталоге кулинарной книги /templates. Файл шаблона выглядит примерно так:

geo $<%= @remote_ip_var %> $authorized_ip {
  default no;
  <% @authorized_ips.each do |ip| %>
  <%= "#{ip} yes;" %>
  <% end %>
}

Использование таймера cron для управления службой

Следующий пример демонстрирует, как установить приложение crond с помощью двух ресурсов и переменной:

# the following code sample comes from the ``cron`` cookbook:
# https://github.com/chef-cookbooks/cron

cron_package = case node['platform']
  when 'redhat', 'centos', 'scientific', 'fedora', 'amazon'
    node['platform_version'].to_f >= 6.0 ? 'cronie' : 'vixie-cron'
  else
    'cron'
  end

package cron_package do
  action :install
end

service 'crond' do
  case node['platform']
  when 'redhat', 'centos', 'scientific', 'fedora', 'amazon'
    service_name 'crond'
  when 'debian', 'ubuntu', 'suse'
    service_name 'cron'
  end
  action [:start, :enable]
end

где

  • cron_package - переменная, которая используется для идентификации платформ, применяемых к пакетам установки
  • ресурс package использует переменную cron_package для определения того, как установить приложение crond на различных узлах (с различными платформами)
  • ресурс service включает приложение crond на узлах, на которых установлены Red Hat, CentOS, Red Hat Enterprise Linux, Fedora или Amazon Web Services (AWS), и службу cron на узлах, работающих под Debian, Ubuntu или openSUSE

Перезапуск службы и затем уведомление о другой службе

Следующий пример демонстрирует, как запустить службу с именем example_service и немедленно уведомить службу Nginx о перезапуске.

service 'example_service' do
  action :start
  notifies :restart, 'service[nginx]', :immediately
end

Перезапуск одной службы перед перезапуском другой

В этом примере используется уведомление :before для перезапуска службы php-fpm перед перезапуском nginx:

service 'nginx' do
  action :restart
  notifies :restart, 'service[php-fpm]', :before
end

С уведомлением :before, действие, указанное для ресурса nginx, не будет выполнено до тех пор, пока не будет выполнено действие с уведомлённым ресурсом (php-fpm).

Остановка службы, выполнение действий и её перезапуск

Следующий пример демонстрирует, как использовать ресурсы execute, service и mount вместе для обеспечения работы MySQL на узле Amazon EC2. Этот пример делает следующее:

  • Проверяет наличие MySQL на узле Amazon EC2
  • Если MySQL есть, останавливает MySQL
  • Устанавливает MySQL
  • Подключается к узлу
  • Перезапускает MySQL
# the following code sample comes from the ``server_ec2``
# recipe in the following cookbook:
# https://github.com/chef-cookbooks/mysql

if (node.attribute?('ec2') && ! FileTest.directory?(node['mysql']['ec2_path']))

  service 'mysql' do
    action :stop
  end

  execute 'install-mysql' do
    command "mv #{node['mysql']['data_dir']}#{node['mysql']['ec2_path']}"
    not_if do FileTest.directory?(node['mysql']['ec2_path']) end
  end

  [node['mysql']['ec2_path'], node['mysql']['data_dir']].each do |dir|
    directory dir do
      owner 'mysql'
      group 'mysql'
    end
  end

  mount node['mysql']['data_dir'] do
    device node['mysql']['ec2_path']
    fstype 'none'
    options 'bind,rw'
    action [:mount, :enable]
  end

  service 'mysql' do
    action :start
  end

end

где

  • два ресурса service используются для остановки и затем перезапуска службы MySQL
  • ресурс execute используется для установки MySQL
  • ресурс mount используется для подключения к узлу и активации MySQL

Управление службой с помощью ресурса execute

Предупреждение

Это пример того, что НЕ следует делать. Используйте ресурс service для управления службой, а не ресурс execute.

Сделайте так:

service 'tomcat' do
  action :start
end

а НЕ так:

execute 'start-tomcat' do
  command '/etc/init.d/tomcat6 start'
  action :run
end

Нет причины использовать ресурс execute для управления службой, потому что ресурс service напрямую предоставляет свойство start_command, которое даёт рецепту полный контроль над выпущенной командой более чистым и прямым способом.

Включение службы на AIX с помощью команды mkitab

Ресурс service не поддерживает использование действий :enable и :disable с ресурсами, управляемыми System Resource Controller (SRC). Это связано с тем, что System Resource Controller (SRC) не имеет стандартного механизма включения и выключения служб при загрузке системы.

Один из подходов к включению или выключению служб, управляемых System Resource Controller (SRC), заключается в использовании ресурса execute для вызова mkitab, а затем использование этой команды для включения или выключения службы.

Следующий пример демонстрирует, как установить службу:

execute "install #{node['chef_client']['svc_name']} in SRC" do
  command "mkssys -s #{node['chef_client']['svc_name']}                  -p #{node['chef_client']['bin']}                  -u root
                  -S
                  -n 15
                  -f 9
                  -o #{node['chef_client']['log_dir']}/client.log
                  -e #{node['chef_client']['log_dir']}/client.log -a '
                  -i #{node['chef_client']['interval']}                  -s #{node['chef_client']['splay']}'"
  not_if "lssrc -s #{node['chef_client']['svc_name']}"
  action :run
end

а затем включить её с помощью команды mkitab:

execute "enable #{node['chef_client']['svc_name']}" do
  command "mkitab '#{node['chef_client']['svc_name']}:2:once:/usr/bin/startsrc
                  -s #{node['chef_client']['svc_name']} > /dev/console 2>&1'"
  not_if "lsitab #{node['chef_client']['svc_name']}"
end
Ресурс service
  • Синтаксис
  • Действия
  • Свойства
  • Общие функциональные возможности ресурсов
    • Общие свойства
    • Уведомления
    • Защиты
  • Примеры

© Chef Software, Inc.
Licensed under the Creative Commons Attribution 3.0 Unported License.
The Chef™ Mark and Chef Logo are either registered trademarks/service marks or trademarks/servicemarks of Chef, in the United States and other countries and are used with Chef Inc's permission.
We are not affiliated with, endorsed or sponsored by Chef Inc.
https://docs.chef.io/resources/service/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API