cdist

Инструмент управления конфигурацией программного обеспечения
cdist
Оригинальный автор(ы)Нико Шоттелиус, Стивен Армстронг [1]
Первоначальный выпуск2010 ; 14 лет назад ( 2010 )
Стабильный релиз
6.9.8 / 24 августа 2021 г. ; 3 года назад [2] ( 2021-08-24 )
Репозиторий
  • code.ungleich.ch/ungleich-public/cdist.git
Написано вPython , оболочка Bourne
Операционная системаLinux , Unix-подобные , macOS [3]
ТипУправление конфигурацией программного обеспечения
ЛицензияGNU General Public License версии 3 или более поздней
Веб-сайтwww.cdi.st

cdist — это бесплатный инструмент управления конфигурацией программного обеспечения для Unix-подобных систем. Он управляет узлами через SSH с помощью Bourne Shell и не требует установки дополнительного программного обеспечения на целевых узлах.

Cdist отличается от конкурирующих систем управления конфигурацией, выбрав Bourne Shell в качестве основного языка для написания скриптов конфигурации и фактически не требуя зависимостей от целевых узлов. Хотя ядро ​​cdist написано на Python , интерпретатор требуется только на хост-машине, а не на целевых узлах.

Cdist был разветвлен в августе 2022 года как skonfig . [4]

Разработка

Разработка cdist началась в 2010 году в ETH Zurich и активно развивается [5] , а его поддержка осуществляется в основном Нико Шоттелиусом и Стивеном Армстронгом. [6] cdist используется в различных компаниях в Швейцарии (например, ETH Zurich [7] и проекте OMA Browser), [8] США, Германии и Франции.

Функции

cdist — это система управления конфигурацией с нулевой зависимостью: для нее требуются только ssh и совместимая с Bourne оболочка на целевых хостах, которые предоставляются по умолчанию на большинстве Unix-подобных машин. [9] Благодаря этому cdist можно использовать для загрузки других систем управления конфигурацией. [10]

Установка и настройка

cdist обычно не устанавливается как пакет (как .deb или .rpm), а через git . Все команды запускаются из созданного checkout. Точкой входа для любой конфигурации является скрипт оболочки conf/manifest/init, который в терминах cdist называется начальным манифестом. [11]

Основными компонентами cdist являются так называемые типы, которые объединяют функциональность. [12] Типы по сути состоят из ряда сценариев оболочки, определяющих, какие типы тип использует повторно и какой код генерируется для выполнения на целевом хосте.

Архитектура

cdist разделен на два компонента:

  • Ядро
  • Скрипты конфигурации

Основной

Ядро Cdist обрабатывает чтение конфигурации и связь с удаленными хостами. Как и Ansible, cdist использует модель «push» для применения изменений конфигурации: процесс cdist на «хосте» подключается к любому количеству удаленных узлов через SSH, а затем выполняет обновления конфигурации на этих узлах. Cdist может настраивать несколько хостов параллельно, чтобы сократить время, затрачиваемое на настройку. [13]

Конфигурация

Скрипты конфигурации определяют, как должны быть настроены цели. Они обычно пишутся в Bourne Shell и состоят из

  • Начальный манифест, точка входа , где начинаются все запуски конфигурации. Этот скрипт обычно использует информацию о целевом узле, такую ​​как его имя хоста и операционная система, для вызова других, более конкретных скриптов, которые выполняют фактическую конфигурацию.
  • Глобальные обозреватели, небольшие скрипты, собирающие информацию о целевой системе (такую ​​как операционная система, система инициализации и имя хоста)
  • Типы, которые описывают повторно используемые фрагменты конфигурации. Типы создаются в манифестах и ​​являются единственным способом фактически запустить код на целевых машинах. Название «тип» подразумевается как аналог «класса» в объектно-ориентированном языке, поскольку тип может быть преобразован в несколько «объектов» в зависимости от того, какие параметры ему передаются. [14] Например, __fileтип может быть преобразован в несколько «объектов», каждый из которых представляет создание определенного файла. «Роли» Ansible эквивалентны типам cdist. Типы могут иметь много компонентов:
    • Object ID: Когда тип преобразуется в объект, ему передается уникальный идентификатор объекта. Один и тот же тип не может быть создан дважды с одним и тем же идентификатором. Этот идентификатор не является случайным, как UUID, а скорее является некоторым уникальным идентификатором, который имеет смысл по отношению к типу. Например, __fileидентификатор типа — это абсолютный путь к файлу.
    • Параметры: Многие типы не могут быть полностью описаны идентификатором объекта и принимают дополнительную информацию в виде параметров. __fileТип принимает groupпараметр, который указывает, какой группе Unix должен принадлежать файл.
    • Explorers: В дополнение к глобальным explorers, описанным выше, типы иногда имеют свои собственные explorers, которые собирают информацию, специфичную для типа, с удаленной машины. __fileТип использует explorers, чтобы определить, существует ли уже создаваемый файл. Иногда он использует эту информацию, чтобы пропустить создание файла.
    • Манифест: Манифест типа может создавать экземпляры других типов, что упрощает повторное использование кода.
    • Скрипты Gencode: gencode-remoteСкрипт — это основной способ фактического обновления конфигурации целевых узлов. gencode-remoteзапускается на локальной машине, но его стандартный вывод отправляется на удаленную машину и выполняется как скрипт оболочки. Существует также менее часто используемый gencode-localскрипт, который выводит код для локального запуска.

