2016-05-25 6 views
0

Gibt es eine Möglichkeit, auf eine Datensammlung von Chef aus der Attributdatei default.rb zuzugreifen?Zugriff auf eine Datensammlung von Chef aus einer Attributdatei

Mein Anwendungsfall ist, dass ich eine Sammlung von Betriebssystemumgebungsvariablen als einen Hash der Attribute darstellen muss, die schließlich zu einer Vorlage weitergeleitet werden. Einige dieser Umgebungsvariablen sind Anmeldeinformationen, die ich in einer verschlüsselten Datensammlung gespeichert habe. Leider lässt mich Chef nicht innerhalb der Attributdatei auf das Rezept DSL zugreifen, so dass die data_bag_item Methode, die ich normalerweise verwende, nicht verfügbar ist.

Vielen Dank im Voraus.

+1

Während Sie nicht das Rezept DSL haben, glaube ich nicht, dass es ein Verbot gibt, die verschiedenen Methoden aufzurufen, z. [Chef :: DataBagItem.load] (http://www.rubydoc.info/github/opscode/chef/Chef/DataBagItem#load-class_method). Wie die anderen Poster sagen, ist es wahrscheinlich besser, Standardwerte in Ihrer Attributdatei anzugeben und das Rezept zum Laden eines Datenbeutels zu verwenden. – Martin

Antwort

2

Sie können die DSL-Helfer nicht verwenden, aber Sie können Chef::DataBagItem.load selbst verwenden. Überprüfen Sie den Chef-Code, um zu sehen, wie Sie ihn verwenden (wir dokumentieren diese APIs nicht AFAIK).

3

Warum können Sie das Attribut im Rezept nicht aus dem Datenbeutel setzen und wie erwartet verwenden. Normalerweise würde ich einen Standardwert in attributes/default.rb für den gleichen Wert nur für den Fall festlegen, dass der Datenbeutel zur Laufzeit nicht existiert.

In den Attributen Datei:

default['cookbook_name']['secret_value'] = '__UNDEFINED__' 

Sie dann im Rezept ausfüllen und das Attribut verweisen, wie erwartet:

node.default['cookbook_name']['secret_value'] = data_bag_item('something', 'else') 

Die Attribute Dateien als Standort verwendet wird, um die Attribute zu speichern. Sobald das Rezept kompiliert wurde, wird das Endergebnis ausgeführt. Woher der Wert kam, ist zu diesem Zeitpunkt nicht wichtig.

+0

Eine gute Antwort, aber es ist weil das Rezept verallgemeinert ist. Es wird eine Liste der zu implementierenden Elemente durchlaufen, von denen nur einige die Umgebungsvariablen der Anmeldeinformationen erfordern. Also hoffte ich, die Spezialisierung in der Attributdatei zu behalten. –

+0

Was ist mit Lambda für jedes Attribut und dann im Rezept aufrufen. Dadurch würde der Code logisch in der Attributdatei gespeichert, obwohl er im Rezept ausgeführt wurde. Denken Sie an die Voreinstellungen von 'default [' cookbook_name '] [' secret_value '] = lambda {data_bag_item (' etwas ',' else ')} '. Attribute-Dateien sind immer noch Ruby, so dass es funktionieren sollte, wenn die Auswertung im Rezept mit '.call' erfolgt, wenn es nötig ist. –

+0

'node ['whatever'] = Wert' wird einen Fehler in Chef 12.8 (mindestens), bevorzugen 'node.default ['was auch immer]] = Wert' – Tensibai

Verwandte Themen