ruby - Chef bibliotecas o definiciones?
(1)
Entonces, esto es "basado principalmente en la opinión", pero lo contestaré de todos modos. Hay 4 opciones distintas aquí:
- Definición
- LWRP
- HWRP
- "Biblioteca"
Una definición es solo una envoltura alrededor de uno o más recursos con alguna parametrización. Sin embargo, las definiciones no se agregan a la colección de recursos. Lo que significa que no puede "notificar" o desencadenar eventos en una definición. Son únicamente para envolver y nombrar una serie de pasos repetibles que se encuentran en una receta.
Un LWRP (recurso y proveedor de peso ligero) es un DSL específico de Chef que realmente se compila en un HWRP (recurso y proveedor de peso pesado) en tiempo de ejecución. Tanto los LWRPs como los HWRP son extensiones de Chef. Además de incluir una serie de tareas repetibles, * los WRP crearán un recurso de nivel superior en Chef (como template
o package
) que también está disponible para usar en su receta y en las recetas de otros libros de cocina.
La diferencia entre LWRP y HWRP es realmente la Ruby. Los HWRP usan clases de Ruby en toda regla. Si no eres un desarrollador de Ruby, pueden ser un poco intimidantes. No obstante, debe intentarlo antes de escribir y LWRP. Los LWRP utilizan un DSL específico de Chef para crear recursos. Al final del día, compilan (aproximadamente) el mismo código que la contraparte de peso pesado. Uniré algunas referencias al final. Usted tiene acceso a los recursos de Chef dentro de cualquiera de las implementaciones, así como también a run_context.
Finalmente, las "bibliotecas" (observe las citas) a menudo son mal entendidas y abusadas. Son códigos Ruby, evaluados como Ruby, por lo que pueden hacer casi cualquier cosa. Los HWRP son en realidad una forma de biblioteca. A veces las personas usan las bibliotecas como "ayudantes". best_ip_for
un módulo de ayuda con métodos como best_ip_for
o aggregate_some_data
y luego "mezclarán" (Rubyism) esa biblioteca en sus recetas o recursos para SECAR las cosas. Otras veces, las bibliotecas pueden usarse para "piratear" al propio Chef. El libro de cocina de partial-search es un buen ejemplo de esto. Facebook habló sobre cómo limitaron también la cantidad de atributos enviados al servidor el año pasado en ChefConf. Las bibliotecas son realmente un territorio indefinido porque son las claves del reino.
Entonces, aunque no he respondido realmente a tu pregunta (porque está basada en la opinión), espero que te haya dado suficiente información sobre la mejor dirección para avanzar. Tenga en cuenta que cada infraestructura es un copo de nieve especial y no hay una respuesta correcta ; Solo hay una mejor respuesta. Sugiero compartir esta información con su equipo y sopesar los pros y los contras de cada enfoque. También puede probar la lista de correo de Chef, en la que las personas le darán muchas opiniones.
Recursos:
Siendo relativamente nuevo en Chef, debo crear bibliotecas o definiciones a partir de recetas existentes.
Allí las recetas utilizan el recurso bash, el recurso de bloque ruby ββ(que notifica a otro recurso de bloque ruby ββcon tiempo retrasado), el recurso de plantilla nuevamente, que notifica un bloque ruby, etc.
¿Cuál sería el mejor enfoque para esto? Biblioteca o definición?
He leído que si uso la definición, no podré notificar un recurso dentro de la definición, ¿eso significa que puedo notificar un recurso en un archivo de definición diferente?
También leí que en las bibliotecas no puedes usar los recursos directamente. Si esto es cierto, ¿cómo puedo usar un recurso dentro de mi biblioteca?