cdista

Herramienta de gestión de configuración de software
cdista
Autor(es) original(es)Nico Schottelius y Steven Armstrong [1]
Lanzamiento inicial2010 ; hace 14 años ( 2010 )
Versión estable
6.9.8 / 24 de agosto de 2021 ; hace 3 años [2] ( 24/08/2021 )
Repositorio
  • code.ungleich.ch/ungleich-public/cdist.git
Escrito enPython , shell Bourne
Sistema operativoLinux , similar a Unix , macOS [3]
TipoGestión de configuración de software
LicenciaLicencia pública general GNU versión 3 o posterior
Sitio webwww.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]

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 está utilizando en varias empresas en Suiza (como ETH Zurich [7] y el proyecto OMA Browser), [8] 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 . [9] Debido a esto, cdist se puede utilizar para iniciar otros sistemas de gestión de configuración. [10]

Instalación y configuración

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.

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 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]

Configuración

Los scripts de configuración definen cómo se configurarán los objetivos. Normalmente 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 utiliza 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 recopilan información sobre el sistema de destino (como el sistema operativo, el sistema de inicio y el nombre de host)
  • Tipos, que describen fragmentos reutilizables de configuración. 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 de "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. [14] Por ejemplo, el __filetipo 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:
    • Identificador de objeto: cuando un tipo se convierte en un objeto, se le pasa un identificador de objeto único. No se puede crear una instancia del mismo tipo dos veces con el mismo identificador. Este identificador no es aleatorio como un UUID, sino que es un identificador único que tiene significado en relación con el tipo. Por ejemplo, el __fileidentificador del tipo es la ruta absoluta al archivo.
    • Parámetros: muchos tipos no se pueden describir completamente con el ID del objeto y toman información adicional en forma de parámetros. El __filetipo toma un groupparámetro que especifica a qué grupo Unix debe pertenecer 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 __filetipo 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 instanciar otros tipos, lo que facilita la reutilización del código.
    • Scripts Gencode: el gencode-remotescript es la forma principal 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 hay un script que se usa con menos frecuencia gencode-localy 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.

Lenguaje de configuración

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 .

Software similar

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.

Referencias

  1. ^ Sharma, Rishabh; Soni, Mitesh (15 de marzo de 2015). Chef de aprendizaje . Paquete . págs. 10, 17-18. ISBN 978-1783285211.
  2. ^ "Etiquetas - cdist - Gitea: Git con una taza de té". code.ungleich.ch . Consultado el 15 de enero de 2022 .
  3. ^ "3. Sistemas operativos compatibles — documentación de cdist 6.9.8". cdi.st . Consultado el 15 de enero de 2022 .
  4. ^ ".github/README.md en df2f84b694afee8137b97695f6424c5aec314717 · skonfig/.github". GitHub.com .
  5. ^ [1] [ enlace roto ]
  6. ^ "ungleich/cdist: gestión de configuración de cdist". GitHub.com . Archivado desde el original el 2015-07-05 . Consultado el 2016-04-10 .
  7. ^ "Gestión de configuración de Cdist". Archivado desde el original el 15 de enero de 2013. Consultado el 8 de junio de 2012 .
  8. ^ "Acerca del navegador OMA". Archivado desde el original el 17 de agosto de 2012 . Consultado el 26 de junio de 2012 .
  9. ^ ab Torberntsson, Kim; Rydin, Ylva (junio de 2014). Un estudio de la 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 . págs. 8, 27, 31, 42. Archivado (PDF) del original el 22 de noviembre de 2018.
  10. ^ "Grupos de Google". Groups.google.com . Consultado el 10 de abril de 2016 .
  11. ^ Kruse, Christian (2016). «Implementación automática de configuración con cdist». WWWTech . Archivado desde el original el 22 de noviembre de 2018. Consultado el 22 de noviembre de 2018 .
  12. ^ "cdist-type(7)". Nico.schottelius.org . Archivado desde el original el 2016-03-03 . Consultado el 2016-04-10 .
  13. ^ Bezroukov, Nikolai. "cdist". Softpanorama . Archivado desde el original el 8 de julio de 2017. Consultado el 22 de noviembre de 2018 .
  14. ^ "13. Manifiesto — documentación de cdist 4.10.6-6-g61ac4a26". www.nico.schottelius.org . Consultado el 26 de marzo de 2019 .
  15. ^ "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 requiere Python 2.7 o Python 3.5 - 3.11 para ejecutar el código de la biblioteca de Ansible.
  • Sitio web oficial
  • Código fuente
  • lista de correo cdist
  • cdist en freecode
Obtenido de "https://es.wikipedia.org/w/index.php?title=Cdist&oldid=1163285324"