librarian-puppet é a resposta mais fácil para isso. Pessoalmente, eu sempre aconselho fazer o trabalho antecipado e implementar uma solução escalonável primeiro, em vez de revisar constantemente sua abordagem.
Funciona com o mesmo princípio que bundler faz para as gemas do Ruby - basta criar um Puppetfile que lista os módulos que você deseja (ou seja, sem dependências).
Quando você executar librarian-puppet install pela primeira vez em sua máquina de desenvolvimento Puppet (geralmente sua estação de trabalho local), ele interrogará todos os módulos e criará uma lista de dependências automaticamente (se os módulos em questão usarem o arquivo metadata.json em detalhes dependências). Ele também criará Puppetfile.lock para registrar as versões exatas escolhidas para cada módulo e suas dependências.
Para alterações subsequentes, você pode executar librarian-puppet update <module> para atualizar um módulo específico para a versão mais recente. Isso irá recalcular as dependências e atualizar Puppetfile.lock .
Uma anotação importante - librarian-puppet terá o controle completo de seu diretório modules , portanto, todos os módulos personalizados que você escreveu precisarão ser extraídos e referenciados como módulos por direito próprio. seu Puppetfile .
A implantação é tão simples quanto a execução de librarian-puppet install em seus nós - isso analisará o Puppetfile.lock (não o Puppetfile ) e instalará todos os seus módulos.