kitchen.yml
Используйте Test Kitchen, чтобы автоматически тестировать данные кулинарных книг на любых комбинациях платформ и наборов тестов:
- Определяются в файле 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— указывает, какое приложение использовать при запуске тестов, например,inspec -
transport_name— указывает транспорт для выполнения команд удалённо на тестовом экземпляре.winrm— транспорт по умолчанию для Windows. Транспортssh— по умолчанию для всех остальных операционных систем. -
platform-version— имя платформы, на которой Test Kitchen будет выполнять тестирование кулинарных книг, например,ubuntu-20.04илиcentos-7; в зависимости от платформы могут потребоваться дополнительные сведения о драйвере, например, имена экземпляров и URL-адреса, используемые с облачными платформами, такими как OpenStack или Amazon EC2 -
platformsможет определять атрибуты 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-20.04- name:centos-8- name:debian-10suites:- name:defaultrun_list:- recipe[apache::httpd]excludes:- debian-10Этот файл использует HashiCorp Vagrant в качестве драйвера, для которого не требуется дополнительная настройка, поскольку это драйвер по умолчанию, используемый Test Kitchen, chef-zero в качестве провайдера и единственный (по умолчанию) набор тестов, который выполняется на Ubuntu 20.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://omnitruck.chef.io/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 | Переопределить платформу. | <автоопределяется> | |
platform_version | Переопределить платформу платформы. | <автоопределяется> | |
architecture | Переопределить архитектуру платформы. | <автоопределяется> | |
always_update_cookbooks | Обновляет policyfile.lock.json при внесении изменений в кулинарную книгу. Поддерживает true или false | <автоопределяется> |
Настройки транспорта
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, все команды выполняются через запланированную задачу. Это может устранить ошибки «Access denied» связанные с двойной аутентификацией, взаимодействием с обновлениями 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, ftp_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 | Хэш пар ключ-значение, определяющий настройки, которые должны быть внесены в виртуальную машину 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-18.04
- name: ubuntu-20.04
- name: centos-7
- name: centos-8
- name: debian-10
что сгенерирует конфигурационный файл, похожий на:
platforms:
- name: ubuntu-18.04
driver:
box: bento/ubuntu-18.04
- name: ubuntu-20.04
driver:
box: bento/ubuntu-20.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-1804- name:ubuntu-2004suites:- 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-18.04- name:ubuntu-20.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, включая два сервера front-end, один сервер back-end и два плагина (Chef Push Jobs и консоль управления Chef). Блок platforms использует раздел attributes для определения атрибутов, специфичных для сервера Chef, которые используются всеми тремя наборами тестов:
driver:name:vagrantprovisioner:name:chef_zeroplatforms:- name:ubuntu-18.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/