cdist es una herramienta de gestión de configuración de software gratuita para sistemas similares a Unix. Administra los nodos a través de SSH mediante Bourne Shell y no requiere la instalación de ningún software adicional en los nodos de destino.
Autor (es) original (es) | Nico Schottelius, Steven Armstrong [1] |
---|---|
Versión inicial | 2010 |
Lanzamiento estable | 6.9.5 / 28 de febrero de 2021 [2] |
Repositorio | |
Escrito en | Python , shell de Bourne |
Sistema operativo | Linux , similar a Unix , macOS [3] |
Tipo | Gestión de configuración de software |
Licencia | Licencia pública general GNU versión 3 o posterior |
Sitio web | www |
Cdist se diferencia de los sistemas de administración de configuración de la competencia al elegir Bourne Shell como el idioma principal para escribir los scripts de configuración y no requiere efectivamente dependencias en los nodos de destino. Aunque el núcleo de cdist está escrito en Python , solo se requiere un intérprete en la máquina host, no en los nodos de destino.
Desarrollo
El desarrollo de cdist comenzó en 2010 en ETH Zurich y se está desarrollando activamente [4] y es mantenido principalmente por Nico Schottelius y Steven Armstrong. [5] cdist se utiliza en varias empresas en Suiza (como ETH Zurich [6] y el proyecto OMA Browser), [7] Estados Unidos, Alemania y Francia.
Características
cdist es un sistema de gestión de configuración de dependencia cero: solo requiere ssh y un shell compatible con bourne en los hosts de destino, que se proporcionan de forma predeterminada en la mayoría de las máquinas tipo Unix . [8] Debido a esto, cdist se puede usar para arrancar otros sistemas de administración de configuración. [9]
Instalacion y configuracion
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 caja creada. El punto de entrada para cualquier configuración es el script de shell conf / manifest / init, que se llama manifiesto inicial en términos de cdist. [10]
Los principales componentes de cdist son los llamados tipos, que combinan funciones. [11] 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 ejecutarse 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 maneja la configuración de lectura y la comunicación con hosts remotos. Como Ansible, cdist usa un modelo "push" para aplicar cambios de configuración: un proceso 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 dedicado a la configuración. [12]
Configuración
Los scripts de configuración definen cómo se configurarán los destinos. Por lo general, se escriben en Bourne Shell y constan de
- El manifiesto inicial, un punto de entrada donde comienzan todas las ejecuciones de configuración. Este script generalmente usa 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 real.
- Exploradores globales, pequeños scripts que brindan información sobre el sistema de destino (como el sistema operativo, el sistema de inicio y el nombre de host)
- Tipos, que describen fragmentos de configuración reutilizables. Los tipos se instancian en manifiestos y son la única forma de ejecutar código en las máquinas de destino. El nombre "tipo" se entiende como un análogo a "clase" en un lenguaje orientado a objetos, porque un tipo se puede convertir en múltiples "objetos" dependiendo de los parámetros que se le pasen. [13] Por ejemplo, el
__file
tipo se puede convertir en múltiples "objetos", cada uno representando la creación de un determinado archivo. 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 pasa un ID de objeto único. No se puede crear una instancia del mismo tipo dos veces con el mismo ID. Este ID no es aleatorio como un UUID, sino que es un identificador único que es significativo en relación con el tipo. Por ejemplo, el
__file
ID del tipo es la ruta absoluta al archivo. - Parámetros: muchos tipos no pueden describirse completamente mediante el ID de objeto y toman información adicional en forma de parámetros. El
__file
tipo toma ungroup
parámetro que especifica a qué grupo Unix debe poseer el archivo. - Exploradores: además de los exploradores globales descritos anteriormente, los tipos a veces tienen sus propios exploradores que recopilan información específica del tipo de la máquina remota. El
__file
tipo utiliza exploradores para determinar si el archivo que se está creando ya existe. A veces utiliza esta información para omitir la creación del archivo. - Manifiesto: un manifiesto de tipo puede crear instancias de otros tipos, lo que facilita la reutilización del código.
- Scripts de Gencode: el
gencode-remote
script es la forma principal de actualizar realmente la configuración de los nodos de destino.gencode-remote
se 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 hay unagencode-local
secuencia de comandos que se usa con menos frecuencia y que genera código para ejecutar localmente.
- ID de objeto: cuando un tipo se convierte en un objeto, se le pasa un ID de objeto único. No se puede crear una instancia del mismo tipo dos veces con el mismo ID. Este ID no es aleatorio como un UUID, sino que es un identificador único que es significativo en relación con el tipo. Por ejemplo, el
Shell es el lenguaje de facto para escribir scripts de configuración de cdist, pero la mayoría de los scripts se pueden escribir en cualquier idioma si contienen una línea shebang adecuada . La secuencia de comandos de Shell se ve favorecida debido a lo simple que es acceder a las variables de entorno, leer archivos y ejecutar comandos del sistema.
Idioma de configuración
Todas las partes configurables por el usuario están contenidas en manifiestos o gencode-scripts, que son scripts de shell. Se eligieron scripts de shell, porque los administradores de sistemas Unix suelen ser competentes en la lectura y escritura de scripts de shell. Además, el shell también está comúnmente disponible en posibles sistemas de destino, evitando así la necesidad de instalar software adicional allí ("cero dependencias").
cdist lee su configuración del manifiesto inicial ( conf / manifest / init ), en el que los hosts se asignan a tipos:
caso " $ __ target_host " en myhostname ) __package zsh: estado presente __addifnosuchline / tmp / cdist-welcome --line "Bienvenido a cdist" ;; esac
Cuando se usan los tipos en cdist, se les llama como programas normales en los manifiestos y pueden hacer uso del análisis de parámetros avanzado así como leer desde stdin:
# Proporcione un archivo predeterminado, pero deje que el usuario lo cambie
__file /home/frodo/.bashrc --source "/etc/skel/.bashrc" \ --state exist \ --owner frodo --mode 0600# Tomar el contenido del archivo de stdin
__file / tmp / lo que sea --owner root --group root --mode 644 --source - << HECHO Aquí va el contenido de / tmp / lo que sea HECHO
Las dependencias se expresan configurando la variable de entorno require :
__directory / tmp / foobar require = "__ directorio // tmp / foobar" __file / tmp / foobar / baz
El acceso a las rutas y archivos dentro de los tipos se proporciona mediante variables de entorno como $ __ object .
Software similar
Ansible , como cdist, utiliza un modelo de inserción sin agentes para configurar los nodos. [8] Sin embargo, Ansible normalmente requiere Python en sus objetivos, mientras que cdist no. [14] Ansible hace una distinción entre roles, escritos en un lenguaje declarativo basado en YAML, y módulos, escritos en Python. Cdist solo tiene "tipos" que sirven para los propósitos de módulos y 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 usado un sistema de administració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 . Packt . págs. 10, 17-18. ISBN 978-1783285211.
- ^ "Lanzamientos · ungleich-public / cdist · GitLab" . code.ungleich.ch . Consultado el 29 de marzo de 2021 .
- ^ "3. Sistemas operativos compatibles - documentación de cdist 6.9.5" . cdi.st . Consultado el 29 de marzo de 2021 .
- ^ [1] [ enlace muerto ]
- ^ "ungleich / cdist: administración de configuración de cdist" . GitHub.com . Archivado desde el original el 5 de julio de 2015 . Consultado el 10 de abril de 2016 .
- ^ "Copia archivada" . Archivado desde el original el 15 de enero de 2013 . Consultado el 8 de junio de 2012 .CS1 maint: copia archivada como título ( enlace )
- ^ "Copia archivada" . Archivado desde el original el 17 de agosto de 2012 . Consultado el 26 de junio de 2012 .CS1 maint: copia archivada como título ( enlace )
- ^ a b Torberntsson, Kim; Rydin, Ylva (junio de 2014). Un estudio de gestión de la configuración - Soluciones de sistemas para la implementación y configuración de software en un entorno de nube (PDF) (Tesis). Universidad de Uppsala . pp. 8, 27, 31, 42. Archivado (PDF) desde el original el 22 de noviembre de 2018.
- ^ "Grupos de Google" . Groups.google.com . Consultado el 10 de abril de 2016 .
- ^ Kruse, Christian (2016). "Despliegue automático de la configuración con cdist" . WWWTech . Archivado desde el original el 22 de noviembre de 2018 . Consultado el 22 de noviembre de 2018 .
- ^ "cdist-type (7)" . Nico.schottelius.org . Archivado desde el original el 3 de marzo de 2016 . Consultado el 10 de abril de 2016 .
- ^ Bezroukov, Nikolai. "cdist" . Softpanorama . Archivado desde el original el 8 de julio de 2017 . Consultado el 22 de noviembre de 2018 .
- ^ "13. Manifiesto - cdist 4.10.6-6-g61ac4a26 documentación" . www.nico.schottelius.org . Consultado el 26 de marzo de 2019 .
- ^ "Guía de instalación" . Ansible . Requisitos de nodo gestionado. Archivado desde el original el 4 de agosto de 2018 . Consultado el 22 de noviembre de 2018 .
enlaces externos
- Página web oficial
- código fuente
- lista de correo cdist
- cdist en código libre