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 3 : Création de répertoires
Important
Le AWS OpsWorks Stacks service a atteint sa fin de vie 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
Lorsque vous installez un package sur une instance, vous devez souvent créer des fichiers de configuration et les placer dans les répertoires appropriés. Toutefois, ces répertoires peuvent ne pas exister à ce stade. De plus, vous devrez parfois créer des répertoires pour les données, les fichiers journaux, etc. Par exemple, vous démarrez d'abord le système Ubuntu que vous utilisez pour la plupart des exemples, le /srv
répertoire ne contient aucun sous-répertoire. Si vous installez un serveur d'applications, vous aurez probablement besoin d'un répertoire /srv/www/
, voire de quelques sous-répertoires pour les fichiers de données, les journaux, etc. La recette suivante crée /srv/www/
sur une instance.
directory "/srv/www/" do mode 0755 owner 'root' group 'root' action :create end
Vous utilisez une ressource directory
path
de la ressource. L'exemple crée donc /srv/www/
et spécifie ses propriétés mode
, owner
et group
.
Pour exécuter la recette
-
Créez un répertoire dans
opsworks_cookbooks
, nommécreatedir
et accédez à celui-ci. -
Initialisez et configurez Test Kitchen, comme décrit dans Exemple 1 : Installation des packages et ajoutez un répertoire
recipes
danscreatedir
. -
Ajoutez un fichier
default.rb
avec le code de recette dans le sous-répertoirerecipes
du livre de recettes. -
Exécutez
kitchen converge
pour exécuter la recette. -
Exécutez
kitchen login
, accédez à/srv
et vérifiez qu'il possède un sous-répertoirewww
. -
Exécutez
exit
pour revenir à votre poste de travail, mais n'interrompez pas l'exécution de l'instance.
Note
Pour créer un répertoire relatif à votre répertoire de base sur l'instance, utilisez #{ENV['HOME']}
pour représenter le répertoire de base. Par exemple, ce qui suit crée le répertoire ~/shared
.
directory "#{ENV['HOME']}/shared" do ... end
Supposons que vous souhaitiez créer un répertoire plus imbriqué, par exemple /srv/www/shared
. Vous pouvez modifier la recette précédente comme suit.
directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' action :create end
Pour exécuter la recette
-
Remplacez le code de
default.rb
par la recette précédente. -
Exécutez
kitchen converge
à partir du répertoirecreatedir
. -
Pour vérifier que le répertoire a bien été créé, exécutez
kitchen login
, accédez à/srv/www
et vérifiez qu'il contient un sous-répertoireshared
. -
Exécutez
kitchen destroy
pour arrêter l'instance.
Vous remarquerez que la commande kitchen converge
a été exécutée nettement plus rapidement. En effet, l'instance est déjà en cours d'exécution et il n'est donc pas nécessaire de la démarrer, d'installer Chef, etc. Test Kitchen se contente de copier le livre de recettes mis à jour sur l'instance et démarre une exécution de Chef.
Exécutez maintenant kitchen converge
à nouveau afin d'exécuter la recette sur une nouvelle instance. Vous voyez maintenant le résultat suivant.
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] >>>>>> ----------------------
Que s’est-il passé ? Le problème est que, par défaut, une ressource directory
peut créer un seul répertoire à la fois ; elle ne peut pas créer de chaîne de répertoires. La raison pour laquelle la recette a fonctionné plus tôt est que la première recette que vous avez exécutée sur l'instance a déjà créé /srv/www
, c'est pourquoi la création de /srv/www/shared
a créé un seul sous-répertoire.
Note
Lorsque vous exécutez kitchen converge
, veillez à savoir si vous exécutez vos recettes sur une nouvelle instance ou sur une instance existante. Vous obtiendrez peut-être des résultats différents.
Pour créer une chaîne de sous-répertoires, ajoutez un attribut recursive
à directory
et définissez-le sur true
. La recette suivante crée /srv/www/shared
directement sur une instance propre.
directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end