Альтернативные водители с тест-кухней

Многие кулинарные книги, такие как поваренная книга mysql, содержат несколько файлов .kitchen.yml. Например, у mysql есть .kitchen.yml и .kitchen-cloud.yml. Глядя на документацию и код для тестовой кухни, я не вижу никакого способа использовать файлы конфигурации, кроме .kitchen.yml, .kitchen.local.yml и ~/.kitchen/config.yml. Если бы я хотел использовать облачный драйвер из mysql поваренной книги, я бы:

  • cp .kitchen-cloud.yml .kitchen.yml
  • cp .kitchen-cloud.yml .kitchen.local.yml
  • что-то другое??

Просто кажется, что должен быть более чистый подход к использованию альтернативного файла конфигурации, чем грубая замена файлов по умолчанию.

Спасибо


person Tejay Cardon    schedule 22.10.2014    source источник


Ответы (4)


Kitchen предоставляет три переменные среды для управления поиском каждого из возможных файлов конфигурации. Чтобы сделать поведение по умолчанию явным, вы можете установить их следующим образом:

KITCHEN_YAML="./.kitchen.yml"
KITCHEN_LOCAL_YAML="./.kitchen.local.yml"
KITCHEN_GLOBAL_YAML="$HOME/.kitchen/config.yml"

Вам не нужно переопределять их все, поэтому вы можете запустить тестовую кухню с вашим .kitchen-cloud.yml следующим образом:

$ KITCHEN_YAML=".kitchen-cloud.yml" kitchen test
person zts    schedule 22.10.2014

... чтобы добавить в coderanger, если вы хотите выбрать драйверы или параметры в зависимости от того, устанавливает ли ваш инструмент CI переменные среды, вы также можете сделать что-то вроде этого:


---
<%
  #--------------------------------------------------------------------------
  # the driver_plugin can be overridden with an environment variable:
  #   $ KITCHEN_DRIVER=docker kitchen test
  # if not specified, defaults are used...
  #   - kitchen_driver_ci if environment variable CI=true or TRAVIS=true are present
  #   - kitchen_driver_local is used otherwise (which defaults to vagrant)
  #--------------------------------------------------------------------------

  kitchen_driver_ci = 'ec2'
  kitchen_driver_local = 'vagrant'
  kitchen_driver_default = kitchen_driver_local

  if ENV['KITCHEN_DRIVER']
    kitchen_driver = ENV['KITCHEN_DRIVER']
  elsif ENV['TRAVIS']=="true"
    kitchen_driver = kitchen_driver_ci
  elsif ENV['CI']=="true"
    kitchen_driver = kitchen_driver_ci
  else
    kitchen_driver = kitchen_driver_default
  end
  puts "-----> driver_plugin: #{kitchen_driver.to_s}"    
%>

driver_plugin: <%= kitchen_driver %>
driver_config:
  require_chef_omnibus: 11.10.4
  <% if kitchen_driver == 'ec2' %>
  aws_access_key_id:      <%= ENV['AWS_ACCESS_KEY_ID'] %>
  aws_secret_access_key:  <%= ENV['AWS_SECRET_ACCESS_KEY'] %>
  aws_ssh_key_id:         <%= ENV['AWS_SSH_KEY_ID']         || "test-kitchen" %>
  ssh_key:                <%= ENV['AWS_SSH_KEY_FILE']       || "./test-kitchen.pem" %>
  region:                 <%= ENV['AWS_REGION']             || "us-east-1" %>
  availability_zone:      <%= ENV['AWS_AVAILABILITY_ZONE']  || "us-east-1c" %>
  flavor_id: "t2.small"
  groups: ["test-kitchen"]
  <% end %>
  <% if kitchen_driver == 'vagrant' %>
  customize:
    memory: 2048
  <% end %>

platforms:
- name: ubuntu-14.04
  <% if kitchen_driver == 'ec2' %>
  driver_config:
    image_id: ami-6ab2a702
    username: ubuntu
    tags: { "Name": "Test Kitchen" }
  <% end %>

busser:
  sudo: true

suites:
- name: default
  run_list: [
  ]
  attributes: {
  }

Таким образом, вы поддерживаете один файл и избегаете расходящихся тестов платформы (внесение изменений в один файл и забвение в другом). Также бывают случаи, когда параметры, представленные в .kitchen.local.yml, могут конфликтовать с параметрами в .kitchen.yml.

person ives    schedule 21.05.2015

В дополнение к тому, что сказал zts, помните, что вы можете использовать ERb в файлах кухни, поэтому конфигурация вашего драйвера может выглядеть так:

driver:
  name: <%= ENV['KITCHEN_DRIVER'] || 'vagrant' %>
person coderanger    schedule 23.10.2014

Я нашел этот вопрос, когда искал решение для поддержки нескольких драйверов с одним кухонным файлом, и ответ Айвза был очень полезным. Я адаптировал его, чтобы сделать следующее.

  • По умолчанию бродячий драйвер
  • Разрешить пользователю переопределять настройку драйвера с помощью переменной среды KITCHEN_DRIVER.
  • Выберите драйвер docker_ssh, если он установлен.
---
<%
require 'rubygems'
kitchen_driver = 'vagrant'

if ENV['KITCHEN_DRIVER']
    kitchen_driver = ENV['KITCHEN_DRIVER']
elsif Gem::Specification::find_all_by_name('kitchen-docker_ssh').any?
    kitchen_driver = 'docker_ssh'
end
%>

driver:
  name: <%= kitchen_driver %>
person Joseph Mulloy    schedule 16.07.2015