Un lenguaje específico de dominio hace una gran diferencia en la cantidad de código que escribe. Por ejemplo, podría argumentar que no hay mucha diferencia entre:
chmod 640 /my/file
y
file { "/my/file":
mode => 640,
}
pero hay una gran diferencia entre estos:
FILE=/my/file
chmod 640 $FILE
chown foo $FILE
chgrp bar $FILE
wget -O $FILE "http://my.puppet.server/dist/$FILE"
# where the URL contains "Hello world"
y
file { "/my/file":
mode => 640,
owner => foo,
group => bar,
content => "Hello world",
}
¿Qué sucede si el wget falla? ¿Cómo manejará eso tu script? ¿Y qué pasa si hay algo después de eso en su script que requiere que $ FILE esté allí con el contenido correcto?
Podría argumentar que uno podría simplemente poner echo "Hello world" > $FILE
el script, excepto que en el primer ejemplo el script debe ejecutarse en el cliente, mientras que Puppet compila todo esto en el servidor. Entonces, si cambia el contenido, solo tiene que cambiarlo en el servidor y lo cambia para tantos sistemas como desee. Y Puppet maneja las dependencias y transfiere los problemas automáticamente.
Simplemente no hay comparación: las herramientas de administración de configuración adecuadas le ahorran tiempo y complejidad. Cuanto más intente hacer, más scripts de shell parecerán inadecuados y más esfuerzo ahorrará al hacerlo con títeres.
Esta será una opinión impopular, pero los sistemas de gestión de la configuración no son necesariamente mejores. A veces, lo simple es lo mejor.
Hay una curva de aprendizaje definida y una sobrecarga administrativa asociada con el sistema de configuración que elija. Después de todo, está introduciendo una dependencia. Al igual que con cualquier automatización, también debe tener cuidado de mantener la seguridad en las configuraciones implementadas.
Solo he tenido un par de instancias donde implementamos la administración de configuración y se atascó. Siempre fue cuando había una gran cantidad de sistemas con configuración repetitiva y la necesidad de realizar implementaciones configurables de cortador de cookies.
fuente
Has respondido tu propia pregunta ...
La automatización se está volviendo más escalable y formalizada . Puppet y Chef se consideran estándares en estos días (verifique los anuncios de trabajo ).
Scripts de shell-juntos adoquinada tienen su lugar, pero son no escalable en el contexto del movimiento DevOps. La legibilidad es parte de eso.
fuente
Chef hace que sea mucho más fácil administrar y versionar la configuración de una infraestructura compleja, especialmente en cualquier tipo de entorno en la nube en lugar de tener que ftp o scp manualmente un montón de scripts de shell organizados de manera no estandarizada. Dependiendo de cuántas dependencias necesite administrar, el tamaño de esta ganancia puede variar mucho, por lo que la decisión de pasar a una solución CM no es obvia para muchas personas.
El beneficio real (a menudo no reconocido) de Chef es la idempotencia . Poder estar seguro del estado de un recurso, independientemente de la combinación de recetas ejecutadas con intereses superpuestos, es un gran beneficio sobre la configuración del script de shell. Si tiene scripts de shell para la configuración ahora, pregúntese cuántos de ellos se pueden ejecutar varias veces sin consecuencias no deseadas / no deseadas?
Una solución CM adecuada ayuda a garantizar el éxito a escala al simplificar la automatización multiplataforma y la colaboración en equipo. Si bien es posible lograr todo esto con un grupo de scripts de shell bien organizado, bien mantenido y versionado; tienes que preguntarte "por qué". Chef / Puppet y tecnologías similares surgieron porque un grupo de talentosos SysOps estaban cansados de tener que resolver estos mismos problemas una y otra vez y se dispusieron a darnos una mejor opción.
Piezas clave:
fuente
Las herramientas modernas de administración de la configuración, como Puppet y Chef, le permiten definir el estado de un sistema en lugar de preocuparse por las actividades necesarias para lograr un servidor configurado.
Por ejemplo, su comando chmod asume que el archivo existe, que el usuario que posee el archivo existe, que los directorios se han creado, etc. Por lo tanto, su secuencia de comandos debe tener en cuenta todos estos requisitos previos.
Las herramientas de administración de configuración basadas en estado son más simples: solo le importa que el archivo tenga los permisos correctos. Cómo se logra eso es el problema de la herramienta.
fuente
chmod
no asume que el archivo existe porque el archivo fue creado o probado por el script.Si los servidores son desechables para usted, o si tiene motivos para resistir más de un par a la vez, un sistema CM completo satisfará sus necesidades mucho mejor que una serie de scripts de shell.
Si sus necesidades de construcción son modestas (o si le gusta hacer artesanalmente artesanalmente servidores de comercio justo orgánicos de rango libre), manténgalo simple.
Personalmente, después de haber usado ampliamente a Chef en un concierto pasado, intenté 'mantenerlo simple' en este concierto, pero realmente extrañé las primitivas, las abstracciones y el poder que Chef proporcionó. Incluso si llega a una situación en la que podría obtener lo que necesita de un par de comandos de shell, simplemente puede ejecutarlos con un bloque de 'comando', ingresando sus comandos de shell exactamente como los escribiría en shell.
Dicho esto, puede ejecutar Chef sin un servidor (chef-solo), y estoy bastante seguro de que Puppet tiene un análogo, donde aún puede aprovechar los libros de cocina y las recetas de otros sin ejecutar un servidor central.
Otro beneficio es la comunidad: hay muchas personas (muchas de las cuales serán más inteligentes y / o más experimentadas que usted). Personalmente, me encanta cuando alguien más ha hecho mi trabajo por mí, a menudo más extensamente de lo que yo hubiera hecho.
fuente
Creé un marco de automatización de servidor basado en script de shell: https://github.com/myplaceonline/posixcube
Estoy seguro de que no soy el primero en hacer este tipo de proyecto, pero no pude encontrar algo así para satisfacer mis necesidades, así que pensé que otros podrían encontrar esto útil. Solo tenía experiencia con Chef, pero cuando comencé a mirar a Ansible y a otros, quería darle una oportunidad a los guiones de shell, y hasta ahora me gusta el resultado.
fuente