Usar ambientes de marionetes tem algumas desvantagens:
- você pode definir com segurança apenas o ambiente de marionetes do agente - isso pode criar algumas vulnerabilidades se você armazenar suas senhas, etc. em seus arquivos / modelos.
- as funções personalizadas são carregadas somente de um único ambiente que é usado como padrão no puppetmaster - isso significa que você não conseguirá manter versões diferentes de funções personalizadas (se as usar) em ambientes diferentes.
Em uma empresa em que estou trabalhando, vamos usar dois servidores puppetmaster - um para produção e outro para o restante dos ambientes.
Para facilitar o gerenciamento de módulos de fantoches em vários mestres de marionetes, você pode manter seus módulos em VCS como o git e implantar novas versões deles em mestres de bonecos através de capistrano, etc.
Se você precisa de vários ambientes para não fazer versões de seus módulos de fantoches, mas para fornecer dados diferentes para nós diferentes com base no ambiente (variáveis diferentes, classes de nós, etc.), há mais algumas opções:
herdam nós de diferentes ambientes dos nós básicos do "ambiente"
* Fornecer um conjunto de parâmetros e classes por ambiente para cada nó através do ENC (Puppet Dashboard, Foreman), no qual você cria um grupo para cada ambiente com o conjunto de parâmetros necessários e adiciona seus nós àqueles.
* crie um fato personalizado ou uma função personalizada retornando seu ambiente (com base no arquivo local / tag AWS / consulta DB / whatever) e use esse fato para servir dados diferentes em seus manifestos usando condicionais / extlookup / hiera.