Spec-Zone.ru › Chef 17

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

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

Страница всех ресурсов Infra


Используйте ресурс 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, связанному со службой. Используйте init_command для предотвращения необходимости указания переопределений для свойств start_command, stop_command, и restart_command. Если это свойство не указано, Chef Infra Client будет использовать команду init по умолчанию для используемого поставщика услуг.

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] } задаст приоритет 20 для уровня запуска 2 и приоритет 55 для уровня запуска 3.

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, скрипт init или другой поставщик услуг могут использовать команду перезапуска; если :restart не указан, Chef Infra Client пытается остановить, а затем запустить службу. Для :reload, скрипт init или другой поставщик услуг могут использовать команду перезагрузки. Для :status, скрипт init или другой поставщик услуг могут использовать команду состояния для определения, работает ли служба; если :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 Infra Client.

Уведомления

notifies

Тип Ruby: Символ, 'Chef::Resource[Строка]'

Ресурс может уведомить другой ресурс о выполнении действия при изменении его состояния. Укажите '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[Строка]'

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

Обратите внимание, что 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 вместе, чтобы гарантировать, что узел, работающий на Amazon EC2, запускает MySQL. Этот пример делает следующее:

  • Проверяет, есть ли на узле Amazon EC2 MySQL
  • Если на узле есть 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

© 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