2016-08-01 13 views
0

Fragte eine similar question on this, aber erkannte, mein Problem ist mehr mit der Konzeption, wie dies funktionieren kann.Wie führe ich Rollen in der Testküche, ohne alles in die Berksdatei zu legen?

Ich habe eine Reihe von Artikeln gelesen, aber ich bin immer noch super verwirrt. Hier

ist, was ich jetzt tue:

Ich beantrage einen Satz von Basisrollen an alle meine Knoten (windows_base, linux_base, etc). Diese Rollen wenden Rezepte an, die Dinge wie die Zeitzone festlegen, sich mit AD verbinden und andere Konfigurationen ausführen, die auf allen Servern unabhängig von ihrem Zweck erforderlich sind.

Jetzt habe ich meine anderen Kochbücher, die Apps installieren und spezifische Konfigurationsänderungen für bestimmte Zwecke vornehmen. Während diese Kochbücher in der Regel "funktionieren" (dh keine Fehler werfen), ohne dass die Basisrollen zuerst ausgeführt werden müssen, können sie immer noch von den Basisrollen abhängen, um eine erste Serverkonfiguration auszuführen, und funktionieren möglicherweise nicht richtig, ohne dass sie zuerst angewendet werden.

Wenn ich also eines meiner Kochbücher in der Testküche teste, möchte ich manchmal eine Basisrolle in die Laufliste aufnehmen (vor den Kochbüchern, die ich teste).

Ich habe meine Rollen von meinem Server mit Messerdownload heruntergeladen und in der kitchen.yml über roles_path angegeben, aber anscheinend muss ich noch Testküche sagen, wo ich meine Kochbücher in die Rolle bekomme?

Jetzt können Sie die vorherige Frage sehen Ich fragte, es wurde vorgeschlagen, ich verwende Berkshelf, aber wenn ich das tun, muss ich alle Rezepte aus den Basisrollen in der Berksdatei des Kochbuchs, das ich gerade testen, angeben? Das macht für mich keinen Sinn, da ich dies nicht tun muss, wenn ich eine Rolle über den Chef-Server auf einen Knoten lege. Ich will auch nicht all diese Abhängigkeiten in meinem berksfile, denn wie ich schon sagte, hängen sie irgendwie von den Rollen ab, aber nicht unbedingt.

Wie verwende ich Rollen in Test Kitchen wie sie auf Chef Server verwendet werden - was bedeutet, dass ich nur eine Rolle auf eine Knoten-Run-Liste anwenden.

Ich sollte sagen, ich habe auch versucht, den Kochbuchpfad (cookbooks_path :) in kitchen.yml zu definieren, aber das hat Ether nicht funktioniert.

Das ist mein .kitchen.yml ist

--- 
driver: 
    name: hyperv 
    parent_vhd_folder: c:\HyperV\VHDs\ 
    parent_vhd_name: 2012R2.vhdx 
    vm_switch: NAT 
    memory_startup_bytes: 2GB 

provisioner: 
    name: chef_zero 
    roles_path: c:\.chef\roles 
    cookbooks_path: ..\ 

transport: 
    password: myPass123$ 

platforms: 
    - name: windows-2012r2 

suites: 
    - name: default 
    run_list: 
     - role[linux_base] 
    attributes: 

Antwort

2

Die Antwort ist immer noch die gleiche wie beim letzten Mal, haben Sie Küche zu zeigen, wie alle Ihre Kochbücher zu bekommen. Sie können dies entweder über Berkshelf, Librarian, Policyfiles oder über einen statischen Pfad tun. Der entsprechende Code ist in https://github.com/test-kitchen/test-kitchen/blob/master/lib/kitchen/provisioner/chef/common_sandbox.rb, wenn Sie 100% dessen sehen möchten, was unterstützt wird. Es gibt nichts automatisches wie bei einem Chef-Server, da dies für die Entwicklung vorausgesetzt wird und sich daher nicht auf ein einziges Artefakt-Repo verlassen kann.

+0

Also würde es funktionieren/Sinn machen, den 'cookbooks_path' in meiner' .kitchen.yml' auf 'C: \ Users \ me \ .bergshelf' (mein berkshelf-Ordner) zu setzen? Oder überschreibt Berkshelf 'cookbooks_path' in' .kitchen.yml'? – red888

+1

Nein, der Berkshelf-Speicherordner ist nicht so organisiert, dass Chef ihn lesen kann. Kitchen führt 'berks vendor' für Sie in einen temporären Ordner, um die Dinge im richtigen Format auszugeben. – coderanger