cdist es una herramienta de gestión de configuración de software libre para sistemas tipo Unix . Gestiona nodos a través de SSH utilizando el intérprete de comandos Bourne Shell y no requiere la instalación de ningún software adicional en los nodos de destino.
Cdist se diferencia de otros sistemas de gestión de configuración al elegir Bourne Shell como lenguaje principal para escribir scripts de configuración y prácticamente no requerir dependencias en los nodos de destino. Si bien el núcleo de cdist está escrito en Python , solo se necesita un intérprete en la máquina anfitriona, no en los nodos de destino.
Desarrollo
El desarrollo de cdist comenzó en 2010 en ETH Zurich y se está desarrollando activamente [ 5 ] y es mantenido principalmente por Nico Schottelius y Steven Armstrong. [ 6 ] cdist se utiliza en varias empresas en Suiza (como ETH Zurich [ 7 ] y el proyecto OMA Browser), [ 8 ] los EE. UU., Alemania y Francia.
Características
cdist es un sistema de gestión de configuración sin dependencias: solo requiere ssh y un intérprete de comandos compatible con Bourne en los hosts de destino, que se proporcionan por defecto en la mayoría de las máquinas tipo Unix . [ 9 ] Debido a esto, cdist se puede usar para arrancar otros sistemas de gestión de configuración. [ 10 ]
Instalación y configuración
cdist no se instala normalmente como un paquete (como .deb o .rpm), sino a través de git . Todos los comandos se ejecutan desde la copia creada. El punto de entrada para cualquier configuración es el script de shell conf/manifest/init, que en términos de cdist se denomina manifiesto inicial. [ 11 ]
Los componentes principales de cdist son los llamados tipos, que agrupan funcionalidades. [ 12 ] Los tipos consisten esencialmente en una serie de scripts de shell para definir qué tipos reutiliza un tipo y qué código se genera para ser ejecutado en el host de destino.
Arquitectura
cdist se divide en dos componentes:
- El núcleo
- Los scripts de configuración
Centro
El núcleo de Cdist se encarga de leer la configuración y comunicarse con hosts remotos. Al igual que Ansible, Cdist utiliza un modelo de "envío" para aplicar los cambios de configuración: un proceso de Cdist en la máquina "host" se conecta a cualquier número de nodos remotos a través de SSH y luego realiza actualizaciones de configuración en esos nodos. Cdist puede configurar varios hosts en paralelo para reducir el tiempo de configuración. [ 13 ]
Configuración
Los scripts de configuración definen cómo se deben configurar los objetivos. Normalmente están escritos en Bourne Shell y constan de:
- El manifiesto inicial es el punto de entrada donde comienzan todas las ejecuciones de configuración. Este script suele utilizar información sobre el nodo de destino, como su nombre de host y sistema operativo, para llamar a otros scripts más específicos que realizan la configuración propiamente dicha.
- Exploradores globales, pequeños scripts que recopilan información sobre el sistema objetivo (como el sistema operativo, el sistema de inicio y el nombre de host).
- Los tipos describen fragmentos de configuración reutilizables. Se instancian en los manifiestos y son la única forma de ejecutar código en las máquinas de destino. El término "tipo" es análogo a "clase" en un lenguaje orientado a objetos, ya que un tipo puede convertirse en múltiples "objetos" según los parámetros que se le pasen. [ 14 ] Por ejemplo, un
__filetipo puede convertirse en múltiples "objetos", cada uno de los cuales representa la creación de un archivo específico. Los "roles" de Ansible son el equivalente a los tipos de cdist. Los tipos pueden tener muchos componentes:- ID de objeto: Cuando un tipo se convierte en un objeto, se le asigna un ID de objeto único. El mismo tipo no puede instanciarse dos veces con el mismo ID. Este ID no es aleatorio como un UUID, sino un identificador único con significado en relación con el tipo. Por ejemplo, el
__fileID del tipo puede ser la ruta absoluta al archivo. - Parámetros: Muchos tipos no pueden describirse completamente mediante el ID del objeto y requieren información adicional en forma de parámetros. El
__filetipo acepta ungroupparámetro que especifica a qué grupo de Unix debe pertenecer el archivo. - Exploradores: Además de los exploradores globales descritos anteriormente, algunos tipos de datos cuentan con sus propios exploradores que recopilan información específica del tipo desde la máquina remota. El
__filetipo de datos utiliza estos exploradores para determinar si el archivo que se está creando ya existe. En ocasiones, utiliza esta información para omitir la creación del archivo. - Manifiesto: Un manifiesto de tipo puede instanciar otros tipos, lo que facilita la reutilización del código.
- Scripts de Gencode: El
gencode-remotescript es la principal forma de actualizar la configuración de los nodos de destino.gencode-remoteSe ejecuta en la máquina local, pero su salida estándar se envía a la máquina remota y se ejecuta como un script de shell. También existe un script menos utilizadogencode-localque genera código para ejecutarse localmente.
- ID de objeto: Cuando un tipo se convierte en un objeto, se le asigna un ID de objeto único. El mismo tipo no puede instanciarse dos veces con el mismo ID. Este ID no es aleatorio como un UUID, sino un identificador único con significado en relación con el tipo. Por ejemplo, el
La shell es el lenguaje estándar para escribir scripts de configuración de cdist, pero la mayoría de los scripts se pueden escribir en cualquier lenguaje si contienen una línea shebang adecuada . Se prefiere la escritura de scripts de shell por su sencillez para acceder a variables de entorno, leer archivos y ejecutar comandos del sistema.
Lenguaje de configuración
Todas las partes configurables por el usuario se encuentran en manifiestos o scripts de gencode, que son scripts de shell. Se eligieron los scripts de shell porque los administradores de sistemas Unix suelen tener experiencia en su lectura y escritura. Además, el shell suele estar disponible en los sistemas de destino potenciales, lo que evita la necesidad de instalar software adicional ("cero dependencias").
cdist lee su configuración del manifiesto inicial ( conf/manifest/init ), en el que los hosts se asignan a tipos:
case " $__target_host " in myhostname ) __package zsh --state present __addifnosuchline /tmp/cdist-welcome --line "Bienvenido a cdist" ;; esacCuando se utilizan los tipos en cdist, se llaman como programas normales en manifiestos y pueden hacer uso del análisis avanzado de parámetros, así como de la lectura desde stdin:
# Proporcionar un archivo predeterminado, pero permitir que el usuario lo cambie __file /home/frodo/.bashrc --source "/etc/skel/.bashrc" \ --state exists \ --owner frodo --mode 0600# Tomar el contenido del archivo desde stdin __file /tmp/whatever --owner root --group root --mode 644 --source - << HECHO Aquí va el contenido de /tmp/whatever HECHOLas dependencias se expresan configurando la variable de entorno require :
__directorio /tmp/foobar require="__directory//tmp/foobar" __file /tmp/foobar/baz
El acceso a rutas y archivos dentro de los tipos se proporciona mediante variables de entorno como $__object .
Software similar
Ansible , al igual que cdist, utiliza un modelo de configuración push sin agente para configurar nodos. [ 9 ] Sin embargo, Ansible requiere Python para algunos tipos de objetivos, [ 15 ] mientras que cdist no. Ansible distingue entre roles, escritos en un lenguaje declarativo basado en YAML, y módulos, escritos en Python. Cdist solo tiene "tipos" que cumplen las funciones tanto de módulos como de roles y están escritos principalmente en Bourne Shell. El enfoque de Cdist podría ser preferible porque Shell es familiar para muchos administradores de sistemas que nunca antes han utilizado un sistema de gestión de configuración, pero el lenguaje declarativo de Ansible es posiblemente más legible y apropiado.
Referencias
- ^ Sharma, Rishabh; Soni, Mitesh (15 de marzo de 2015). Chef de aprendizaje . Paquete . págs. 10, 17 y 18. ISBN 978-1783285211.
- ↑ "Tags - cdist - Gitea: Git with a cup of tea" . code.ungleich.ch . Consultado el 15 de enero de 2022 .
- ↑ "3. Sistemas operativos compatibles — documentación de cdist 6.9.8" . cdi.st. Consultado el 15 de enero de 2022 .
- ↑ ".github/README.md en df2f84b694afee8137b97695f6424c5aec314717 · skonfig/.github" . GitHub.com .
- ↑
- ↑ "ungleich/cdist: gestión de configuración de cdist" . GitHub.com . Archivado del original el 5 de julio de 2015. Consultado el 10 de abril de 2016 .
- ↑ "Gestión de configuración de Cdist" . Consultado el 8 de junio de 2012 .
{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace ) - ↑ "Acerca del navegador OMA" . Archivado del original el 17 de agosto de 2012. Consultado el 26 de junio de 2012 .
- 1 2 Torberntsson, Kim; Rydin, Ylva (junio de 2014). Un estudio de la gestión de la configuración: soluciones de sistemas para el despliegue y la configuración de software en un entorno de nube (PDF) (Tesis). Universidad de Uppsala . págs. 8, 27, 31, 42. Archivado (PDF) del original el 22 de noviembre de 2018.
- ↑ "Grupos de Google" . Groups.google.com . Consultado el 10 de abril de 2016 .
- ↑ Kruse, Christian (2016). "Despliegue de configuración automática con cdist" . WWWTech . Archivado del original el 22 de noviembre de 2018. Recuperado el 22 de noviembre de 2018 .
- ↑ "cdist-type(7)" . Nico.schottelius.org . Archivado del original el 3 de marzo de 2016 . Recuperado el 10 de abril de 2016 .
- ↑ Bezroukov, Nikolai. "cdist" . Softpanorama . Archivado del original el 8 de julio de 2017. Recuperado el 22 de noviembre de 2018 .
- ↑ "13. Manifiesto — documentación cdist 4.10.6-6-g61ac4a26" . www.nico.schottelius.org . Consultado el 26 de marzo de 2019 .
- ↑ "Instalación de Ansible — Documentación de Ansible" . docs.ansible.com . Consultado el 13 de enero de 2023.
El nodo administrado (la máquina que administra Ansible) no requiere que Ansible esté instalado, pero sí requiere Python 2.7 o Python 3.5 - 3.11 para ejecutar el código de la biblioteca de Ansible.
Enlaces externos
- Sitio web oficial
- código fuente
- lista de correo de cdist
- cdist en freecode
- Gestión de la configuración
- Software libre programado en Python
- Software de 2010
- utilidades de configuración de Linux
- macOS
- Software relacionado con la gestión de paquetes de Linux
- Software relacionado con la gestión de paquetes de Unix