Spec-Zone.ru › Chef 18

Тестовая кухня

[править на GitHub]

Используйте Test Kitchen, чтобы автоматически тестировать кулинарные книги на любом сочетании платформ и наборов тестов:

  • Наборы тестов определяются в файле kitchen.yml. См. документацию по конфигурации для получения информации об опциях и синтаксисе.
  • Поддерживает тестирование кулинарных книг на многих облачных поставщиках и технологиях виртуализации.
  • Использует исчерпывающий набор базовых образов операционных систем из проекта Bento компании Chef.

Основные понятия Test Kitchen:

  • Платформа — это операционная система или целевая среда, на которой будет протестирована кулинарная книга
  • Набор — это конфигурация Chef Infra Client, Policyfile или список запусков, а также (необязательно) атрибуты узла
  • Экземпляр — это комбинация определенной платформы и определенного набора, и каждому экземпляру присваивается автоматически сгенерированное имя
  • Драйвер — это жизненный цикл, который реализует действия, связанные с конкретным экземпляром: создание экземпляра, выполнение необходимых действий для схождения на этом экземпляре (например, установка Chef Infra Client, загрузка кулинарных книг, запуск выполнения Chef Infra Client и т. д.), настройка всего необходимого для тестирования, проверка одного (или нескольких) наборов после схождения, а затем уничтожение этого экземпляра
  • Провизор — это компонент, на котором будет выполняться код Chef Infra Client, либо с использованием chef-zero, либо chef-solo через chef_zero и chef_solo провизоров соответственно

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.

Валидация с InSpec

Test Kitchen создаст виртуальную машину или облачный экземпляр, установит Chef Infra Client на эту систему и осуществит схождение Chef Infra Client с вашей локальной кулинарной книгой. После этого вам необходимо выполнить автоматическую валидацию созданной инфраструктуры для проверки её конфигурации. Test Kitchen позволяет запускать тесты InSpec на сходящейся кулинарной книге для легкой локальной валидации вашей инфраструктуры.

kitchen (инструмент командной строки)

kitchen — инструмент командной строки для Test Kitchen, инструмента интеграционного тестирования, поддерживаемого Chef Software. Test Kitchen выполняет тесты на любом сочетании платформ с использованием любого сочетания наборов тестов. Однако каждый тест выполняется на определенном экземпляре, состоящем из одной платформы и одного набора критериев тестирования. Это позволяет запускать каждый тест изолированно, гарантируя, что разные поведения в одном и том же коде могут быть тщательно протестированы до внесения этих изменений в производство.

Примечание

Любой подкоманда Test Kitchen, не указывающая экземпляр, будет применена ко всем экземплярам.

Примечание

Для получения дополнительной информации об инструменте командной строки kitchen, см. kitchen.

kitchen.yml

Используйте файл kitchen.yml, чтобы определить необходимые параметры для запуска Test Kitchen, включая драйверы, провизоров, платформы и наборы тестов.

Примечание

Для получения дополнительной информации о файле kitchen.yml, см. kitchen.yml.

Синтаксис

Основная структура файла 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.

Работа с прокси

Переменные среды 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, можно использовать для установки переменных среды прокси для приложений внутри виртуальной машины.

Дополнительная информация

Для получения дополнительной информации о тест-ориентированном программировании и Test Kitchen:

  • kitchen.ci
  • Начало работы с Test Kitchen

© 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/kitchen/

Spec-Zone.ru

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