Alternatywni kierowcy z testem-kuchnia

Wiele książek kucharskich, takich jak mysql cookbook ma wiele .kuchnia.pliki yml. Na przykład mysql ma .kuchnia.yml i A.kuchnia-Chmura.yml. Patrząc na dokumentację i kod do test-kitchen, nie widzę innego sposobu na użycie plików konfiguracyjnych niż .kitchen.yml, .kitchen.local.yml, i ~/.kitchen/config.yml. Gdybym chciał użyć sterownika chmury z mysql cookbook, zrobiłbym:

  • cp .kitchen-cloud.yml .kitchen.yml
  • cp .kitchen-cloud.yml .kitchen.local.yml
  • Coś jeszcze??

Wydaje się, że powinna być Sprzątaczka podejście do używania alternatywnego pliku konfiguracyjnego, który zastąpi domyślne.

Dzięki

Author: Tejay Cardon, 2014-10-23

4 answers

Kitchen dostarcza trzy zmienne środowiskowe do kontrolowania, gdzie szuka każdego z możliwych plików konfiguracyjnych. Aby uczynić domyślne zachowanie jawnym, możesz ustawić je w następujący sposób:

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

Nie musisz nadpisywać wszystkich, więc możesz uruchomić test-kitchen ze swoim .kitchen-cloud.yml w ten sposób:

$ KITCHEN_YAML=".kitchen-cloud.yml" kitchen test
 26
Author: zts,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-22 21:06:53

... aby dodać do coderanger, jeśli chcesz wybrać sterowniki lub opcje w zależności od tego, czy Twoje narzędzie CI ustawia zmienne środowiskowe, możesz również zrobić coś takiego:


---
<%
  #--------------------------------------------------------------------------
  # 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: {
  }

W ten sposób utrzymujesz pojedynczy plik i unikasz rozbieżnych testów platformy(dokonujesz zmiany w jednym pliku i zapominasz o innym). Istnieją również przypadki, w których opcje przewidziane w .kuchnia.lokalne.yml może kolidować z tymi wkuchnia.yml.

 11
Author: ives,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-21 22:20:05

Oprócz tego, co powiedział zts, pamiętaj, że możesz używać ERb w plikach kuchennych, więc konfiguracja sterownika może wyglądać tak:

driver:
  name: <%= ENV['KITCHEN_DRIVER'] || 'vagrant' %>
 7
Author: coderanger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-23 00:22:10

Znalazłem to pytanie szukając rozwiązania do obsługi wielu sterowników za pomocą jednego pliku kuchennego i odpowiedź Ivesa była bardzo pomocna. Dostosowałem go do następujących czynności.

  • Default to the Vagrant driver
  • pozwala użytkownikowi nadpisać ustawienie sterownika zmienną środowiskową KITCHEN_DRIVER
  • Wybierz sterownik docker_ssh, jeśli jest zainstalowany.
---
<%
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 %>
 3
Author: Joseph Mulloy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-16 03:28:53