Рубрики
Uncategorized

Дифференцировка кукольных сред

Кукольный каталог Diff помогает визуализировать различия между двумя кукольными средами. Помечено кукол, дежоптом, тестированием, кодовой коробкой.

Качество кукольного кода (3 части серии)

Марионетка Это отличный инструмент для управления конфигурацией, что позволяет автоматизировать сотни до тысяч узлов одновременно в подходе в инфраструктуре.

Хорошая практика обычно поощряет использовать несколько сред в марионеточной настройке. Обычно критические узлы прикреплены к Производство Окружающая среда, в то время как менее критические узлы могут быть связаны с постановкой сред.

Использование Git вместе с Управляющий репозиторий Изменения кода обычно получают в функциональных ветвях, которые превращаются в кукольные среды. После того, как функции были протестированы на указанной среде, ветвь функции может быть объединена в положенное ветвь, где изменения начнут влиять на узлы, прикрепленные к этой кукольной среде.

Наконец, в то время как в то время как изменения объединяются от ветви постановки в производную ветку, что влияет на все узлы, прикрепленные к производству.

Хотя описанный рабочий процесс полезен, проверяя ветвь часто отсутствует процесс. Указывая, что все узлы постановки к ветке функции полностью отсутствуют в точке, поэтому валидация часто выполняется вручную, идентифицируя узлы, которые Май Быть затронуты изменением и бегущей куколкой вручную на этих узлах, предпочтительно в режиме сухих прогон ( --NOP ).

При развертывании сотен узлов, тестирование нескольких вряд ли гарантирует, что все будет хорошо пойти на всех узлах после объединения ветви.

К счастью для нас, есть инструменты, которые могут помочь!

Можно трудно поверить, поскольку этот модуль настолько плохо известен, но дифференциальный проект кукольного каталога был запущен около 10 лет назад R.i. Pienaar. ! Усыновлено Заком Смитом , он поддерживал несколько лет, но оставил в основном ненаправленным с 2016 года.

Как мы использовали его в течение многих лет (и Github Octocatalog_diff Никогда не подходит для моих нуждений), мы приняли его, и теперь вы найдете последнюю версию на нашем счете GitHub:

Camptocamp/кукольный каталог-Diff

📄↔📄 инструмент для разных кукольных каталогов

Кукольный каталог Diff — это стандартный кукольный модуль. Вы можете установить его, используя Кукольный модуль Установить , R10k или даже просто Git.

$ git clone https://github.com/camptocamp/puppet-catalog-diff.git /etc/puppetlabs/code/modules/catalog_diff

По мере того, как его название подразумевает, дифференциальный каталог кукол позволяет выполнять дифференцировки между кукольными каталогами.

Модуль предоставляет три марионеточных лица:

  • Кукольный каталог Семя генерирует каталоги из марионеток марионетки (или PucetDB)
  • Кукольный каталог Pull Обертывает вокруг Семя лицо, чтобы получить каталоги из двух сред для каждого узла
  • Кукольный каталог развлекается Анализируют несколько каталогов и возвращает различия на узел

Локальный

Чтобы начать, вы можете развернуть локальные каталоги (в .yaml , .pson или .yaml форматы):

$ puppet catalog diff catalog1.pson catalog2.pson

вернет различия между двумя каталогами.

Развлекаться с поиском каталога

Чаще всего вы захотите использовать кукольный каталог Diff для получения каталогов от марионеточных мастеров.

Настраивать

Генерировать сертификат

Все, что кукольный мир использует OpenSSL для аутентификации. Таким образом, настройка дифференцировки кукольного каталога потребуется сертификата OpenSSL. Это может быть любой сертификат, подписанный марионетки CA. Например, вы можете использовать Puppeterver CA команда Создать сертификат:

$ puppetserver ca generate --certname catalog-diff

Получить ключ и сертификат.

Установить марионеточный мастер

По умолчанию марионетки кукол только доставляют каталоги для узлов, запрашивающих их. Это настроено в Auth.conf Файл конфигурации, с правилом, как:

