В настоящее время я запускаю Puppet в режиме без мастера. Я использую r10k для развертывания модуля и среды.
Упрощенная версия: репозиторий управления r10k имеет две ветви: тестирование и производство. Изменения в производстве будут автоматически распространяться на рабочие серверы. Изменения в тестировании некоторых промежуточных серверов.
Теперь, если я что-то меняю при тестировании, мне иногда приходится менять и репозиторий управления r10k. Типичным примером может служить Puppetfile
, который в настоящее время выглядит так в производство:
forge 'forge.puppetlabs.com'
# Forge modules
mod 'puppetlabs/stdlib'
mod 'puppetlabs/concat'
mod 'saz/ssh'
# Custom modules
mod 'ownmodule1',
:git => 'https://git.example.org/configuration/ownmodule1.git',
:ref => 'production'
mod 'ownmodule2',
:git => 'https://git.example.org/configuration/ownmodule2.git',
:ref => 'production'
Конфигурация пользовательских модулей может выглядеть так на тестирование филиал:
mod 'ownmodule1',
:git => 'https://git.example.org/configuration/ownmodule1.git',
:ref => 'testing'
mod 'ownmodule2',
:git => 'https://git.example.org/configuration/ownmodule2.git',
:ref => 'testing'
Теперь фиксация в тестирование может выглядеть так:
+mod 'ownmodule3,
+ :git => 'https://git.example.org/configuration/ownmodule3.git',
+ :ref => 'testing'
Если я объединю это с производство, и не осторожны, ownmodule3 будет добавлено к производство с тестирование ветвь, которая могла быть фатальной. Это также предотвращает автоматическое объединение при успешном завершении всех тестов.
Как я могу изменить свои репозитории или рабочий процесс, чтобы предотвратить случайное слияние изменений, относящихся к ветке?
Замена жестко заданных имен сред, используемых в качестве ссылок в вашем Puppetfile
с заменой переменной текущим именем среды поможет объединить ваш Puppetfile между ветвями.
Псевдо код:
mod 'ownmodule1',
:git => 'https://git.example.org/configuration/ownmodule1.git',
:ref => ${environment}
Для актуальный код см. этот ответ, но я не гарантирую, что он будет работать в вашей настройке, это немного взломано.
Но, конечно, для правильного развертывания вашей среды после этого изменения вам нужно будет создать production
ветвь в ваших модулях вместе с testing
и инициализировать их оба с минимальным набором кода для новых модулей.
PS Если этот ответ полезен, и вы решили проголосовать за него, пожалуйста, проголосуйте и за связанный ответ.
Начиная с версии r10k 2.4.0, возможно, чтобы модули марионетки соответствовали ветви в репозитории управления. На ветке testing
, Puppetfile из моего вопроса может выглядеть так:
mod 'ownmodule1',
:git => 'https://git.example.org/configuration/ownmodule1.git',
:ref => :control_branch
Это приведет к ветке testing
модуля собственный модуль для использования с r10k развертывание. Это довольно надежно. С участием :default_branch
вы можете указать резервную ветку.