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 3: Erstellen von Verzeichnissen
Wichtig
Der AWS OpsWorks Stacks Service 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
Wenn Sie ein Paket auf einer Instance installieren, müssen Sie häufig einige Konfigurationsdateien erstellen und sie in den entsprechenden Verzeichnissen platzieren. Doch diese Verzeichnisse sind möglicherweise noch nicht vorhanden. Zudem müssen ggf. auch Verzeichnisse für Daten, Protokolldateien usw. erstellt werden. Beispielsweise booten Sie zuerst das Ubuntu-System, das Sie für die meisten Beispiele verwenden. Das /srv
Verzeichnis hat keine Unterverzeichnisse. Wenn Sie einen Anwendungsserver installieren, benötigen Sie das Verzeichnis /srv/www/
und vermutlich auch einige Unterverzeichnisse für Datendateien, Protokolle und so weiter. Mit dem folgenden Rezept wird /srv/www/
auf einer Instance erstellt.
directory "/srv/www/" do mode 0755 owner 'root' group 'root' action :create end
Mithilfe einer directory
-Ressourcepath
-Attribut der Ressource, daher wird im Beispiel das Verzeichnis /srv/www/
mit den Eigenschaften mode
, owner
und group
erstellt.
So führen Sie das Rezept aus
-
Erstellen Sie ein Verzeichnis in
opsworks_cookbooks
namenscreatedir
und öffnen Sie es. -
Initialisieren und konfigurieren Sie Test Kitchen wie unter Beispiel 1: Installieren von Paketen beschrieben und fügen Sie das Verzeichnis
recipes
zucreatedir
hinzu. -
Fügen Sie die Datei
default.rb
mit dem Rezeptcode zum Rezeptbuch-Unterverzeichnisrecipes
hinzu. -
Führen Sie
kitchen converge
aus, um das Rezept auszuführen. -
Führen Sie
kitchen login
aus und öffnen Sie/srv
, um zu prüfen, ob das Unterverzeichniswww
vorhanden ist. -
Führen Sie
exit
aus, um zur Workstation zurückzukehren, und lassen Sie die Instance aktiv.
Anmerkung
Um auf der Instance ein Verzeichnis ähnlich dem Stammverzeichnis zu erstellen, bilden Sie das Stammverzeichnis mit #{ENV['HOME']}
ab. Beispielsweise wird wie folgt das Verzeichnis ~/shared
erstellt.
directory "#{ENV['HOME']}/shared" do ... end
Angenommen, Sie möchten ein tiefer geschachteltes Verzeichnis wie /srv/www/shared
erstellen. Dann modifizieren Sie das vorherige Rezept wie folgt.
directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' action :create end
So führen Sie das Rezept aus
-
Ersetzen Sie den Code in
default.rb
durch das vorherige Rezept. -
Führen Sie
kitchen converge
im Verzeichniscreatedir
aus. -
Überprüfen Sie, ob das Verzeichnis erstellt wurde. Führen Sie dazu
kitchen login
aus und öffnen Sie/srv/www
, um zu prüfen, ob das Unterverzeichnisshared
vorhanden ist. -
Führen Sie
kitchen destroy
aus, um die Instance herunterzufahren.
Wie Sie sehen können, wurde der Befehl kitchen converge
viel schneller ausgeführt. Das liegt daran, dass die Instance bereits ausgeführt wird, daher ist es nicht nötig, die Instance zu starten, Chef zu installieren usw. Test Kitchen kopiert einfach das aktualisierte Rezeptbuch auf die Instance und startet Chef.
Führen Sie nun kitchen converge
noch einmal aus, damit das Rezept auf einer neuen Instance ausgeführt wird. Das Ergebnis sieht folgendermaßen aus.
Chef Client failed. 0 resources updated in 1.908125788 seconds [2014-06-20T20:54:26+00:00] ERROR: directory[/srv/www/shared] (createdir::default line 1) had an error: Chef::Exceptions::EnclosingDirectoryDoesNotExist: Parent directory /srv/www does not exist, cannot create /srv/www/shared [2014-06-20T20:54:26+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1) >>>>>> Converge failed on instance <default-ubuntu-1204>. >>>>>> Please see .kitchen/logs/default-ubuntu-1204.log for more details >>>>>> ------Exception------- >>>>>> Class: Kitchen::ActionFailed >>>>>> Message: SSH exited (1) for command: [sudo -E chef-solo --config /tmp/kitchen/solo.rb --json-attributes /tmp/kitchen/dna.json --log_level info] >>>>>> ----------------------
Was ist passiert? Das Problem ist, dass mit einer directory
-Ressource standardmäßig nur ein Verzeichnis – und nicht mehrere – erstellt werden kann. Das Rezept konnte zuvor erfolgreich ausgeführt werden, weil das zuerst auf der Instance ausgeführte Rezept das Verzeichnis /srv/www
bereits erstellt hatte, folglich wurde mit /srv/www/shared
nur ein Unterverzeichnis erstellt.
Anmerkung
Achten Sie beim Ausführen von kitchen converge
darauf, ob Sie die Rezepte auf einer neuen oder einer vorhandenen Instance ausführen. Die Ergebnisse könnten unterschiedlich ausfallen.
Um mehrere Unterverzeichnisse zu erstellen, fügen Sie zu recursive
das directory
-Attribut mit dem Wert true
hinzu. Mit dem folgenden Rezept wird /srv/www/shared
direkt auf einer neuen Instance erstellt.
directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end