Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Estructura de las recetas
importante
La AWS OpsWorks Stacks El servicio finalizó el 26 de mayo de 2024 y se ha desactivado tanto para los clientes nuevos como para los existentes. Recomendamos encarecidamente a los clientes que migren sus cargas de trabajo a otras soluciones lo antes posible. Si tiene preguntas sobre la migración, póngase en contacto con el AWS Support Equipo en AWS Re:post
Un libro de recetas es principalmente un conjunto de recetas que puede realizar una amplia variedad de tareas en una instancia. Para ver claramente cómo se implementan las recetas, utilizaremos un ejemplo sencillo. La siguiente es la receta de configuración para la HAProxycapa integrada. En este punto, solo tiene que fijarse en la estructura general; no se preocupe demasiado por los detalles, los trataremos en ejemplos posteriores.
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
nota
Para ver este y otros ejemplos de recetas funcionales y archivos relacionados, consulte la AWS OpsWorks Apila recetas integradas.
En el ejemplo siguiente se resaltan los principales elementos de las recetas, que se describen en las secciones posteriores.
Recursos
Las recetas son principalmente un conjunto de recursos de Chef. Cada uno especifica un aspecto determinado del estado final de la instancia, como un paquete que debe instalarse o un servicio que debe iniciarse. El ejemplo tiene cuatro recursos:
-
Un
package
recurso, que representa un paquete instalado, un HAProxyservidorpara este ejemplo. -
Un
service
recurso, que representa un servicio, el HAProxy servicio de este ejemplo. -
Dos
template
recursos, que representan archivos que se van a crear a partir de una plantilla específica, dos archivos de HAProxy configuración para este ejemplo.
Los recursos permiten especificar el estado de la instancia de una forma declarativa. En segundo plano, cada recurso tiene asociado un proveedor que se encarga de realizar las tareas necesarias, como, por ejemplo, instalar paquetes, crear y configurar directorios, iniciar servicios, etc. Si los detalles de la tarea dependen de un sistema operativo determinado, el recurso dispone de varios proveedores y utiliza el más adecuado para el sistema. Por ejemplo, en un sistema Red Hat Linux, el proveedor de package
utiliza yum
para instalar paquetes. En un sistema Ubuntu Linux, el proveedor de package
utiliza apt-get
.
Puede implementar un recurso como un bloque de código Ruby con el formato general siguiente.
resource_type
"resource_name
" doattribute1
'value1
'attribute2
'value2
' ... action :action_name
notifies :action
'resource
' end
Los elementos son:
- Tipo de recurso
-
(Obligatorio) El ejemplo incluye tres tipos de recursos,
package
,service
ytemplate
. - Nombre del recurso
-
(Obligatorio) El nombre identifica el recurso en concreto y a veces se utiliza como valor predeterminado de uno de los atributos. En el ejemplo,
package
representa un recurso de paquete denominadohaproxy
y el primer recursotemplate
representa un archivo de configuración denominado/etc/default/haproxy
. - Atributos
-
(Opcional) Los atributos sirven para especificar la configuración del recurso y varían en función del tipo de recurso y de cómo desea configurarlo.
-
Los recursos
template
del ejemplo definen explícitamente un conjunto de atributos que especifican el origen, el propietario, el grupo y el modo del archivo creado. -
Los recursos
package
yservice
del ejemplo no definen explícitamente ningún atributo.Normalmente, el nombre del recurso es el valor predeterminado de un atributo obligatorio y a veces es todo lo que se necesita. Por ejemplo, el nombre del recurso es el valor predeterminado del atributo
package
del recursopackage_name
, que es el único atributo obligatorio.
Existen también algunos atributos especializados denominados atributos de guardia, que especifican cuándo tiene que intervenir el proveedor del recurso. Por ejemplo, el atributo
only_if
indica al proveedor de recursos que solo tiene que intervenir si se cumple una condición especificada. La HAProxy receta no utiliza atributos de protección, pero los utilizan varios de los ejemplos siguientes. -
- Acciones y notificaciones
-
(Opcional) Las acciones y las notificaciones sirven para especificar qué tareas debe llevar a cabo el proveedor.
-
action
indica al proveedor que debe ejecutar una acción concreta, como, por ejemplo, instalar o crear.Cada recurso tiene un conjunto de acciones que dependen del recurso concreto, entre las que figura la acción predeterminada. En el ejemplo, la acción del recurso
package
esinstall
, que indica al proveedor que instale el paquete. El primer recursotemplate
no tiene ningún elementoaction
, por lo que el proveedor ejecuta la accióncreate
de forma predeterminada. -
notifies
indica al proveedor de otro recurso que ejecute una acción, aunque solo si ha cambiado el estado del recurso.notifies
se suele utilizar con recursos comotemplate
ofile
para ejecutar tareas como reiniciar un servicio después de modificar un archivo de configuración. Los recursos no tienen notificaciones predeterminadas. Si quiere una notificación, el recurso debe tener un elementonotifies
explícito. En la HAProxy receta, el segundotemplate
recurso notifica al recurso haproxyservice
que reinicie el HAProxy servicio si el archivo de configuración asociado ha cambiado.
-
En ocasiones, los recursos dependen del sistema operativo.
-
Algunos recursos pueden utilizarse únicamente en sistemas Linux o Windows.
Por ejemplo, package
instala paquetes en sistemas Linux y windows_package instala paquetes en sistemas Windows. -
Algunos recursos se pueden utilizar con cualquier sistema operativo, pero tienen atributos específicos de un sistema determinado.
Por ejemplo, el recurso file
puede utilizarse en sistemas Linux o Windows, pero tiene conjuntos de atributos diferentes para configurar los permisos.
Par obtener descripciones de recursos estándar, como los atributos, acciones y notificaciones disponibles para cada recurso, consulte la sección de información sobre recursos y proveedores
Control del flujo
Dado que las recetas son aplicaciones Ruby, puede utilizar las estructuras de control de Ruby para incorporar un control de flujo en la receta. Por ejemplo, puede utilizar la lógica condicional de Ruby para que la receta se comporte de forma distinta según el sistema. La HAProxy receta incluye un if
bloque que usa un template
recurso para crear un archivo de configuración, pero solo si la receta se ejecuta en un sistema Debian o Ubuntu.
Otro escenario habitual suele producirse cuando se usa un bucle para ejecutar un recurso varias veces con diferentes valores de atributo. Por ejemplo, puede crear un conjunto de directorios utilizando un bucle para ejecutar un recurso directory
varias veces con nombres de directorio diferentes.
nota
Si no conoce Ruby, consulte la página de Ruby
Recetas incluidas
include_recipe
incluye otras recetas en el código, lo que le permite modularizar las recetas y volver a utilizar el mismo código en varias recetas. Cuando ejecuta la receta host, Chef sustituye cada elemento include_recipe
por el código de la receta especificada antes de ejecutar la receta host. Las recetas incluidas se identifican con la sintaxis cookbook_name::recipe_name
de Chef estándar, donde recipe_name
omite la extensión .rb
. El ejemplo incluye una recetahaproxy::service
, que representa el HAProxy servicio.
nota
Si utiliza include_recipe
en recetas que se ejecutan en Chef 11.10 y más tarde incluye una receta de otro libro de recetas, debe utilizar una declaración depends
para declarar la dependencia en el archivo metadata.rb
del libro de recetas. Para obtener más información, consulte Implementación de recetas: Chef 11.10.