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.
Structure de la recette
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
Un livre de recettes est principalement constitué d'un ensemble de recettes qui peuvent effectuer diverses tâches sur une instance. Pour clarifier l'implémentation des recettes, il est utile d'examiner un exemple simple. La recette de configuration de la HAProxycouche intégrée est la suivante. Concentrez-vous simplement sur la structure globale à ce stade et ne vous inquiétez pas trop des détails ; ils seront couverts dans les exemples suivants.
package 'haproxy' do action :install end if platform?('debian','ubuntu') template '/etc/default/haproxy' do source 'haproxy-default.erb' owner 'root' group 'root' mode 0644 end end include_recipe 'haproxy::service' service 'haproxy' do action [:enable, :start] end template '/etc/haproxy/haproxy.cfg' do source 'haproxy.cfg.erb' owner 'root' group 'root' mode 0644 notifies :restart, "service[haproxy]" end
Note
Pour cet exemple et pour d'autres exemples de recettes de travail et de fichiers connexes, consultez le AWS OpsWorks Empile les recettes
L'exemple met en évidence les éléments principaux de la recette, qui sont décrits dans les sections suivantes.
Ressources
Les recettes se composent en grande partie d'un ensemble de ressources Chef. Chacun spécifie un aspect particulier de l'état final de l'instance, par exemple un package à installer ou un service à démarrer. L'exemple a quatre ressources :
-
Une
package
ressource, qui représente un package installé, un HAProxyserveurpour cet exemple. -
Une
service
ressource, qui représente un service, le HAProxy service dans cet exemple. -
Deux
template
ressources, qui représentent des fichiers à créer à partir d'un modèle spécifié, deux fichiers HAProxy de configuration pour cet exemple.
Les ressources permettent de spécifier l'état de l'instance de façon déclarative. En arrière-plan, chaque ressource a un fournisseur associé qui effectue les tâches requises, telles que l'installation des packages, la création et la configuration des répertoires, le démarrage des services, etc. Si les détails de la tâche dépendent du système d'exploitation, la ressource a plusieurs fournisseurs et utilise celui qui est approprié pour le système. Par exemple, sur un système Red Hat Linux, le fournisseur package
utilise yum
pour installer les packages. Sur un système Ubuntu Linux, le fournisseur package
utilise apt-get
.
Vous implémentez une ressource comme un bloc de code Ruby avec le format général suivant.
resource_type
"resource_name
" doattribute1
'value1
'attribute2
'value2
' ... action :action_name
notifies :action
'resource
' end
Les éléments sont les suivants :
- Type de ressource
-
(Obligatoire) L'exemple inclut trois types de ressource,
package
,service
ettemplate
. - Nom de la ressource
-
(Obligatoire) Le nom identifie la ressource particulière et est parfois utilisé comme valeur par défaut pour l'un des attributs. Dans l'exemple,
package
représente une ressource de package nomméehaproxy
et la première ressourcetemplate
représente un fichier de configuration nommé/etc/default/haproxy
. - Attributs
-
(Facultatif) les attributs spécifient la configuration des ressources et varient en fonction du type de ressource et de la façon dont vous souhaitez configurer la ressource.
-
Les ressources
template
de l'exemple définissent explicitement un ensemble d'attributs qui spécifient la source, le propriétaire, le groupe et le mode du fichier créé. -
Les ressources
package
etservice
de l'exemple ne définissent pas explicitement les attributs.Le nom de la ressource est généralement la valeur par défaut pour un attribut obligatoire et il arrive que rien d'autre ne soit nécessaire. Par exemple, le nom de la ressource est la valeur par défaut pour la ressource
package
dont le seul attribut obligatoire estpackage_name
.
Il existe également des attributs spécialisés nommés attributs de protection, qui spécifient lorsque le fournisseur de la ressource va intervenir. Par exemple, l'attribut
only_if
indique au fournisseur de ressources d'agir uniquement si une condition spécifiée est remplie. La HAProxy recette n'utilise pas d'attributs de garde, mais ils sont utilisés dans plusieurs des exemples suivants. -
- Actions et notifications
-
(Facultatif) Les actions et les notifications spécifient les tâches qui seront effectuées par le fournisseur.
-
action
indique au fournisseur d'effectuer une action spécifiée, telle que l'installation ou la création.Chaque ressource dispose d'un ensemble d'actions qui dépendent de la ressource particulière, dont l'action par défaut. Dans l'exemple, l'action de la ressource
package
action de la ressource estinstall
, qui demande au fournisseur d'installer le package. La première ressourcetemplate
n'a pas d'élémentaction
, c'est pourquoi le fournisseur prend l'actioncreate
par défaut. -
notifies
indique au fournisseur de la ressource d'effectuer une action, mais uniquement si l'état de la ressource a été modifié.notifies
est généralement utilisé avec des ressources telles quetemplate
etfile
pour exécuter des tâches telles que le redémarrage d'un service après la modification d'un fichier de configuration. Les ressources n'ont pas de notifications par défaut. Si vous souhaitez une notification, la ressource doit avoir un élémentnotifies
explicite. Dans la HAProxy recette, la deuxièmetemplate
ressource demande à laservice
ressource haproxy de redémarrer le HAProxy service si le fichier de configuration associé a changé.
-
Les ressources dépendent parfois du système d'exploitation.
-
Certaines ressources peuvent être utilisées uniquement sur les systèmes Linux ou Windows.
Par exemple, package
installe les packages sur les systèmes Linux et windows_package installe les packages sur les systèmes Windows. -
Certaines ressources peuvent être utilisées avec n'importe quel système d'exploitation, mais ont des attributs qui sont propres à un système particulier.
Par exemple, la ressource file
peut être utilisée sur les systèmes Linux ou Windows, mais possède des ensembles distincts d'attributs pour configurer des autorisations.
Pour les descriptions de ressources standard, y compris les attributs, les actions et les notifications disponibles pour chaque ressource, consultez À propos des ressources et des fournisseurs
Contrôle de flux
Dans la mesure où les recettes sont des applications Ruby, vous pouvez utiliser les structures de contrôle Ruby pour intégrer le contrôle de flux dans une recette. Par exemple, vous pouvez utiliser une logique conditionnelle Ruby pour que la recette se comporte différemment selon les systèmes. La HAProxy recette inclut un if
bloc qui utilise une template
ressource pour créer un fichier de configuration, mais uniquement si la recette est exécutée sur un système Debian ou Ubuntu.
Un autre scénario courant consiste à utiliser une boucle pour exécuter une ressource plusieurs fois avec différents paramètres d'attribut. Par exemple, vous pouvez créer un ensemble de répertoires en utilisant une boucle pour exécuter une ressource directory
plusieurs fois avec différents noms de répertoires.
Note
Si vous ne maîtrisez pas bien Ruby, consultez la section Juste assez de Ruby pour Chef
Recettes incluses
include_recipe
inclut d'autres recettes dans votre code, ce qui vous permet d'organiser os recettes par modules et de réutiliser le même code dans plusieurs recettes. Lorsque vous exécutez la recette de l'hôte, Chef remplace chaque élément include_recipe
par le code de la recette spécifiée avant d'exécuter la recette de l'hôte. Vous identifiez une recette incluse à l'aide de la syntaxe standard de Chef cookbook_name::recipe_name
, avec recipe_name
qui omet l'extension .rb
. L'exemple inclut une recette qui représente le HAProxy service. haproxy::service
Note
Si vous utilisez include_recipe
dans les recettes qui exécutent Chef 11.10 et des versions ultérieures pour inclure une recette d'un autre livre de recettes, vous devez utiliser une instruction depends
pour déclarer la dépendance dans le fichier metadata.rb
du livre de recettes. Pour de plus amples informations, veuillez consulter Mise en œuvre des recettes : Chef 11.10.