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 7: Ausführen von Befehlen und Skripts
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
Chef-Ressourcen können zahlreiche Aufgaben auf Instances ausführen, aber gelegentlich ist es sinnvoller, einen Shell-Befehl oder ein Skript zu verwenden. Das ist beispielsweise der Fall, wenn Sie bereits Skripts für bestimmte Aufgaben einsetzen. Dann ist es einfacher, diese weiterzuverwenden, anstatt neuen Code zu implementieren. In diesem Abschnitt erfahren Sie, wie Befehle oder Skripts auf einer Instance ausgeführt werden.
Ausführen von Befehlen
Die script
Dies sind Ihre ersten Schritte
-
Erstellen Sie ein Verzeichnis in
opsworks_cookbooksnamensscriptund öffnen Sie es. -
Fügen Sie eine Datei
metadata.rbzuscriptmit dem folgenden Inhalt hinzu:name "script" version "0.1.0" -
Initialisieren und konfigurieren Sie Test Kitchen wie unter Beispiel 1: Installieren von Paketen beschrieben und entfernen Sie CentOS aus der Liste
platforms. -
Erstellen Sie in
scriptein Verzeichnis namensrecipes.
Sie können Befehle direkt mit der script-Ressource ausführen, aber Chef unterstützt auch eine Reihe von Ressourcenversionen, die auf bestimmte Befehlsinterpreter ausgerichtet und nach diesen benannt sind. Im folgenden Rezept wird ein einfaches bash-Skript mithilfe einer bash
bash "install_something" do user "root" cwd "/tmp" code <<-EOH touch somefile EOH not_if do File.exists?("/tmp/somefile") end end
Die bash-Ressource ist wie folgt konfiguriert.
-
Sie verwendet die
run-Standardaktion zur Ausführung der Befehle imcode-Block.In diesem Beispiel ist nur ein einziger Befehl (
touch somefile) vorhanden, aber eincode-Block kann mehrere Befehle enthalten. -
Das
user-Attribut gibt den Benutzer an, der den Befehl ausführt. -
Das
cwd-Attribut gibt das Arbeitsverzeichnis an.In diesem Beispiel wird von
toucheine Datei im Verzeichnis/tmperstellt. -
Das
not_if-Wächterattribut weist die Ressource an, keine Aktion auszuführen, wenn die Datei bereits vorhanden ist.
So führen Sie das Rezept aus
-
Erstellen Sie die Datei
default.rb, die den vorherigen Beispiel-Code enthält, und speichern Sie diese inrecipes. -
Führen Sie
kitchen convergeaus und melden Sie sich anschließend an der Instance an, um zu prüfen, ob die Datei in/tmpvorhanden ist.
Ausführen von Skripts
Die script-Ressource ist sehr praktisch, insbesondere, wenn Sie nur einen oder zwei Befehle ausführen möchten. In vielen Fällen ist es jedoch sinnvoller, das Skript in einer Datei zu speichern und diese auszuführen. Mit der executescript aus dem vorherigen Beispiel angepasst, um mithilfe von execute ein einfaches Shell-Skript auszuführen. Sie können das Beispiel problemlos für komplexere Skripte oder andere ausführbare Dateitypen erweitern.
So richten Sie die Skriptdatei ein
-
Fügen Sie ein Unterverzeichnis
fileszuscriptund ein Unterverzeichnisdefaultzufileshinzu. -
Erstellen Sie eine Datei namens
touchfile, die Folgendes enthält, und fügen Sie sie zufiles/defaulthinzu. In diesem Beispiel wird ein gängiger bash-Interpreter genutzt, aber Sie können bei Bedarf auch einen Interpreter wählen, der für Ihre Shell-Umgebung geeignet ist.#!/usr/bin/env bash touch somefileDie Skriptdatei kann beliebig viele Befehle enthalten. In diesem Beispielskript ist aus Gründen der Übersichtlichkeit nur ein
touch-Befehl enthalten.
Mit dem folgenden Rezept wird das Skript ausgeführt.
cookbook_file "/tmp/touchfile" do source "touchfile" mode 0755 end execute "touchfile" do user "root" cwd "/tmp" command "./touchfile" end
Von der Ressource cookbook_file wird die Skriptdatei in /tmp kopiert, zudem wird der Modus festgelegt, damit die Datei ausführbar ist. Die execute-Ressource führt dann die Datei wie folgt aus:
-
Das
user-Attribut gibt den Benutzer des Befehls an (in diesem Beispielroot). -
Das Attribut
cwdgibt das Arbeitsverzeichnis an (in diesem Beispiel/tmp). -
Das
command-Attribut gibt das auszuführende Skript an (in diesem Beispieltouchfile), das im Arbeitsverzeichnis gespeichert ist.
So führen Sie das Rezept aus
-
Ersetzen Sie den Code in
recipes/default.rbdurch das vorherige Beispiel. -
Führen Sie
kitchen convergeaus und melden Sie sich anschließend an der Instance an, um zu prüfen, ob/tmpnun die Skriptdatei, den Modus 0755 undsomefileenthält.
Wenn Sie fertig sind, führen Sie kitchen destroy aus und fahren damit die Instance herunter. Im nächsten Abschnitt wird ein neues Rezeptbuch verwendet.