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 6 : Création de fichiers
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
Une fois que vous avez créé des répertoires, vous devez souvent le remplir avec les fichiers de configuration, les fichiers de données, etc. Cette rubrique présente deux façons d'installer les fichiers sur une instance.
Rubriques
Installation d'un fichier à partir d'un livre de recettes
La façon la plus simple d'installer un fichier sur une instance est d'utiliser une ressource cookbook_file
/srv/www/shared
après la création du répertoire. A titre de référence, voici la recette d'origine.
directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end
Pour configurer le livre de recettes
-
Dans le répertoire
opsworks_cookbooks
, créez un répertoire nommécreatefile
et accédez à celui-ci. -
Ajoutez un fichier
metadata.rb
àcreatefile
avec le contenu suivant.name "createfile" version "0.1.0"
-
Initialisez et configurez Test Kitchen, comme décrit dans Exemple 1 : Installation des packageset supprimez CentOS de la liste
platforms
. -
Ajoutez un sous-répertoire
recipes
àcreatefile
.
Le fichier à installer contient les JSON données suivantes.
{ "my_name" : "myname", "your_name" : "yourname", "a_number" : 42, "a_boolean" : true }
Pour configurer le fichier de données
-
Ajoutez un sous-répertoire
files
àcreatefile
et un sous-répertoiredefault
àfiles
. N'importe quel fichier installé aveccookbook_file
doit être dans un sous-répertoire defiles
, par exemplefiles/default
dans cet exemple.Note
Si vous souhaitez spécifier des fichiers différents pour différents systèmes, vous pouvez mettre chaque fichier propre au système dans un sous-dossier nommé pour le système, par exemple
files/ubuntu
. La ressourcecookbook_file
copie le fichier propre au système approprié, s'il existe, et utilise le fichierdefault
dans le cas contraire. Pour plus d'informations, consultez cookbook_file. -
Créez un fichier nommé
example_data.json
avec le nom JSON de l'exemple précédent et ajoutez-le àfiles/default
.
La recette suivante copie example_data.json
dans un emplacement spécifié.
directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end cookbook_file "/srv/www/shared/example_data.json" do source "example_data.json" mode 0644 action :create_if_missing end
Une fois que la ressource du répertoire a créé /srv/www/shared
, la ressource cookbook_file
copie example_data.json
dans ce répertoire et définit également l'utilisateur, le groupe et le mode du fichier.
Note
La ressource cookbook_file
présente une nouvelle action : create_if_missing
. Vous pouvez également utiliser une action create
, mais elle remplace un fichier existant. Si vous ne souhaitez pas remplacer quoi que ce soit, utilisez create_if_missing
, qui installe example_data.json
uniquement s'il n'existe pas déjà.
Pour exécuter la recette
-
Exécutez
kitchen destroy
pour commencer avec une instance propre. -
Créez un fichier
default.rb
qui contient la recette précédente et enregistrez-le dansrecipes
. -
Exécutez
kitchen converge
, puis connectez-vous à l'instance pour vérifier que/srv/www/shared
contient le fichierexample_data.json
.
Création d'un fichier à partir d'un modèle
La ressource cookbook_file
est utile dans certains cas, mais elle installe simplement les fichiers qui se trouvent dans le livre de recettes. Une ressource template
Cet exemple modifie le livre de recettes createfile
de façon à utiliser une ressource template
pour installer une version légèrement modifiée de example_data.json
.
Voici à quoi ressemblera le fichier installé.
{ "my_name" : "myname", "your_name" : "yourname", "a_number" : 42, "a_boolean" : true, "a_string" : "some string", "platform" : "ubuntu" }
Les ressources de modèle sont généralement utilisés conjointement aux fichiers d'attributs, c'est pourquoi l'exemple en utilise un pour définir les valeurs suivantes.
default['createfile']['my_name'] = 'myname' default['createfile']['your_name'] = 'yourname' default['createfile']['install_file'] = true
Pour configurer le livre de recettes
-
Supprimez le répertoire
createfile
du livre de recettesfiles
et son contenu. -
Ajoutez un sous-répertoire
attributes
àcreatefile
et ajoutez un fichierdefault.rb
àattributes
avec les définitions d'attributs précédentes.
Un modèle est un fichier .erb
qui est globalement une copie du fichier final, avec une partie du contenu représenté par les espaces réservés. Lorsque la ressource template
crée le fichier, elle copie le contenu du modèle dans le fichier spécifié et remplace les espaces réservés par leurs valeurs attribuées. Voici le modèle pour example_data.json
.
{ "my_name" : "<%= node['createfile']['my_name'] %>", "your_name" : "<%= node['createfile']['your_name'] %>", "a_number" : 42, "a_boolean" : <%= @a_boolean_var %>, "a_string" : "<%= @a_string_var %>", "platform" : "<%= node['platform'] %>" }
Les valeurs <%=...%>
sont des espaces réservés.
-
<%=node[...]%>
représente une valeur d'attribut de nœud.Pour cet exemple, la valeur « your_name » est un espace réservé qui représente une des valeurs d'attributs du fichier d'attribut du livre de recettes.
-
<%=@...%>
représente la valeur d'une variable qui est définie dans le modèle de ressource, comme nous le verrons bientôt.
Pour créer le modèle de fichier
-
Ajoutez un sous-répertoire
templates
au livre de recettescreatefile
et un sous-répertoiredefault
àtemplates
.Note
Le répertoire
templates
fonctionne globalement comme le répertoirefiles
. Vous pouvez mettre des modèles propres au système dans un sous-répertoire commeubuntu
qui est nommé pour le système. La ressourcetemplate
utilise le modèle propre au système approprié s'il existe et elle utilise le modèledefault
s'il n'existe pas. -
Créez un fichier appelé
example_data.json.erb
et placez-le dans le répertoiretemplates/default
. Le nom du modèle est arbitraire, mais vous le créez généralement en ajoutant.erb
au nom du fichier, avec les extensions.
La recette suivante utilise une ressource template
pour créer /srv/www/shared/example_data.json
.
directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end template "/srv/www/shared/example_data.json" do source "example_data.json.erb" mode 0644 variables( :a_boolean_var => true, :a_string_var => "some string" ) only_if {node['createfile']['install_file']} end
La ressource template
crée example_data.json
à partir d'un modèle et l'installe dans /srv/www/shared
.
-
Le nom du modèle,
/srv/www/shared/example_data.json
, spécifie le chemin et le nom du fichier installé. -
L'attribut
source
spécifie le modèle utilisé pour créer le fichier. -
L'attribut
mode
spécifie le mode du fichier installé. -
La ressource définit deux variables,
a_boolean_var
eta_string_var
.Lorsque la ressource crée
example_data.json
, elle remplace les espaces réservés des variables du modèle par les valeurs correspondantes issues de la ressource. -
L'attribut
only_if
de protection demande à la ressource de créer le fichier uniquement si['createfile']['install_file']
est défini surtrue
.
Pour exécuter la recette
-
Exécutez
kitchen destroy
pour commencer avec une instance propre. -
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 le fichier se trouve dans/srv/www/shared
et a le contenu correct.
Lorsque vous avez terminé, exécutez kitchen destroy
pour arrêter l'instance. La section suivante utilise un nouveau livre de recettes.