Exemple 7 : Exécution des commandes et des scripts - AWS OpsWorks

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 atteint sa fin de vie le 26 mai 2024 et a été désactivé pour les nouveaux clients et 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 ou via le AWS Support Premium.

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 exécute une ou plusieurs commandes. Elle prend en charge les interpréteurs de commande csh, bash, Perl, Python et Ruby afin de permettre une utilisation sur les systèmes Linux ou Windows tant que les interprètes appropriés sont installés. Cette rubrique montre comment exécuter une commande simple bash sur une instance Linux. Chef prend également en charge les ressources powershell_script et batch pour exécuter des scripts sous Windows. Pour plus d’informations, consultez Exécution d'un PowerShell script Windows.

Mise en route
  1. Dans le répertoire opsworks_cookbooks, créez un répertoire nommé script et accédez à celui-ci.

  2. Ajoutez un fichier metadata.rb à script avec le contenu suivant.

    name "script" version "0.1.0"
  3. Initialisez et configurez Test Kitchen, comme décrit dans Exemple 1 : Installation des packageset supprimez CentOS de la liste platforms.

  4. 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 pour exécuter un script bash simple.

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 bloc code.

    Cet exemple a une commande, touch somefile, mais un bloc code 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
  1. Créez un fichier default.rb qui contient l'exemple de code précédent et enregistrez-le dans recipes.

  2. 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 exécute un fichier exécutable spécifié, y compris les fichiers de script, sous Linux ou Windows. Cette rubrique modifie le livre de recettes 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
  1. Ajoutez un sous-répertoire files à script et un sous-répertoire default à files.

  2. 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
  1. Remplacez le code de recipes/default.rb par l'exemple précédent.

  2. 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 et somefile.

Lorsque vous avez terminé, exécutez kitchen destroy pour arrêter l'instance. La section suivante utilise un nouveau livre de recettes.