2016-06-10 19 views
0

Ich versuche ein Git-Repository zu haben, das meine Umgebung verwaltet. Ich habe lwrp für bestimmte Aufgaben geschrieben. Diese lwrps sind intern von vielen Kochbüchern der Gemeinde abhängig.berks löst keine Abhängigkeit von Kochbüchern

Jedes meiner Kochbücher hat eine Berksdatei, in der ich die Abhängigkeitsauflösung angeben kann. Im Stammordner meines Repositories habe ich eine Haupt-Berksdatei, die alle Kochbücher auflistet, die ich aus meinem Repository haben möchte.

Was will ich jetzt, wenn ich ein berks vom Stammverzeichnis installieren, sollte es meine Kochbücher holen und dann durch sie analysieren einzelne berks aus jeder dieser Kochbücher Datei zu finden und alle Abhängigkeiten auflösen. Es verhält sich jedoch nicht so.

Hat jemand eine Idee diesbezüglich? Ist das übliche Szenario, wie Berks arbeitet? Oder fehlt mir etwas, damit die Abhängigkeiten nicht aufgelöst werden?

Für weitere Informationen zu geben: Mein Kochbuch hat diese berksfile

source 'https://supermarket.chef.io' 
cookbook 'apache_spark', '~> 1.2.12' 

und das Apache Funke hat interne Abhängigkeit von

cookbook 'monit', github: 'phlipper/chef-monit', tag: '1.5.2' 
+0

Mögliche Kopie von [Rescue rekursive git Kochbuch Abhängigkeiten mit Berkshelf] (http://stackoverflow.com/questions/29603281/resolve-recursive-git-cookbook-dependencies-with-berkshelf) – StephenKing

+0

Zumindest nehme ich an, dass es funktioniert für Kochbücher, die keine rekursive Abhängigkeit haben, die auf ein Git Repo zeigt ... – StephenKing

+0

Ja, ich denke, es ist eine Art doppelte Frage. Und wir haben noch keine Lösung für eine "rekursive Abhängigkeit, die auf ein Git Repo verweist" –

Antwort

1

Dies ist ein Duplikat der genannten Frage, aber wie nicht habe eine super-detaillierte Antwort, ich setze hier mehr auf.

Wie in den anderen Antworten angegeben, sind Berksfile Direktiven "nicht transitiv". Die Abhängigkeiten in einem Kochbuch metadata.rb sind symbolische Abhängigkeiten, nur ein Name und eine Versionsbeschränkung ohne Informationen darüber, wo man es bekommen kann. Jedes Tool, das mit Cookbooks funktioniert, hat ein anderes Verständnis für die Verarbeitung dieser symbolischen Abhängigkeiten. Wenn Sie beispielsweise eine berks install ausführen, ziehen Sie möglicherweise Abhängigkeiten von Supermarket oder GitHub, aber wenn der Chef-Client sie verarbeitet, erhält es alles vom Chef-Server. Wenn Sie diese Trennung zwischen symbolischen Abhängigkeiten und der Position, aus der sie abgerufen werden sollen, ermöglichen, können viele Tools nebeneinander bestehen. Die Berksfile liefert zusätzliche Daten darüber, wo bestimmte Kochbücher heruntergeladen werden können, entweder um Informationen aus den symbolischen Abhängigkeiten zu ergänzen oder zu ersetzen, aber da diese zusätzlichen Anweisungen nicht Bestandteil der Kochbuch-Metadaten sind, können sie nicht rekursiv durchgeführt werden.

Das große Problem ist, dass Supermarkt ein flacher Namespace ist, so dass es nur ein Kochbuch geben kann, das monit genannt wird. Dies führt dazu, dass viele Leute keine Dinge im Supermarkt veröffentlichen und von ihnen über Git-Quellenrichtlinien abhängen. Dies bedeutet depends "monit" ist nicht mehr so ​​klar wie es sein sollte. Dies sollte wirklich als ein Fehler mit dem unveröffentlichten Kochbuch betrachtet werden, aber ich verstehe die Abneigung der Leute, ihre Kochbücher umzubenennen, um sie richtig zu veröffentlichen. Die übliche Lösung ist, entweder ein paar Sachen in Ihre neue Berksfile von Ihren Upstreams zu kopieren oder ein isoliertes Kochbuch-Universum in einer privaten Supermarkt-Instanz (oder einer entsprechenden Chef-Server-Organisation) zu erstellen, in die Sie nur die gewünschten Dinge hochladen und damit wird depends "monit" wieder eindeutig.

+0

Ja, ich habe gerade mit einer Upstream-Berksdatei zu tun, die eine Liste aller Kochbücher enthält, die ich brauche, und sie auf den Ort mit dem angegebenen Zweig oder Tag verweist . –

+0

Ich empfehle das nicht. Verwenden Sie entweder den Berkshelf/Universe-Endpunkt Ihres Chefservers (verfügbar seit 12.6 oder so) oder richten Sie einen eigenen Supermarkt ein. – StephenKing