Vagrant Puppet aplica manifesto com ambiente errado

2

Eu uso o Puppet 3.7 no modo cliente-servidor padrão, com ambientes e usando o Hiera para dados. Eu uso o Vagrant para testar os manifestos Puppet diretamente do meu repositório Puppet.

Eu recentemente comecei a usar o Hiera e mudei meu Vagrantfile (e o diretório do Vagrant) para trabalhar com ele. Agora parece funcionar com Hiera, mas outro problema aparece: Vagrant acha que minha VM está em produção de ambiente quando está em experimental. (isso funcionou bem antes)

O repositório de fantoches se parece com

~/code/puppet
└── environments
    ├── experimental
    │   ├── manifests
    │   │   └── site.pp
    │   ├── modules
    │   └── Puppetfile
    ├── production
    │   ├── manifests
    │   │   └── site.pp
    │   ├── modules
    │   └── Puppetfile
    └── testing
        ├── manifests
        │   └── site.pp
        ├── modules
        └── Puppetfile

Minha configuração do Vagrant é armazenada em outro diretório. Eu criei um link simbólico (ln -s) para ~ / code / puppet chamado puppet neste diretório. O Vagrantfile parece

config.vm.define "standalone", primary: true do |config|
    config.vm.box = "debian_wheezy+vbox_jessie+puppet_3.7"
    config.vm.hostname = "standalone.puppet.vagrant"
    config.vm.network "private_network", ip:"192.168.10.21"

    config.vm.synced_folder "puppet/hieradata", "/etc/puppet/hieradata"
    config.vm.provision :puppet, :options => ["--yamldir /hieradata"] do |puppet|
        puppet.manifests_path = "puppet/environments/experimental/manifests"
        puppet.manifest_file = "site.pp"
        puppet.module_path = [ "puppet/environments/experimental/modules", "puppet/environments/production/modules", "puppet/modules" ]
        puppet.hiera_config_path = "puppet/hiera.yaml"
    end
  end

Eu imagino que minhas mudanças recentes após o uso de Hiera não estão corretas para o Vagrant, e talvez os hacks (linkando o diretório de códigos de marionetes) sejam a causa, mas não consigo ver como isso deve ser organizado.

Há algumas pessoas que conhecem esse problema e como resolvê-lo?

Obrigado

Atualizar

eu mudei

puppet.manifests_path = "puppet/environments/#{env}/manifests" 

e removi o arquivo puppet.working_directory para que minha VM fique com / provisionada.

com

puppet.module_path = [ "puppet/modules", "puppet/environments/production/modules" ] 

parece que minha VM acessa os módulos de produção e env atuais, que eu preciso.

    
por daks 04.03.2016 / 15:54

2 respostas

1

Você pode especificar todas as opções para a sua corrida de marionetes. Você pode usar algo assim:

srv.vm.provision :puppet do |puppet|
      puppet.working_directory = "/vagrant/puppet"
      puppet.module_path       = "puppet/modules"
      puppet.manifests_path    = "puppet/manifests"
      puppet.manifest_file     = "site.pp"
      puppet.hiera_config_path = "puppet/hiera.yaml"
      puppet.options           = "--debug --verbose --environment #{env}"
end

O que significa que seus módulos estão em "puppet / modules / # {env} e seus manifestos em" puppet / manifests / # {env}. Agora, "env" é uma variável que você pode definir no seu Vagrantfile:

env = "production"

ou: você poderia colocar todas as variáveis, como "env", em um arquivo yaml e carregar isso.

Para referência, você pode encontrar todas as opções de provisão de fantoches aqui: link

    
por 05.03.2016 / 09:23
0

Eu vim aqui procurando resolver um problema semelhante. Consegui concatenar mais de um modulepath usando um Array. Então, esse modulepath se tornará

modulepath = ../puppet/environments/dev/modules:../puppet/modules

Seus caminhos variam.

Meu ambiente vagabundo sempre será dev , então estou bem codificando este modulepath aqui.

Meu Vagrantfile é assim:

Vagrant.configure(2) do |config|
  config.vm.box = "centos7"
  config.vm.synced_folder("../../puppet/trunk/server/hieradata", "/etc/puppet/hieradata")
  config.vm.provision "puppet" do |puppet|
    puppet.environment       = "dev"
    puppet.environment_path  = "../../puppet/trunk/server/environments"
    puppet.hiera_config_path = "../../puppet/trunk/server/hiera.yaml"
    puppet.module_path       = [ "../../puppet/trunk/server/environments/dev/modules", "../../puppet/trunk/server/modules" ]
  end
end
    
por 11.11.2016 / 06:43