В этой статье есть несколько проблем. Помогите улучшить ее или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти сообщения )
|
Оригинальный автор(ы) | Нико Шоттелиус, Стивен Армстронг [1] |
---|---|
Первоначальный выпуск | 2010 ( 2010 ) |
Стабильный релиз | 6.9.8 / 24 августа 2021 г. ( 2021-08-24 ) [2] |
Репозиторий |
|
Написано в | 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 и состоят из
__file
тип может быть преобразован в несколько «объектов», каждый из которых представляет создание определенного файла. «Роли» Ansible эквивалентны типам cdist. Типы могут иметь много компонентов:__file
идентификатор типа — это абсолютный путь к файлу.__file
Тип принимает group
параметр, который указывает, какой группе Unix должен принадлежать файл.__file
Тип использует explorers, чтобы определить, существует ли уже создаваемый файл. Иногда он использует эту информацию, чтобы пропустить создание файла.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, возможно, более читабельный и подходящий.
узел (машина, которой управляет Ansible) не требует установки Ansible, но требует Python 2.7 или Python 3.5 - 3.11 для запуска кода библиотеки Ansible.