Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Exemple 7 : Exécution des commandes et des scripts
Important
Le AWS OpsWorks Stacks le service a pris fin le 26 mai 2024 et a été désactivé tant pour les nouveaux clients que pour les clients existants. Nous recommandons vivement aux clients de migrer leurs charges de travail vers d'autres solutions dès que possible. Si vous avez des questions sur la migration, contactez le AWS Support L'équipe sur AWS Re:post ou via
Les ressources de Chef peuvent gérer une grande variété de tâches sur une instance, mais il est parfois préférable d'utiliser une commande shell ou un script. Par exemple, vous utilisez peut-être certains scripts pour réaliser des tâches spécifiques et il sera plus facile de continuer à les utiliser plutôt que d'implémenter un nouveau code. Cette section montre comment exécuter des commandes ou des scripts sur une instance.
Exécution des commandes
La ressource script
Mise en route
-
Dans le répertoire
opsworks_cookbooks
, créez un répertoire nomméscript
et accédez à celui-ci. -
Ajoutez un fichier
metadata.rb
àscript
avec le contenu suivant.name "script" version "0.1.0"
-
Initialisez et configurez Test Kitchen, comme décrit dans Exemple 1 : Installation des packageset supprimez CentOS de la liste
platforms
. -
Dans
script
, créez un répertoire nommérecipes
.
Vous pouvez exécuter des commandes en utilisant la ressource script
elle-même, mais Chef prend également en charge un ensemble de versions propres à l'interpréteur de commande de la ressource, qui sont nommées pour l'interpréteur. La recette suivante utilise une ressource bash
bash "install_something" do user "root" cwd "/tmp" code <<-EOH touch somefile EOH not_if do File.exists?("/tmp/somefile") end end
La ressource bash
est configurée comme suit.
-
Elle utilise l'action par défaut,
run
, qui exécute les commandes dans le bloccode
.Cet exemple a une commande,
touch somefile
, mais un bloccode
peut contenir plusieurs commandes. -
L'attribut
user
spécifie l'utilisateur qui exécute la commande. -
L'attribut
cwd
spécifie le répertoire de travail.Pour cet exemple,
touch
crée un fichier dans le répertoire/tmp
. -
L'attribut de protection
not_if
indique à la ressource de ne rien faire si le fichier existe déjà.
Pour exécuter la recette
-
Créez un fichier
default.rb
qui contient l'exemple de code précédent et enregistrez-le dansrecipes
. -
Exécutez
kitchen converge
, puis connectez-vous à l'instance pour vérifier que le fichier se trouve dans/tmp
.
Exécution des scripts
La ressource script
est pratique, surtout si vous avez besoin d'exécuter une ou deux commandes seulement, mais il est souvent préférable de stocker le script dans un fichier et d'exécuter le fichier. La ressource execute
script
de l'exemple précédent afin d'utiliser execute
pour exécuter un script shell simple. Vous pouvez facilement étendre l'exemple pour des scripts plus complexes ou d'autres types de fichiers exécutables.
Pour configurer le fichier de script
-
Ajoutez un sous-répertoire
files
àscript
et un sous-répertoiredefault
àfiles
. -
Créez un fichier nommé
touchfile
qui contient les éléments suivants et ajoutez-le àfiles/default
. Une ligne courante d'interpréteur Bash est utilisée dans cet exemple, mais vous pouvez opter pour un interpréteur qui fonctionne dans votre environnement shell si nécessaire.#!/usr/bin/env bash touch somefile
Le fichier de script peut contenir n'importe quel nombre de commandes. Pour plus de facilité, cet exemple de script n'a qu'une seule commande
touch
.
La recette suivante exécute le script.
cookbook_file "/tmp/touchfile" do source "touchfile" mode 0755 end execute "touchfile" do user "root" cwd "/tmp" command "./touchfile" end
La ressource cookbook_file
copie le fichier de script dans /tmp
et définit le mode de façon à rendre le fichier exécutable. La ressource execute
exécute ensuite le fichier comme suit :
-
L'attribut
user
spécifie l'utilisateur de la commande (root
dans cet exemple). -
L'attribut
cwd
spécifie le répertoire de travail (/tmp
dans cet exemple). -
L'attribut
command
spécifie le script à exécuter (touchfile
dans cet exemple) qui se trouve dans le répertoire de travail.
Pour exécuter la recette
-
Remplacez le code de
recipes/default.rb
par l'exemple précédent. -
Exécutez
kitchen converge
, puis connectez-vous à l'instance pour vérifier que/tmp
contient maintenant le fichier de script, avec le mode défini sur 0755 etsomefile
.
Lorsque vous avez terminé, exécutez kitchen destroy
pour arrêter l'instance. La section suivante utilise un nouveau livre de recettes.