{
    # Allow nodes to retrieve their own catalog
    match-request: {
        path: "^/puppet/v3/catalog/([^/]+)$"
        type: regex
        method: [get, post]
    }
    allow: "$1"
    sort-order: 500
    name: "puppetlabs catalog"
},

Вы можете развернуть это правило, используя Puppet_authorization:: Правило определенный тип из puppet_authorization Кукольный модуль.

Чтобы позволить каталог-различие Сертификат для доступа Чтобы получить любой каталог из марионеточного мастера, мы можем изменить это правило:

{
    # Allow nodes to retrieve their own catalog
    match-request: {
        path: "^/puppet/v3/catalog/([^/]+)$"
        type: regex
        method: [get, post]
    }
    allow: ["$1","catalog-diff"]
    sort-order: 500
    name: "puppetlabs catalog"
},

Еще лучше, мы можем Добавьте расширение сертификата к каталогу сертификата Diff, например PP_Authorization: каталог и разрешить это расширение в Auth.conf :

{
    # Allow nodes to retrieve their own catalog
    match-request: {
        path: "^/puppet/v3/catalog/([^/]+)$"
        type: regex
        method: [get, post]
    }
    allow: [
        "$1",
        {
            extensions: {
                pp_authorization: "catalog"
            }
        }
    ]
    sort-order: 500
    name: "puppetlabs catalog"
},

Сравнение условий

При сравнении сред, Countog Catalog Diff будет подключаться к одному или нескольким мастерам марионеток и получить каталоги для каждого узла.

Поскольку у вас могут быть множество узлов для тестирования, легче получить список узлов для анализа от PuppetDB. Это может быть достигнуто с --use_pupetDB наряду с --filter_old_env Отказ Это выберет все активные узлы в марионетеле, связанной с первой средой.

Например, если мы запустим:

$ puppet catalog diff \
     puppet.example.com/production \
     puppet.example.com/staging \
     --use_puppetdb --filter_old_env

ПРИМЕЧАНИЕ (2020-05-07): С освобождением кукольного каталога Diff 2.0.0, —use_pupetDB. теперь устарел и —filter_old_env. это по умолчанию.

Кукольный каталог Diff будет подключаться к PuCetDB, получить все активные узлы из Производство Окружающая среда, а затем для каждого из них, извлеките каталог для узла от:

  • Производство Окружающая среда на puppet.example.com Марцовый мастер
  • Постановка Окружающая среда на puppet.example.com Марцовый мастер

Затем он вычисляет различия между каждой парой каталогов и выпускает их.

Тестирование версию обновления

Один тип чека, который очень необходимо, — это тестирование изменений между двумя версиями марионеточных установок. Diff Diff Позволяет указывать разные мастера для двух сред, чтобы сравнить, поэтому вы можете использовать следующую команду для сравнения каталогов из двух мастеров кукол на той же среде для марионеток (при условии, что среда развернута для обоих мастеров):

$ puppet catalog diff \
    puppet5.example.com/production \
    puppet6.example.com/production \
    --use_puppetdb --filter_old_env

Восстановление и сравнение каталогов могут быть потребляющимися ресурсами. Очень часто вы захотите разграничить новую среду (постановка или особенность) против более стабильной. Поскольку мы можем получить узлы, связанные с стабильной средой от PuppetDB, мы могли бы также получить кэшированные каталоги от PuppetDB для этой ветки. Это возможно, используя --old_catalog_from_puppetdb флаг:

$ puppet catalog diff \
     puppet.example.com/production \
     puppet.example.com/staging \
     --use_puppetdb --filter_old_env --old_catalog_from_puppetdb

Каталоги извлеченные от PuppetDB для Производство окружающая среда, а от марионеточного мастера для Постановка окружающая обстановка.

Тюнинг дифференциала

