kitchen.yml
Используйте Test Kitchen для автоматического тестирования данных кулинарной книги (cookbook) на любой комбинации платформ и наборов тестов:
- Определяется в файле kitchen.yml
- Использует архитектуру плагинов драйверов
- Поддерживает тестирование кулинарных книг на многих платформах облачных провайдеров и виртуализации
- Поддерживает все распространённые фреймворки для тестирования, используемые сообществом Ruby
- Использует полную коллекцию базовых образов, предоставляемых Bento
Используйте файл kitchen.yml для определения необходимых действий для запуска Test Kitchen, включая драйвера, провайдеры, платформы и наборы тестов.
Примечание
Синтаксис
Основная структура файла kitchen.yml:
driver:name:driver_nameprovisioner:name:provisioner_nameverifier:name:verifier_nametransport:name:transport_nameplatforms:- name:platform-versiondriver:name:driver_name- name:platform-versionsuites:- name:suite_namerun_list:- recipe[cookbook_name::recipe_name]attributes:{foo:"bar"}excludes:- platform-version- name:suite_namedriver:name:driver_namerun_list:- recipe[cookbook_name::recipe_name]attributes:{foo:"bar"}includes:- platform-versionгде:
driver_name— имя драйвера, который будет использоваться для создания экземпляров платформ, используемых при тестировании кулинарной книги. Это драйвер по умолчанию для всех платформ и наборов тестов, кроме случаев, когда платформа или набор тестов указываетdriver, чтобы переопределить драйвер по умолчанию для этой платформы или набора тестов; драйвер, указанный для набора тестов, переопределяет драйвер, заданный для платформыprovisioner_nameопределяет, как будет имитироваться Chef Infra Client во время тестирования.chef_zeroиchef_solo— самые распространённые провайдеры, используемые для тестирования кулинарных книгverifier_nameуказывает приложение, которое следует использовать при запуске тестов, напримерinspectransport_nameуказывает транспорт, используемый при выполнении команд удалённо на тестовом экземпляре.winrm— транспорт по умолчанию для Windows.ssh— транспорт по умолчанию для всех остальных операционных систем.platform-version— имя платформы, на которой Test Kitchen будет выполнять тестирование кулинарных книг, например,ubuntu-16.04илиcentos-7; в зависимости от платформы могут потребоваться дополнительные сведения о драйвере, например, имена и URL-адреса экземпляров, используемые с облачными платформами, такими как OpenStack или Amazon EC2platformsможет определять атрибуты Chef Infra Server, общие для набора наборов тестов-
suites— набор наборов тестов, при этом каждыйsuite_nameгруппирует определения аспектов кулинарной книги, которые необходимо протестировать. Каждыйsuite_nameдолжен указывать список выполнения, например:run_list: - recipe[cookbook_name::default] - recipe[cookbook_name::recipe_name] В каждой
suite_nameгруппе можно указатьattributesв виде хэша:{ foo: "bar" }-
В
suite_nameгруппе можно использоватьexcludesиincludesдля исключения/включения одной (или нескольких) платформ. Например:excludes: - platform-version - platform-version # for additional platforms
Пример простого файла kitchen.yml:
driver:name:vagrantprovisioner:name:chef_zeroplatforms:- name:ubuntu-18.04- name:centos-8- name:debian-10suites:- name:defaultrun_list:- recipe[apache::httpd]excludes:- debian-10В этом файле используется Vagrant в качестве драйвера, что не требует дополнительной настройки, поскольку это драйвер по умолчанию, используемый Test Kitchen, chef-zero как провайдер и один (по умолчанию) набор тестов, который выполняется на Ubuntu 16.04 и CentOS 7.
Настройки провайдера
Test Kitchen может настроить провайдер chef-zero с помощью следующих установок, специфичных для Chef:
| Настройка | Описание |
|---|---|
attributes |
Атрибуты Chef для использования в наборе тестов |
chef_client_path |
Только провайдер Chef Infra Client. |
chef_metadata_url |
Это будет устаревшим в будущей версии. |
chef_omnibus_install_options |
Используйте для указания пакета для установки. Возможные значения: -P chef (для Chef Infra Client) и -P chef-workstation (для Chef Infra Client, входящего в состав Chef Workstation). Используйте -n для указания ночной сборки. Например: -P chef-workstation или -n -P chef-workstation. Это будет устаревшим в будущей версии. Используйте настройки product_name, product_version, и channel вместо этого. |
chef_omnibus_root |
Значение по умолчанию: /etc/opt для UNIX и Linux, $env:systemdrive\\opscode\\chef для Microsoft Windows. |
chef_omnibus_url |
URL скрипта install.sh, который установит Chef Infra Client на тестируемой машине. Значение по умолчанию: https://www.chef.io/chef/install.sh. Это будет устаревшим в будущей версии. |
chef_solo_path |
Только провайдер chef-solo. |
chef_zero_host |
Только провайдер Chef Infra Client. |
chef_zero_port |
Только провайдер Chef Infra Client. Порт, на котором должен слушать chef-zero. |
|
Только провайдер Chef Infra Client. Список настроек файла client.rb. Например: |
clients_path |
Относительный путь к каталогу, в котором расположены данные клиента. Эти данные должны быть определены как JSON. |
cookbook_files_glob |
Шаблон файла (glob), который соответствует файлам, рассматриваемым как часть кулинарной книги. (Как правило, это значение не нужно изменять по умолчанию.) |
data_path |
Используйте для указания пути, откуда не-кулинарные файлы копируются в экземпляр Kitchen. |
data_bags_path |
Относительный путь к каталогу, в котором определены пакеты данных и элементы пакетов данных. Эти данные должны быть структурированы так, как если бы они находились в chef-repo. |
deprecations_as_errors |
Установите в true, чтобы рассматривать предупреждения об устаревании как сообщения об ошибках. |
driver |
Используйте для указания драйвера для платформы. Это переопределит драйвер по умолчанию. |
enforce_idempotency |
Используйте с multiple_converge > 1. Установите в true, чтобы принудительно сделать Test-kitchen неудачным, если последний сбор имеет какие-либо обновленные ресурсы. |
encrypted_data_bag_secret_key_path |
Путь к файлу ключа RSA, который используется для дешифрования зашифрованных элементов пакетов данных. |
environments_path |
Относительный путь к каталогу, в котором расположены данные среды. Эти данные должны быть определены как JSON. |
http_proxy |
Прокси-сервер для HTTP-соединений. |
https_proxy |
Прокси-сервер для HTTPS-соединений. |
no_proxy |
Список шаблонов хостов, разделяемых запятыми, которые необходимо исключить из проксирования. |
install_msi_url |
Альтернативный URL для пакета MSI Windows, который установит Chef Infra Client на тестовой машине. Это будет устаревшим в будущей версии. Используйте настройку download_url вместо этого. |
json_attributes |
Только провайдер Chef Infra Client. |
log_file |
|
multiple_converge |
Количество раз для схождения узла. По умолчанию 1. |
nodes_path |
Относительный путь к каталогу, в котором находятся данные узла. Эти данные должны быть определены как JSON. |
require_chef_omnibus |
Используйте для установки последней версии Chef Infra Client на узле. Установите в true для установки последней версии, false для отказа от установки Chef Infra Client (предполагается, что в боксе он уже установлен), или указатель версии, например 15.3.12 для установки конкретной версии, или просто 15 для установки последнего пакета 15.x. При установке в true или номер версии, chef_omnibus_url можно использовать для указания URL install.sh, который устанавливает указанную версию Chef Infra Client. Значение по умолчанию: true. Это будет устаревшим в будущей версии. См. настройки product_version и install_strategy. |
roles_path |
Относительный путь к каталогу, в котором расположены данные роли. Эти данные должны быть определены как JSON. |
root_path |
Каталог, в котором Kitchen будет подготавливать весь контент на целевом узле. Этот каталог должен быть достаточно большим, чтобы хранить весь контент, и должен быть доступен для записи. (Как правило, это значение не нужно изменять по умолчанию). Значение по умолчанию: /tmp/kitchen. |
ruby_bindir |
Только провайдер Chef Infra Client. |
run_list |
|
solo_rb |
Только провайдер chef-solo. |
retry_on_exit_code |
Принимает массив кодов завершения, чтобы указать, что kitchen должен повторить команду схождения. Значение по умолчанию: [35, 213]. |
max_retries |
Количество попыток повторного выполнения схождения перед передачей состояния ошибки. Значение по умолчанию: 1. |
wait_for_retry |
Количество секунд ожидания между попытками схождения. Значение по умолчанию: 30. |
Эти настройки могут быть добавлены в раздел provisioner файла kitchen.yml, когда провайдер chef-zero или chef-solo.
Новые настройки провайдера
| Новое значение | Описание | По умолчанию | Заменяет |
|---|---|---|---|
product_name |
chef или chef-workstation. Это значение должно быть указано для использования новых настроек. Использование этого значения переопределяет поведение по умолчанию Test Kitchen, основанное на значении require_chef_omnibus. |
chef_omnibus_install_options |
|
product_version |
Номер версии продукта. Поддерживает частичные номера версий. | latest |
require_chef_omnibus |
channel |
Имя хранилища артефактов. stable, current или unstable. |
stable |
chef_omnibus_install_options |
install_strategy |
Стратегия установки продукта. once (не устанавливать, если обнаружена установка продукта), always или skip. |
once |
require_chef_omnibus |
download_url |
Прямой URL пакета. Поддерживает все платформы. | install_msi_url |
|
checksum |
Дополнительная настройка при использовании download_url. Проверяет контрольную сумму SHA256 после загрузки. |
||
platform |
Переопределить платформу. | <auto detected> | |
platform_version |
Переопределить платформу платформы. | <auto detected> | |
architecture |
Переопределить архитектуру платформы. | <auto detected> |
Настройки транспорта
Kitchen может настроить транспорт с помощью следующих настроек для транспорта ssh или winrm:
| Настройка | Описание |
|---|---|
connection_retries |
Максимальное количество попыток повторной попытки после неудачной попытки открытия подключения. По умолчанию 5. |
connection_retry_sleep |
Количество секунд ожидания до попытки создания другого подключения после сбоя. |
max_wait_until_ready |
Максимальное количество попыток определения, готов ли экземпляр теста принимать команды. По умолчанию 600. |
password |
Пароль, используемый для аутентификации на экземпляре теста. |
port |
Порт, используемый для подключения к экземпляру теста. По умолчанию 22 для транспорта ssh и 5985 или 5986 для winrm с использованием http или https соответственно. |
username |
Имя пользователя, используемое для аутентификации на экземпляре теста. По умолчанию administrator для транспорта winrm и root для транспорта ssh. Некоторые драйверы могут изменить это значение по умолчанию. |
Эти настройки можно добавить в раздел transport файла kitchen.yml, когда транспорт SSH:
| Настройка | Описание |
|---|---|
compression |
Использовать сжатие или нет. По умолчанию false. |
compression_level |
По умолчанию 6, если compression равно true. |
connection_timeout |
По умолчанию 15. |
keepalive |
По умолчанию true. |
keepalive_interval |
По умолчанию 60. |
max_ssh_sessions |
Максимальное количество параллельных сеансов SSH. |
ssh_key |
Путь к файлу-ключу ssh. |
Эти настройки можно добавить в раздел transport файла kitchen.yml, когда транспорт WinRM:
| Настройка | Описание |
|---|---|
elevated |
Если true, все команды выполняются через запланированную задачу. Это может устранить ошибки доступа «запрещено», связанные с двойной аутентификацией, взаимодействием с обновлениями Windows и установкой некоторых MSI, таких как SQL Server и .NET runtimes. По умолчанию false. |
elevated_password |
Пароль, используемый идентификатором, выполняющим запланированную задачу. В случае учетных записей службы это может быть null. По умолчанию password. |
elevated_username |
Идентификатор, под которым выполняется задача. Это также может быть установлено для учетных записей служб, таких как System. По умолчанию username. |
rdp_port |
Порт, используемый при создании подключений rdp для команд kitchen login. По умолчанию 3389. |
winrm_transport |
Тип транспорта, используемый Winrm, как описано здесь. По умолчанию negotiate. ssl и plaintext также являются допустимыми значениями. |
Работа с прокси-серверами
Переменные среды http_proxy, https_proxy, и ftp_proxy учитываются Test Kitchen для прокси-серверов. Файл client.rb читается для поиска настроек конфигурации прокси-сервера. Если http_proxy, https_proxy, и ftp_proxy указаны в файле client.rb, Chef Infra Client настраивает переменную ENV на основе этих (и связанных) настроек. Например:
http_proxy 'http://proxy.example.org:8080'
http_proxy_user 'myself'
http_proxy_pass 'Password1'
будет установлено как:
ENV['http_proxy'] = 'http://myself:Password1@proxy.example.org:8080'
Test Kitchen также поддерживает http_proxy и https_proxy в файле kitchen.yml. Вы можете установить их вручную или прочитать из локальных переменных среды:
driver:name:vagrantprovisioner:name:chef_zero# Set proxy settings manually, orhttp_proxy:'http://user:password@server:port'https_proxy:'http://user:password@server:port'# Read from local environment variableshttp_proxy:<%= ENV['http_proxy'] %>https_proxy:<%= ENV['https_proxy'] %>Это не установит переменные среды прокси для приложений, отличных от Chef. Плагин Vagrant, vagrant-proxyconf, можно использовать для установки переменных среды прокси для приложений внутри виртуальной машины.
Настройки Chef Infra Client
Файл kitchen.yml может определять настройки, специфичные для Chef Infra Client, такие как необходимость установки установщика Chef или URL, с которого загружается Chef Infra Client, или переопределение настроек в файле client.rb:
provisioner:name:chef_zero *or* chef_solorequire_chef_omnibus:truechef_omnibus_url:https://www.chef.io/chef/install.sh...suites:- name:configrun_list:...attributes:chef_client:load_gems:chef-handler-updated-resources:require_name:"chef/handler/updated_resources"config:log_level:":debug"ssl_verify_mode:":verify_peer"start_handlers:[{class:"SimpleReport::UpdatedResources", arguments:[]}]report_handlers:[{class:"SimpleReport::UpdatedResources", arguments:[]}]exception_handlers:[{class:"SimpleReport::UpdatedResources", arguments:[]}]ohai:disabled_plugins:["passwd"]где:
-
require_chef_omnibusиспользуется для обеспечения того, что установщик Chef будет использоваться для установки Chef Infra Client на все экземпляры платформы;require_chef_omnibusтакже можно установить вlatest, что означает, что будет использоваться последняя версия Chef Infra Client для данной платформы для тестирования кулинарных книг -
chef_omnibus_urlиспользуется для указания URL, с которого загружается Chef Infra Client - Все
attributesдля набора тестовconfigсодержат специфичные настройки client.rb для использования с этим набором тестов
Настройки драйвера
Возможно, потребуются настройки конфигурации, специфичные для драйвера. Используйте блок, похожий на:
driver:name:driver_nameoptional_settings:valuesМожно указать конкретные optional_settings: values.
Bento
Bento — проект Chef Software, который создает базовые тестовые виртуальные машины VirtualBox, Parallels и VMware для нескольких операционных систем для использования с Test Kitchen. По умолчанию Test Kitchen использует базовые образы, предоставленные Bento, хотя можно также создать пользовательские образы с помощью HashiCorp Packer.
Драйверы
Test Kitchen использует архитектуру плагинов драйвера, чтобы позволить Test Kitchen тестировать экземпляры на поставщиках облачных услуг, таких как Amazon EC2, Google Compute Engine и Microsoft Azure. Вы также можете тестировать на нескольких локальных гипервизорах, таких как VMware, Hyper-V или VirtualBox.
Примечание
Chef Workstation включает множество распространённых драйверов Test Kitchen.
У большинства драйверов есть настройки конфигурации, специфичные для драйвера, которые необходимо добавить в файл kitchen.yml, прежде чем Test Kitchen сможет использовать данную платформу во время тестирования кулинарных книг. Для получения информации о этих настройках, специфичных для драйвера, обратитесь к документации, специфичной для драйвера.
Некоторые популярные драйверы:
| Плагин драйвера | Описание |
|---|---|
| kitchen-azurerm | Драйвер для Microsoft Azure. |
| kitchen-cloudstack | Драйвер для CloudStack. |
| kitchen-digitalocean | Драйвер для DigitalOcean. Этот драйвер поставляется в Chef Workstation. |
| kitchen-dokken | Драйвер для Docker. Этот драйвер поставляется в Chef Workstation. |
| kitchen-dsc | Драйвер для Windows PowerShell Desired State Configuration (DSC). |
| kitchen-ec2 | Драйвер для Amazon EC2. Этот драйвер поставляется в Chef Workstation. |
| kitchen-google | Драйвер для Google Compute Engine. Этот драйвер поставляется в Chef Workstation |
| kitchen-hyperv | Драйвер для Microsoft Hyper-V Server. Этот драйвер поставляется в Chef Workstation. |
| kitchen-openstack | Драйвер для OpenStack. Этот драйвер поставляется в Chef Workstation. |
| kitchen-rackspace | Драйвер для Rackspace. |
| kitchen-vagrant | Драйвер для HashiCorp Vagrant. Этот драйвер поставляется в Chef Workstation. |
kitchen-vagrant
Плагин драйвера kitchen-vagrant для Kitchen генерирует один файл Vagrantfile для каждого экземпляра Kitchen в каталоге песочницы. Плагин драйвера kitchen-vagrant поддерживает VirtualBox и VMware Fusion, требует Vagrant 1.1.0 (или выше) и является драйвером по умолчанию для Test Kitchen.
Следующие атрибуты используются для конфигурации kitchen-vagrant для Chef:
| Атрибут | Описание |
|---|---|
box |
Обязательно. Используется для указания бокса, на котором Vagrant будет выполняться. Значение по умолчанию: вычисляется из имени платформы экземпляра. |
box_check_update |
Используется для проверки обновлений бокса. Значение по умолчанию: false. |
box_url |
Используется для указания URL, на котором расположен настроенный бокс. Значение по умолчанию: вычисляется из имени платформы экземпляра, но только когда поставщик Vagrant — VirtualBox или VMware. |
communicator |
Используется для переопределения параметра config.vm.communicator в Vagrant. Например, когда базовый бокс — операционная система Microsoft Windows, в которой SSH не установлен и не включен, Vagrant не сможет загрузиться без пользовательского файла Vagrant. Значение по умолчанию: nil (предполагается наличие SSH). |
customize |
Хеш пар key-value, определяющий настройки, которые должны быть внесены в виртуальную машину Vagrant. Например: customize: memory: 1024 cpuexecutioncap: 50. |
guest |
Используется для указания параметра config.vm.guest в файле Vagrant по умолчанию. |
gui |
Используется для включения графического интерфейса пользователя для определённой платформы. Передаётся в config.vm.provider параметр в Vagrant, но только если поставщик Vagrant — VirtualBox или VMware. |
network |
Используется для указания массива настроек сети, которые необходимо применить к виртуальной машине. Значение по умолчанию: []. Например: network: - ["forwarded_port", {guest: 80, host: 8080}] - ["private_network", {ip: "192.168.33.33"}]. |
pre_create_command |
Используется для выполнения команды непосредственно перед vagrant up --no-provisioner. |
provider |
Используется для указания поставщика Vagrant. Это значение должно совпадать с именем поставщика в Vagrant. |
provision |
Используется для подготовки Vagrant при создании экземпляра. Это полезно, если операционной системе требуется настройка во время подготовки. Значение по умолчанию: false. |
ssh_key |
Используется для указания файла закрытого ключа, используемого для проверки подлинности SSH. |
synced_folders |
Используется для указания набора синхронизированных папок на каждом экземпляре Vagrant. Пути источника относительны к корню Kitchen. Значение по умолчанию: []. Например: synced_folders: - ["data/%{instance_name}", "/opt/instance_data"] - ["/host_path", "/vm_path", "create: true, type: :nfs"]. |
vagrantfile_erb |
Используется для указания альтернативного шаблона Vagrant Embedded Ruby (ERB), который будет использоваться этим драйвером. |
vagrantfiles |
Массив путей к одному (или нескольким) файлам Vagrant, которые должны быть объединены с файлом Vagrant по умолчанию. Пути могут быть абсолютными или относительными к файлу kitchen.yml. |
vm_hostname |
Используется для указания внутреннего имени хоста для экземпляра. Это не требуется при подключении к виртуальной машине Vagrant. Установите значение false, чтобы предотвратить отображение этого значения в файле Vagrant по умолчанию. Значение по умолчанию: вычисляется из имени платформы экземпляра. |
Плагин драйвера kitchen-vagrant может предсказывать имя бокса для Vagrant и URL для скачивания, опубликованные Chef. Например:
platforms:
- name: ubuntu-16.04
- name: ubuntu-18.04
- name: centos-7
- name: centos-8
- name: debian-10
что сгенерирует конфигурационный файл, похожий на:
platforms:
- name: ubuntu-16.04
driver:
box: bento/ubuntu-16.04
- name: ubuntu-18.04
driver:
box: bento/ubuntu-18.04
# ...
Примеры
В следующих примерах показаны фактические файлы kitchen.yml, используемые в книгах рецептов Chef.
Chef, Chef Workstation
Следующий пример показывает настройки провайдера, необходимые для установки Chef Workstation, а затем использование версии Chef, встроенной в Chef Workstation, для конфигурации узла.
Для установки последней версии Chef Workstation:
provisioner:...chef_omnibus_install_options:-P chef-workstationchef_omnibus_root:/opt/chef-workstationи для установки конкретной версии Chef Workstation:
provisioner:...chef_omnibus_install_options:-P chef-workstationchef_omnibus_root:/opt/chef-workstationrequire_chef_omnibus:0.9Платформа Microsoft Windows
Следующий пример показывает настройки платформы для платформы Microsoft Windows:
platforms:- name:eval-win2012r2-standardos_type:windowstransport:name:winrmelevated:trueЕсли name начинается с win, то os_type по умолчанию равно windows. Транспорт winrm — по умолчанию в операционных системах Windows. Здесь elevated равно true, что выполняет команды Windows через задачу планировщика для имитации локального пользователя.
Книга рецептов Chef Infra Client
Следующий файл kitchen.yml является частью книги рецептов chef-client и гарантирует правильную конфигурацию Chef Infra Client.
driver:name:vagrantprovisioner:name:chef_zeroplatforms:- name:centos-8- name:fedora-latest- name:ubuntu-1604- name:ubuntu-1804suites:- name:service_initrun_list:- recipe[minitest-handler]- recipe[chef-client::config]- recipe[chef-client_test::service_init]- recipe[chef-client::init_service]attributes:{}- name:service_runitrun_list:- recipe[minitest-handler]- recipe[runit]- recipe[chef-client_test::service_runit]- recipe[chef-client::runit_service]attributes:{}- name:service_upstartrun_list:- recipe[minitest-handler]- recipe[chef-client_test::service_upstart]- recipe[chef-client::upstart_service]excludes:["centos-5.9"]attributes:{}- name:cronrun_list:- recipe[minitest-handler]- recipe[chef-client::cron]attributes:{}- name:delete_validationrun_list:- recipe[chef-client::delete_validation]attributes:{}Книга рецептов chef-splunk
Следующий файл kitchen.yml является частью книги рецептов chef-splunk и используется для обеспечения правильной установки клиента и сервера Splunk.
driver:name:vagrantcustomize:memory:1024provisioner:name:chef_zeroplatforms:- name:ubuntu-16.04- name:ubuntu-18.04- name:centos-7- name:centos-8suites:- name:clientrun_list:- recipe[chef-splunk::default]- recipe[test::default]attributes:dev_mode:truesplunk:accept_license:true- name:serverrun_list:- recipe[chef-splunk::default]attributes:dev_mode:truesplunk:is_server:trueaccept_license:truessl_options:enable_ssl:trueКнига рецептов yum
Следующий файл kitchen.yml является частью книги рецептов yum:
driver:name:vagrantprovisioner:name:chef_zeroplatforms:- name:centos-7- name:centos-8- name:fedora-latestsuites:- name:defaultrun_list:- recipe[yum::default]- recipe[yum_test::test_repo]Атрибуты платформы
Следующий файл kitchen.yml создаёт простую многоуровневую конфигурацию Chef Infra Server, включая два сервера переднего плана, один сервер заднего плана и два дополнения (Chef Push Jobs и консоль управления Chef). Блок platforms использует раздел attributes для определения атрибутов, специфичных для сервера Chef, которые используются всеми тремя наборами тестов:
driver:name:vagrantprovisioner:name:chef_zeroplatforms:- name:ubuntu-16.04attributes:chef-server:api_fqdn:backend.chef-server.combackend:fqdn:backend.chef-server.comipaddress:123.456.789.0frontends:frontend1.chef-server.com:123.456.789.0frontend2.chef-server.com:123.456.789.0urls:private_chef:http://123.456.789.0/path/to/private-chef_11.1.4-1_amd64.debmanage:http://123.456.789.0/path/to/opscode-manage_1.3.1-1_amd64.debpush_jobs:http://123.456.789.0/path/to/opscode-push-jobs-server_1.1.1-1_amd64.debsuites:- name:frontend1driver:vm_hostname:frontend1.chef-server.comnetwork:- ["private_network",{ip:"123.456.789.0"}]customize:memory:2048cpus:2run_list:- recipe[chef-server::configfile]- recipe[chef-server::ntp]- recipe[chef-server::server]- recipe[chef-server::frontend]- name:frontend2driver:vm_hostname:frontend2.chef-server.comnetwork:- ["private_network",{ip:"123.456.789.0"}]customize:memory:2048cpus:2run_list:- recipe[chef-server::configfile]- recipe[chef-server::ntp]- recipe[chef-server::server]- recipe[chef-server::frontend]- name:backenddriver:vm_hostname:backend.chef-server.comnetwork:- ["private_network",{ip:"123.456.789.0"}]customize:memory:8192cpus:4run_list:- recipe[chef-server::configfile]- recipe[chef-server::ntp]- recipe[chef-server::server]- recipe[chef-server::backend]Kitchen Конвергенция при перезагрузке системы
Test-Kitchen может обрабатывать перезагрузки (при инициировании из Chef Infra Client), задавая атрибуты retry_on_exit_code, max_retries и wait_for_retry в провайдере в файле kitchen.yml следующим образом:
provisioner:name:chef_zeroretry_on_exit_code:- 35# 35 is the exit code signaling that the node is rebooting- 1max_retries:1client_rb:exit_status::enabled# Opt-in to the standardized exit codesclient_fork:false# Forked instances don't return the real exit codeПримечание по узлам Linux: Команда shutdown блокирует выполнение (в отличие от варианта для Windows, который регистрирует перезагрузку и возвращается сразу), поэтому после истечения срока ожидания Chef Infra Client и узел находятся в гонке, чтобы увидеть, кто завершит работу/перезагрузку первым — поэтому вы можете получить или не получить код выхода из экземпляров Linux. В этом случае вы можете добавить 1 в массив retry_on_exit_code и это должно охватить оба случая.
Обратитесь к документации YAML для установки атрибута retry_on_exit_code.
© 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/workstation/config_yml_kitchen/