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 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 l' AWS Support équipe sur AWS Re:Post
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éscriptet accédez à celui-ci. -
Ajoutez un fichier
metadata.rbàscriptavec 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 bloccodepeut contenir plusieurs commandes. -
L'attribut
userspécifie l'utilisateur qui exécute la commande. -
L'attribut
cwdspécifie le répertoire de travail.Pour cet exemple,
touchcrée un fichier dans le répertoire/tmp. -
L'attribut de protection
not_ifindique à la ressource de ne rien faire si le fichier existe déjà.
Pour exécuter la recette
-
Créez un fichier
default.rbqui 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 executescript 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àscriptet un sous-répertoiredefaultàfiles. -
Créez un fichier nommé
touchfilequi 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 somefileLe 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
userspécifie l'utilisateur de la commande (rootdans cet exemple). -
L'attribut
cwdspécifie le répertoire de travail (/tmpdans cet exemple). -
L'attribut
commandspécifie le script à exécuter (touchfiledans cet exemple) qui se trouve dans le répertoire de travail.
Pour exécuter la recette
-
Remplacez le code de
recipes/default.rbpar l'exemple précédent. -
Exécutez
kitchen converge, puis connectez-vous à l'instance pour vérifier que/tmpcontient 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.