No momento, estou executando o Puppet no modo sem mestre. Estou usando o r10k para implantação de módulo e ambiente.
Versão simplificada: O repositório de controle r10k possui duas ramificações: teste e produção . As alterações na produção serão distribuídas automaticamente para os servidores de produção. Mudanças nos testes para alguns servidores de teste.
Agora, se estou alterando as coisas no teste, às vezes também preciso alterar o repositório de controle r10k. Um exemplo comum seria o Puppetfile
, que atualmente se parece com isso na produção :
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'
A configuração dos módulos personalizados pode ser semelhante a esta na ramificação de teste :
mod 'ownmodule1',
:git => 'https://git.example.org/configuration/ownmodule1.git',
:ref => 'testing'
mod 'ownmodule2',
:git => 'https://git.example.org/configuration/ownmodule2.git',
:ref => 'testing'
Agora, um commit em testing pode ficar assim:
+mod 'ownmodule3,
+ :git => 'https://git.example.org/configuration/ownmodule3.git',
+ :ref => 'testing'
Se eu mesclar isso com a produção e não for cuidadoso, ownmodule3 será adicionado à produção com o ramo de teste , o que pode ser fatal. Isso também evita a mesclagem automatizada quando todos os testes são bem-sucedidos.
Como posso modificar meus repositórios ou fluxo de trabalho para evitar a mesclagem acidental de alterações específicas da ramificação?
Substituir os nomes de ambiente embutidos em código usados como referências no seu
Puppetfile
por uma variável substituída pelo nome do ambiente atual ajudaria a tornar seu Puppetfile mescável entre as ramificações.Pseudocódigo :
Para o código real , veja esta resposta , mas não garanto que funcionará em sua configuração, é um pouco hacky.
Mas, é claro, para fazer com que seus ambientes sejam implantados corretamente após essa alteração, você teria que criar uma
production
ramificação em seus módulostesting
e iniciá-los com algum código mínimo, não operacional, mas de compilação para novos módulos.PS Se esta resposta for útil e você decidir votar nela, por favor, vote na resposta vinculada também.
Desde r10k 2.4.0 , é possível fazer com que os módulos marionetes correspondam à ramificação no repositório de controle. No branch
testing
, o Puppetfile da minha pergunta pode ficar assim:Isso resultaria na ramificação
testing
do módulo ownmodule a ser usado com r10k deploy . Isso é bastante confiável. Com:default_branch
você pode especificar uma ramificação de fallback.