Shell является фактическим языком для написания сценариев конфигурации cdist, но большинство сценариев можно написать на любом языке, если они содержат подходящую строку shebang . Скрипты shell предпочтительны из-за простоты доступа к переменным среды, чтения файлов и выполнения системных команд.

Язык конфигурации

Все настраиваемые пользователем части содержатся в манифестах или gencode-скриптах, которые являются скриптами оболочки. Скрипты оболочки были выбраны, поскольку системные администраторы Unix обычно умеют читать и писать скрипты оболочки. Кроме того, оболочка также обычно доступна на потенциальных целевых системах, что позволяет избежать необходимости установки там дополнительного программного обеспечения («ноль зависимостей»).

cdist считывает свою конфигурацию из начального манифеста ( conf/manifest/init ), в котором хосты сопоставляются с типами:

case " $__target_host " in myhostname ) __package zsh --state present __addifnosuchline /tmp/cdist-welcome --line "Добро пожаловать в cdist" ;; esac            

При использовании типов в cdist они вызываются как обычные программы в манифестах и ​​могут использовать расширенный синтаксический анализ параметров, а также чтение из stdin:

# Укажите файл по умолчанию, но позвольте пользователю изменить его
__file  /home/frodo/.bashrc  --source "/etc/skel/.bashrc" \ --state exists \ --owner frodo --mode 0600         # Взять содержимое файла из stdin
__file  /tmp/whatever  --owner  root  --group  root  --mode 644 --source - << DONE Вот содержимое файла /tmp/whatever DONE    

Зависимости выражаются путем настройки переменной среды require :

 __каталог /tmp/foobar require="__directory//tmp/foobar" __file /tmp/foobar/baz

Доступ к путям и файлам внутри типов предоставляется переменными среды, такими как $__object .

Похожее программное обеспечение

Ansible , как и cdist, использует модель push без агентов для настройки узлов. [9] Однако Ansible требует Python для некоторых типов целей, [15] тогда как cdist — нет. Ansible делает различие между ролями, написанными на декларативном языке на основе YAML, и модулями, написанными на Python. Cdist имеет только «типы», которые служат целям как модулей, так и ролей и в основном написаны в Bourne Shell. Подход cdist может быть предпочтительнее, поскольку Shell знаком многим системным администраторам, которые никогда раньше не использовали систему управления конфигурацией, но декларативный язык Ansible, возможно, более читабельный и подходящий.

Ссылки

  1. ^ Шарма, Ришаб; Сони, Митеш (15 марта 2015 г.). Learning Chef . Packt . стр. 10, 17–18. ISBN 978-1783285211.
  2. ^ "Теги - cdist - Gitea: Git с чашкой чая". code.ungleich.ch . Получено 2022-01-15 .
  3. ^ "3. Поддерживаемые операционные системы — документация cdist 6.9.8". cdi.st . Получено 2022-01-15 .
  4. ^ ".github/README.md в df2f84b694afee8137b97695f6424c5aec314717 · skonfig/.github". GitHub.com .
  5. ^ [1] [ мертвая ссылка ]
  6. ^ "ungleich/cdist: управление конфигурацией cdist". GitHub.com . Архивировано из оригинала 2015-07-05 . Получено 2016-04-10 .
  7. ^ "Cdist configuration management". Архивировано из оригинала 2013-01-15 . Получено 2012-06-08 .
  8. ^ "О браузере OMA". Архивировано из оригинала 17 августа 2012 г. Получено 26 июня 2012 г.
  9. ^ ab Torberntsson, Kim; Rydin, Ylva (июнь 2014 г.). Исследование управления конфигурацией — системные решения для развертывания и настройки программного обеспечения в облачной среде (PDF) (диссертация). Uppsala University . стр. 8, 27, 31, 42. Архивировано (PDF) из оригинала 22 ноября 2018 г.
  10. ^ "Группы Google". Groups.google.com . Получено 2016-04-10 .
  11. ^ Kruse, Christian (2016). "Автоматическое развертывание конфигурации с помощью cdist". WWWTech . Архивировано из оригинала 22 ноября 2018 г. . Получено 22 ноября 2018 г. .
  12. ^ "cdist-type(7)". Nico.schottelius.org . Архивировано из оригинала 2016-03-03 . Получено 2016-04-10 .
  13. ^ Безруков, Николай. "cdist". Softpanorama . Архивировано из оригинала 8 июля 2017 года . Получено 22 ноября 2018 года .
  14. ^ "13. Манифест — документация cdist 4.10.6-6-g61ac4a26". www.nico.schottelius.org . Получено 26.03.2019 .
  15. ^ "Установка Ansible — Документация Ansible". docs.ansible.com . Получено 13 января 2023 г. Управляемый узел (машина, которой управляет Ansible) не требует установки Ansible, но требует Python 2.7 или Python 3.5 - 3.11 для запуска кода библиотеки Ansible.
  • Официальный сайт
  • исходный код
  • список рассылки cdist
  • cdist на freecode
Взято с "https://en.wikipedia.org/w/index.php?title=Cdist&oldid=1163285324"