Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Beispiel 5: Verwenden von Attributen
Wichtig
Das Tool AWS OpsWorks Stacks Der Dienst hat am 26. Mai 2024 das Ende seiner Nutzungsdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden deaktiviert. Wir empfehlen Kunden dringend, ihre Workloads so bald wie möglich auf andere Lösungen zu migrieren. Wenn Sie Fragen zur Migration haben, wenden Sie sich an AWS Support Team ein AWS Re:post oder
Für die Rezepte in den vorherigen Abschnitten wurden stets fest programmierte Werte verwendet, außer für die Plattform. Diese Methode kann ungünstig sein, z. B. wenn Sie denselben Wert in mehreren Rezepten verwenden möchten. Sie können Werte getrennt von Rezepten definieren, indem Sie eine Attributdatei in das Rezeptbuch einbinden.
Eine Attributdatei ist eine Ruby-Anwendung, mit der Werte für ein oder mehrere Attribute zugewiesen werden. Die Datei muss im Rezeptbuch-Ordner attributes
sein. Chef bindet die Attribute in das Knotenobjekt ein, sodass alle Rezepte diese Attributwerte durch Referenzierung des Attributs verwenden können. In diesem Thema wird gezeigt, wie Sie das Rezept aus Iteration für die Nutzung von Attributen anpassen. Hier ist zu Referenzzwecken das ursprüngliche Rezept.
[ "/srv/www/config", "/srv/www/shared" ].each do |path| directory path do mode 0755 owner 'root' group 'root' recursive true action :create end end
Nachfolgend werden Attribute für Unterverzeichnisnamen, Modus, Besitzer und Gruppenwerte definiert.
default['createdir']['shared_dir'] = 'shared' default['createdir']['config_dir'] = 'config' default['createdir']['mode'] = 0755 default['createdir']['owner'] = 'root' default['createdir']['group'] = 'root'
Beachten Sie Folgendes:
-
Jede Definition beginnt mit einem Attributtyp.
Wenn ein Attribut mehr als einmal definiert wird — möglicherweise in verschiedenen Attributdateien — gibt der Attributtyp die Priorität des Attributs an, die bestimmt, welche Definition in das Knotenobjekt aufgenommen wird. Weitere Informationen finden Sie unter Priorität von Attributen. Alle Definitionen in diesem Beispiel weisen den Attributtyp
default
auf, der üblicherweise für diesen Zweck verwendet wird. -
Die Attribute haben verschachtelte Namen.
Das Knotenobjekt ist im Wesentlichen eine Hash-Tabelle, die beliebig tief verschachtelt werden kann. Daher lassen sich auch Attributnamen verschachteln, was gängige Praxis ist. Diese Attributdatei folgt der Standardvorgehensweise und verwendet eine verschachtelte Datei mit dem Rezeptbuch-Namen
createdir
als erstes Element.
Hier wird "createdir" als erstes Element verwendet, weil bei der Chef-Ausführung die Attribute aus allen Rezeptbüchern in das Knotenobjekt eingebunden werden. Mit AWS OpsWorks Stacks enthält das Knotenobjekt zusätzlich zu allen von Ihnen definierten Attributen eine große Anzahl von Attributen aus den integrierten Kochbüchernport
oder user
. Vergeben Sie keine Attributnamen wie z. B. [:apache2][:user], außer Sie möchten den Attributwert überschreiben. Weitere Informationen finden Sie unter Verwenden von benutzerdefinierten Rezeptbuchattributen.
Im folgenden Beispiel wird das ursprüngliche Rezept mit Attributen anstelle von fest programmierten Werten gezeigt.
[ "/srv/www/#{node['createdir']['shared_dir']}", "/srv/www/#{node['createdir']['config_dir']}" ].each do |path| directory path do mode node['createdir']['mode'] owner node['createdir']['owner'] group node['createdir']['group'] recursive true action :create end end
Anmerkung
Wenn Sie einen Attributwert in eine Zeichenfolge einbinden möchten, umschließen Sie diesen mit #{}
. Im vorigen Beispiel wird "shared" mit #{node['createdir']['shared_dir']}
zu "/srv/www/" hinzugefügt.
So führen Sie das Rezept aus
-
Führen Sie
kitchen destroy
aus, damit Sie mit einer neuen Instance beginnen können. -
Ersetzen Sie den Code in
recipes/default.rb
durch das vorige Rezeptbeispiel. -
Erstellen Sie für
createdir
das Unterverzeichnisattributes
und fügen Sie die Dateidefault.rb
mit den Attributdefinitionen hinzu. -
Bearbeiten Sie
.kitchen.yml
, um CentOS aus der Liste der Plattformen zu entfernen. -
Führen Sie
kitchen converge
aus und melden Sie sich anschließend an der Instance an, um zu prüfen, ob/srv/www/shared
und/srv/www/config
vorhanden sind.
Anmerkung
Mit AWS OpsWorks Stacks bietet einen zusätzlichen Vorteil, Werte als Attribute zu definieren. Sie können benutzerdefiniert verwendenJSON, um diese Werte pro Stack oder sogar pro Bereitstellung zu überschreiben. Dies kann in vielen Fällen sinnvoll sein, z. B. in den folgenden:
-
Sie können das Verhalten Ihrer Rezepte anpassen, wie z. B. die Konfigurationseinstellungen oder Benutzernamen, ohne das Rezeptbuch zu verändern.
Sie können beispielsweise dasselbe Cookbook für verschiedene Stacks verwenden und mit custom die wichtigsten Konfigurationseinstellungen für einen JSON bestimmten Stack angeben. Auf diese Weise müssen Sie weder die Zeit noch den Aufwand für eine Anpassung des Rezeptbuchs aufbringen noch für jeden Stack ein anderes Rezeptbuch verwenden.
-
Es ist nicht nötig, potenziell vertrauliche Informationen (wie z. B. Datenbank-Passwörter) im Rezeptbuch-Repository zu hinterlegen.
Sie können stattdessen ein Attribut verwenden, um einen Standardwert zu definieren, und dann custom verwenden, JSON um diesen Wert durch den echten Wert zu überschreiben.
Weitere Informationen zur Verwendung von custom JSON zum Überschreiben von Attributen finden Sie unterÜberschreiben der Attribute.
Die Attributdatei hat den Namen default.rb
, da es sich um eine (wenn auch sehr einfache) Ruby-Anwendung handelt. Das heißt, Sie können beispielsweise mithilfe der Bedingungslogik die Attributwerte auf Basis des Betriebssystems angeben. Unter Bedingungslogik haben Sie einen anderen Unterverzeichnisnamen für die verschiedenen Linux-Familien im Rezept angegeben. Wenn Sie eine Attributdatei nutzen, können Sie stattdessen die Bedingungslogik in die Attributdatei einbinden.
In der folgenden Attributdatei wird mit value_for_platform
ein anderer ['shared_dir']
-Attributwert auf Basis des Betriebssystems angegeben. Für andere Bedingungen können Sie die if-elsif-else
-Logik von Ruby oder eine case
-Anweisung verwenden.
data_dir = value_for_platform( "centos" => { "default" => "shared" }, "ubuntu" => { "default" => "data" }, "default" => "user_data" ) default['createdir']['shared_dir'] = data_dir default['createdir']['config_dir'] = "config" default['createdir']['mode'] = 0755 default['createdir']['owner'] = 'root' default['createdir']['group'] = 'root'
So führen Sie das Rezept aus
-
Führen Sie
kitchen destroy
aus, damit Sie mit einer neuen Instance beginnen können. -
Ersetzen Sie den Code in
attributes/default.rb
durch das vorherige Beispiel. -
Bearbeiten Sie
.kitchen.yml
und fügen Sie wie unter Bedingungslogik beschrieben eine CentOS-Plattform zum Abschnitt mit den Plattformen hinzu. -
Führen Sie
kitchen converge
aus und melden Sie sich anschließend an den Instances an, um zu prüfen, ob die Verzeichnisse vorhanden sind.
Wenn Sie fertig sind, führen Sie kitchen destroy
aus, um die Instance zu beenden. Im nächsten Beispiel wird ein neues Rezeptbuch verwendet.