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 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
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écreatefileet accédez à celui-ci. -
Ajoutez un fichier
metadata.rbàcreatefileavec 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 données JSON 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àcreatefileet un sous-répertoiredefaultàfiles. N'importe quel fichier installé aveccookbook_filedoit être dans un sous-répertoire defiles, par exemplefiles/defaultdans 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_filecopie le fichier propre au système approprié, s'il existe, et utilise le fichierdefaultdans le cas contraire. Pour plus d'informations, consultez cookbook_file. -
Créez un fichier nommé
example_data.jsonavec le JSON de l'exemple précédent et ajoutez-le dansfiles/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 destroypour commencer avec une instance propre. -
Créez un fichier
default.rbqui 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/sharedcontient 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
createfiledu livre de recettesfileset son contenu. -
Ajoutez un sous-répertoire
attributesàcreatefileet ajoutez un fichierdefault.rbàattributesavec 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
templatesau livre de recettescreatefileet un sous-répertoiredefaultàtemplates.Note
Le répertoire
templatesfonctionne globalement comme le répertoirefiles. Vous pouvez mettre des modèles propres au système dans un sous-répertoire commeubuntuqui est nommé pour le système. La ressourcetemplateutilise le modèle propre au système approprié s'il existe et elle utilise le modèledefaults'il n'existe pas. -
Créez un fichier appelé
example_data.json.erbet placez-le dans le répertoiretemplates/default. Le nom du modèle est arbitraire, mais vous le créez généralement en ajoutant.erbau 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
sourcespécifie le modèle utilisé pour créer le fichier. -
L'attribut
modespécifie le mode du fichier installé. -
La ressource définit deux variables,
a_boolean_vareta_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_ifde 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 destroypour commencer avec une instance propre. -
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 le fichier se trouve dans/srv/www/sharedet 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.