Несколько вариантов доступны для настройки вывода Diff:

  • --show_resource_diff покажет детали Как каждый ресурс был изменен
  • --content_diff будет генерировать отдельный контент diff для содержимого файла, в дополнение к параметрам diff
  • --changed_depth 1000 Устанавливает количество узлов для отображения в конце разных, отсортированных по количеству дифференциров

Кукольный предоставляет специальную переменную, названную $ Доверяются и называется Доверенные факты Отказ Эта переменная содержит информацию из кукольного сертификата. Это позволяет мастеру для марионеток получать информацию, такие как CERTNAME или расширения сертификатов, и убедитесь, что они не могут быть фальсифицированы.

Тем не менее, использование этих доверенных фактов в вашем кукольном коде (или иерархии иерархии) ломает компиляцию с помощью каталога кукольного марионетка, поскольку сертификат каталога Diff не содержит этих доверенных переменных.

Если вы используете марионетки 6,3 или вверх на мастере марионетки, вы можете использовать новый Бесчеловеческий каталог API Чтобы обойти это ограничение.

Настраивать

Поскольку это использует другую конечную точку API, нам нужно настроить Auth.conf Для этого, например:

{
    # Allow nodes to retrieve their own catalog
    match-request: {
        path: "^/puppet/v4/catalog"
        type: regex
        method: [post]
    }
    allow: [
        {
            extensions: {
                pp_authorization: "catalog"
            }
        }
    ]
    sort-order: 500
    name: "puppetlabs certless catalog"
},

использование

- представляет собой Флаг скажет кукольный каталог Diff, чтобы использовать новый API без безребойного каталога вместо стандартного.

Например, вы можете получить старые каталоги от PuppetDB и новых каталогов из API без безребойного каталога:

$ puppet catalog diff \
     puppet.example.com/production \
     puppet.example.com/staging \
     --use_puppetdb --filter_old_env \
     --old_catalog_from_puppetdb --certless

Если вы используете непрерывную интеграционную платформу, вы можете получить преимущество в этом, интегрируя репозиторий своего марионеточного контроля в него с помощью каталога кукольного вещества.

Хотя задачи качества кода могут быть запущены в трубопроводе, прежде чем развертывать код, дифференцируемый кукольный каталог, как правило, является задачей, которая может быть спущена в запросе слияния.

Например, вы можете запустить следующую команду в задании GitLab CI:

$ puppet catalog diff \
     puppet.example.com/${CI_MERGE_REQUEST_TARGET_BRANCH_NAME} \
     puppet.example.com/${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME} \
     --show_resource_diff --content_diff --changed_depth 1000 \
     --use_puppetdb --filter_old_env --old_catalog_from_puppetdb \
     --certless --threads 4 \
     --output_report /srv/catalog-diff/mr_${CI_MERGE_REQUEST_IID}_${CI_JOB_ID}.json

--output_report Опция сохраняет вывод как документ JSON, который можно использовать позже.

Кукольный каталог Diff сравнивает кукольные каталоги. Тем не менее, изменения каталога не учитывают все изменения в беге марионеточного агента. Плагины могут играть роль тоже.

Если ваше изменение включает в себя изменение агент-боковых плагинов (факты, типы и провайдеры, объективы AUVEAS), Diff Diff не позволит вам предсказать результат этих изменений.

Изменения в кукольном кодексе иногда генерируют много разных, которые могут быть трудно разбираться в текстовой форме.

Кукольный каталог Eff Viewer Проект позволяет визуализировать дифференциальные отчеты кукольного каталога (как генерируемые --OTPUT_REPORT Опция) в веб-интерфейсе веб-интерфейса.

Camptocamp/Countepet-Catalog-Diff-Viewer

Просмотрщик для марионетки-каталога-дифференцировки

Этот интерфейс в настоящее время только для чтения, без постоянства.

Дайте мне знать, как вы используете кукольный каталог diff и, как обычно, мы приветствуем запрос на тягу!

Качество кукольного кода (3 части серии)

Оригинал: «https://dev.to/camptocamp-ops/diffing-puppet-environments-1fno»