2014-10-22 22 views
14

Wiele książek kucharskich, takich jak mysql cookbook ma wiele plików .kitchen.yml. Na przykład mysql ma plik .kitchen.yml i .kitchen-cloud.yml. Patrząc na dokumentację i kod do testowej kuchni, nie widzę możliwości użycia plików konfiguracyjnych innych niż .kitchen.yml, .kitchen.local.yml i ~/.kitchen/config.yml. Gdybym chciał użyć sterownika Chmura od mysql książki kucharskiej, chciałbym:Alternatywne sterowniki z testową kuchnią

  • cp .kitchen-cloud.yml .kitchen.yml
  • cp .kitchen-cloud.yml .kitchen.local.yml
  • coś innego ??

Po prostu wydaje się, że powinno być czystsze podejście do korzystania z alternatywnego pliku konfiguracyjnego, który zastępuje domyślne pliki.

Dzięki

Odpowiedz

23

Kuchnia oferuje trzy zmienne środowiskowe, aby kontrolować, gdzie to wygląda na każdym z możliwych plików konfiguracyjnych. Aby domyślne zachowanie jawne, można je ustawić w następujący sposób:

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

Nie trzeba zastąpić je wszystkie, więc można uruchomić test-kuchnia z Twojego .kitchen-cloud.yml tak:

$ KITCHEN_YAML=".kitchen-cloud.yml" kitchen test 
7

oprócz tego, co powiedział zts, pamiętaj, że możesz użyć ERB w plikach kuchennych, dzięki czemu kierowca może config wygląda następująco:

driver: 
    name: <%= ENV['KITCHEN_DRIVER'] || 'vagrant' %> 
10

... dodać do coderanger, jeśli chcesz wybrać sterowniki lub Opcje na podstawie tego, czy narzędzie CI ustawia zmienne środowiskowe, można też 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 można utrzymać pojedynczy plik i uniknąć rozbieżnych testy platformy (dokonywania zmian w jednym zapisz i zapomnij w innym). Istnieją również przypadki, w których opcje podane w pliku .kitchen.local.yml mogą być sprzeczne z tymi w .kitchen.yml.

3

Znalazłem to pytanie, szukając rozwiązania wspierającego wielu kierowców za pomocą jednego pliku kuchennego, a odpowiedź Ivesa była bardzo pomocna. Dostosowałem to, aby wykonać następujące czynności.

  • Domyślnie do Vagrant kierowcy
  • pozwolić użytkownikowi zastąpić ustawienia sterownika ze środowiskiem KITCHEN_DRIVER zmiennej
  • Wybierz sterownik docker_ssh jeżeli jest on 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 %>