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
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
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.
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' %>
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 %>
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