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
Der AWS OpsWorks Stacks Dienst hat am 26. Mai 2024 das Ende seiner Lebensdauer 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 das AWS -Support Team auf AWS re:POST
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 ist — vielleicht 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. Bei 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
Bei AWS OpsWorks Stacks bietet die Definition von Werten als Attribute einen zusätzlichen Vorteil. Sie können benutzerdefiniertes JSON verwenden, 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.
Beispielsweise können Sie dasselbe Rezeptbuch für unterschiedliche Stacks einsetzen und die wichtigsten Konfigurationseinstellungen für einen bestimmten Stack mit den benutzerdefinierten JSON-Daten 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.
Stattdessen können Sie mittels eines Attributs einen Standardwert festlegen und dann mit den benutzerdefinierten JSON-Daten diesen Wert mit dem echten Wert überschreiben.
Weitere Informationen zur Verwendung der benutzerdefinierten JSON-Daten 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.