Como configurar: datadir: ao usar o Hiera com o Puppet e o Vagrant

10

Gostaria de saber como configurar :datadir: em hiera.yaml para uso ideal com o Puppet e o Vagrant. Atualmente estou usando o vagrant 1.5.0 com o virtualbox 4.2 no Ubuntu 13.10 com um guest do Ubuntu 12.04 executando o Puppet 3.1.1

Estou tentando criar um ambiente semelhante a este post, Melhores práticas de marionete: configurações específicas do ambiente . Especificamente, meu Vagrantfile contém:

  config.vm.define "servername" do |servername|
    servername.vm.box = "precise-puppet-3"
    servername.vm.network "private_network", ip: "192.168.213.2",
      virtualbox__intnet: "networkname"

    # Provision with puppet.
    servername.vm.provision :puppet do |puppet|
      puppet.hiera_config_path = "puppet/hiera.yaml"
      puppet.manifests_path = "puppet/manifests"
      puppet.module_path = "puppet/modules"
      puppet.manifest_file  = "servername.pp"
      puppet.facter = {
        "vagrant" => "1",
        "server" => "servername",
      }
    end
  end

Posso confirmar que o hiera_config_path está correto, porque recebo um erro se eu excluir hiera.yaml .

puppet/hiera.yaml contém:

---
:backends: yaml
:yaml:
  :datadir: "manifests/configuration"
:hierarchy:
  - "%{::clientcert}"
  - "%{::environment}"
  - "virtual_%{::is_virtual}"
  - common
:logger: console

Além disso, puppet/manifests/configuration/common.yaml contém:

---
myvar: "test"

Testando isso a partir da linha de comando:

$ hiera -c hiera.yaml myvar
test

Até agora, tudo bem. No entanto, se eu tentar testar isso de dentro de um arquivo de manifesto de fantoches, a variável não pode ser encontrada e recebo um erro. Exemplo de teste:

$myvariable = hiera(myvar)
notice("My variable is: ${myvar}")

O erro é:

Error: Could not find data item myvar in any Hiera data file and no default supplied at...

Se eu ssh na minha máquina via vagrant ssh , eu posso ver que o Vagrant está montando meu diretório de manifesto em / tmp / vagrant-puppet-2. Se eu editar o arquivo hiera.yaml e substituir :datadir: pelo caminho completo /tmp/vagrant-puppet-2/manifests/configuration , meus manifestos Puppet poderão acessar meus dados Hiera. Posso fazer isso com um caminho relativo, embora?

    
por greg_1_anderson 12.03.2014 / 23:17

4 respostas

9

Encontrei a solução enquanto documentava minha pergunta. Mudança: datadir: para ler:

  :datadir: "%{settings::manifestdir}/configuration"

O Puppet fornecerá o caminho para o diretório do manifesto em $ settings :: manifestdir. Armazenar os dados do Hiera dentro do diretório do manifesto é útil porque o Vagrant montará este diretório explicitamente antes de executar o Puppet no sistema convidado, e outros diretórios que você pode selecionar para este propósito podem não estar disponíveis.

    
por 12.03.2014 / 23:17
2

O hiera.yaml com o qual estou trabalhando especifica :datadir: /etc/puppet/hiera e não tive sorte com a configuração da opção --yamldir como algumas das outras respostas especificadas. No entanto, percebi depois de um tempo que eu poderia mapear meus hieradados para esse local no guest vm:

config.vm.synced_folder "../puppet/hiera", "/etc/puppet/hiera"

Isso funciona muito bem: -)

    
por 27.08.2015 / 02:35
1

Isso é o que estou fazendo em meus próprios experimentos de fantoches.

VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "puppetlabs/debian-7.8-64-puppet" # source box on atlas
  config.vm.hostname = "wheezybox"                  # hostname of box

  # Include Hiera Data Directory (no automatic option for this)
  config.vm.synced_folder "../../hieradata", "/tmp/vagrant-puppet/hieradata"

  # Puppet Configuration
  config.vm.provision :puppet do |puppet|
    puppet.manifests_path    = "../../manifests/"
    puppet.manifest_file     = "site.pp"
    puppet.module_path       = ["../../modules/"]    # shared modules
    puppet.hiera_config_path = "../../hiera.yaml"    # hiera config file
    puppet.working_directory = "/tmp/vagrant-puppet" # default hiera path
    puppet.options           = "--verbose --debug"
  end
end

Meu minimalista hiera.yaml tem esta aparência:

---
:backends:
  - yaml
:yaml:
  :datadir: "hieradata"
:hierarchy:
  - "node/%{::hostname}"

E, para fins de ilustração, minha estrutura de diretórios no host (MacBook) se parece com isso:

    .
    ├── hiera.yaml
    ├── hieradata
    │   └── node
    │       ├── centos6box.yaml
    │       ├── precisebox.yaml
    │       └── wheezybox.yaml
    ├── manifests
    │   └── site.pp
    ├── modules -> ../puppet-common/modules/
    └── vagrants
        ├── README.md
        ├── centos6
        │   └── Vagrantfile
        ├── precise
        │   └── Vagrantfile
        └── wheezy
            └── Vagrantfile
    
por 30.06.2015 / 20:40
0

Seu problema original era / é que :datadir precisa ser um caminho absoluto. Hiera não permite que você especifique caminhos relativos para o :datadir . Se você acha que isso deve ser permitido, envie uma solicitação para alterá-la .

O manifestdir é descontinuado . Você pode preferir usar o yamldir . Você pode substituir essa configuração quando você passar a marionete.

Para vagabundo:

 servername.vm.provision :puppet, :options => ["--yamldir some/absolute/path"]  do |puppet|
  puppet.hiera_config_path = "puppet/hiera.yaml"
  puppet.manifests_path = "puppet/manifests"
  puppet.module_path = "puppet/modules"
  puppet.manifest_file  = "servername.pp"
  puppet.facter = {
    "vagrant" => "1",
    "server" => "servername",
  }
end

UPDATE : Já que você precisa fornecer um caminho absoluto (e porque vagrant), você deve configurar sua própria pasta compartilhada para que você possa ser explícito sobre onde ela está e não fazer suposições sobre um vagrant definir caminho para a execução de marionetes. Adicione isso ao seu Vagrantfile :

config.vm.synced_folder "puppet/manifests/configuration", "/hieradata"

e, em seguida, altere a primeira linha acima para:

servername.vm.provision :puppet, :options => ["--yamldir /hieradata"]  do |puppet|
    
por 24.02.2015 / 19:05