Este artículo tiene varios problemas. Ayúdenos a mejorarlo o a discutir estos problemas en la página de discusión . ( Aprenda cómo y cuándo eliminar estos mensajes )
|
Autor(es) original(es) | Nico Schottelius y Steven Armstrong [1] |
---|---|
Lanzamiento inicial | 2010 ( 2010 ) |
Versión estable | 6.9.8 / 24 de agosto de 2021 ( 24/08/2021 ) [2] |
Repositorio |
|
Escrito en | Python , shell 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.cdi.st |
cdist es una herramienta de gestión de configuración de software libre para sistemas tipo Unix . Administra nodos a través de SSH utilizando Bourne Shell y no requiere la instalación de ningún software adicional en los nodos de destino.
Cdist se diferencia de los sistemas de gestión de configuración de la competencia al elegir Bourne Shell como el lenguaje principal para escribir scripts de configuración y al no requerir 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.
Cdist se bifurcó en agosto de 2022 como skonfig . [4]
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 está utilizando en varias empresas en Suiza (como ETH Zurich [7] y el proyecto OMA Browser), [8] Estados Unidos, Alemania y Francia.
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 . [9] Debido a esto, cdist se puede utilizar para iniciar otros sistemas de gestión de configuración. [10]
Por lo general, cdist no se instala como un paquete (como .deb o .rpm), sino a través de git . Todos los comandos se ejecutan desde el checkout creado. El punto de entrada para cualquier configuración es el script de shell conf/manifest/init, que se denomina manifiesto inicial en términos de cdist. [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 ejecutarse en el host de destino.
cdist se divide en dos componentes:
El núcleo de Cdist se encarga de leer la configuración y comunicarse con los hosts remotos. Al igual que Ansible, cdist utiliza un modelo "push" para aplicar los 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. [13]
Los scripts de configuración definen cómo se configurarán los objetivos. Normalmente se escriben en Bourne Shell y constan de:
__file
tipo se puede convertir en múltiples "objetos", cada uno de los cuales representa 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:__file
identificador del tipo es la ruta absoluta al archivo.__file
tipo toma un group
parámetro que especifica a qué grupo Unix debe pertenecer el archivo.__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.gencode-remote
script es la forma principal de actualizar 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 un script que se usa con menos frecuencia gencode-local
y que genera código para ejecutarlo localmente.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 lenguaje si contienen una línea shebang adecuada . Los scripts de shell son los preferidos debido a lo simple que es acceder a las variables del entorno, leer archivos y ejecutar comandos del sistema.
Todas las partes configurables por el usuario están contenidas en manifiestos o scripts gencode, que son scripts de shell. Se eligieron scripts de shell porque los administradores de sistemas Unix suelen ser expertos en la lectura y escritura de scripts de shell. Además, el shell también suele estar disponible en los sistemas de destino potenciales, lo que evita la necesidad de instalar software adicional en ellos ("dependencias cero").
cdist lee su configuración desde el manifiesto inicial ( conf/manifest/init ), en el que los hosts están asignados a los tipos:
caso " $__target_host " en minombredehost ) __package zsh --state present __addifnosuchline /tmp/cdist-welcome --line "Bienvenido a cdist" ;; esac
Al utilizar los tipos en cdist, se los llama como programas normales en manifiestos y pueden hacer uso del análisis avanzado de parámetros, así como de la lectura desde la entrada estándar:
# Proporciona un archivo predeterminado, pero permite que el usuario lo cambie
__file /home/frodo/.bashrc --source "/etc/skel/.bashrc" \ --state existe \ --owner frodo --mode 0600 # Toma el contenido del archivo de la entrada estándar
__file /tmp/whatever --owner root --group root --mode 644 --source - << HECHO Aquí va el contenido de /tmp/whatever HECHO
Las dependencias se expresan configurando la variable de entorno requerida :
__directorio /tmp/foobar require="__directorio//tmp/foobar" __archivo /tmp/foobar/baz
El acceso a rutas y archivos dentro de los tipos se proporciona mediante variables de entorno como $__object .
Ansible , al igual que cdist, utiliza un modelo push sin agente para configurar nodos. [9] Sin embargo, Ansible requiere Python para algunos tipos de objetivos, [15] mientras que cdist no. 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 utilizado un sistema de gestión de configuración, pero el lenguaje declarativo de Ansible es posiblemente más legible y apropiado.
El nodo administrado (la máquina que administra Ansible) no requiere que Ansible esté instalado, pero requiere Python 2.7 o Python 3.5 - 3.11 para ejecutar el código de la biblioteca de Ansible.