설정 방법 : datadir : Puppet 및 Vagrant와 함께 Hiera를 사용할 때


10

내가 설정하는 방법을 알고 싶습니다 :datadir:hiera.yaml인형과 방랑 최적의 사용을 위해. 현재 퍼펫 3.1.1을 실행하는 Ubuntu 12.04 게스트와 함께 Ubuntu 13.10에서 virtualbox 4.2와 함께 방랑 제 1.5.0을 사용하고 있습니다.

이 블로그 게시물 인 Puppet Best Practices : Environment specific configs 와 유사한 환경을 설정하려고합니다 . 특히 내 Vagrantfile에는 다음이 포함됩니다.

  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

hiera_config_path삭제하면 오류가 발생하기 때문에가 올바른지 확인할 수 있습니다 hiera.yaml.

puppet/hiera.yaml 포함한다 :

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

또한 다음을 puppet/manifests/configuration/common.yaml포함합니다.

---
myvar: "test"

커맨드 라인에서 이것을 테스트 :

$ hiera -c hiera.yaml myvar
test

여태까지는 그런대로 잘됐다. 그러나 꼭두각시 매니페스트 파일 내에서 이것을 테스트하려고하면 변수를 찾을 수 없으며 오류가 발생합니다. 테스트 예 :

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

오류는 다음과 같습니다

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

를 통해 내 컴퓨터에 ssh하면 vagrant sshVagrant가 / tmp / vagrant-puppet-2에 매니페스트 디렉토리를 마운트하고 있음을 알 수 있습니다. hiera.yaml파일을 편집하고 :datadir:전체 경로로 /tmp/vagrant-puppet-2/manifests/configuration바꾸면 Puppet 매니페스트가 내 Hiera 데이터에 액세스 할 수 있습니다. 그래도 상대 경로 로이 작업을 수행 할 수 있습니까?

답변:


9

내 질문을 기록하는 동안 해결책을 찾았습니다. : datadir :을 다음과 같이 변경하십시오.

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

퍼펫은 $ settings :: manifestdir에 매니페스트 디렉토리의 경로를 제공합니다. 매니페스트 디렉토리 내에 Hiera 데이터를 저장하면 Vagrant가 게스트 시스템에서 Puppet을 실행하기 전에이 디렉토리를 명시 적으로 마운트하고이 목적으로 선택할 수있는 다른 디렉토리를 사용할 수 없기 때문에 유용합니다.


이것은 2 개의 hiera.yaml파일 이 필요하다는 것을 의미합니까? 하나는 방랑 용이고 다른 하나는 꼭두각시와 함께 사용됩니다 (생산 중)?
Felipe Alvarez 2016 년

hiera.yaml 파일이 하나만 있습니다. 이 설정을 더 이상 사용하지 않지만이 답변의 기술은 최신 버전의 Puppet에서 더 이상 작동하지 않는다고 생각합니다. 문제가 있으면 다른 답변을 참조하십시오.
greg_1_anderson 2016 년

2

hiera.yaml내가 지정 함께 일하고 있어요 :datadir: /etc/puppet/hiera그리고 나는 설정과 운이 없었다 --yamldir지정된 다른 답변의 일부로서 옵션을 선택합니다. 그러나 잠시 후 내 hieradata를 게스트 VM의 해당 위치에 매핑 할 수 있음을 깨달았습니다.

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

이것은 잘 작동합니다 :-)


이것은 내가 가진 설정이었습니다. 매핑 된 폴더를 만들고 꼭두각시 구성 스탠자 config.vm.synced_folder("D:/branches/preprod/hieradata", "/etc/puppet/hieradata")에서도 지정 puppet.hiera_config_path = "D:/branches/preprod/hiera.yaml"했습니다.
Felipe Alvarez

1

이것이 제가 꼭두각시 실험에서하는 일입니다.

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

내 미니멀리스트 hiera.yaml은 다음과 같습니다.

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

그리고 설명을 위해 호스트의 디렉토리 구조 (MacBook)는 다음과 같습니다.

    .
    ├── 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

0

원래 문제는 :datadir절대 경로 여야합니다. Hiera에서는에 대한 상대 경로를 지정할 수 없습니다 :datadir. 이것이 허용되어야한다고 생각되면 변경 요청을 제출하십시오 .

manifestdir은 더 이상 사용되지 않습니다 . 대신 yamldir 을 사용하는 것이 좋습니다. 퍼펫 적용을 통과하면 해당 설정을 무시할 수 있습니다.

방랑자 :

 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

업데이트 : 절대 경로를 제공해야하고 (방랑자가 있기 때문에) 꼭두각시 실행 경로가 어디에 있는지 명시하고 인형 실행을위한 가정 설정 경로를 가정하지 않도록 자체 공유 폴더를 설정해야합니다. 이것을 다음에 추가하십시오 Vagrantfile.

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

그런 다음 위의 첫 번째 줄을 다음으로 변경하십시오.

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

--yamldir을 참조 해 주셔서 감사합니다. 매우 도움이됩니다. 그러나 문제는 상대 경로를 사용해야한다는 것입니다. 절대 경로를 설정하면 [ "--yamldir / tmp / vagrant-puppet-2 / manifests / configuration"]; 그러나 / tmp / vagrant-puppet-2가 안정적인 경로가 될 것이라고 믿을 수 없습니다. 이 경로를 포함하는 Vagrantfile에서 참조 할 수있는 변수가 있습니까? 아니면 / tmp / vagrant-puppet-2 대신 사용할 경로를 지정하도록 변수를 설정할 수 있습니까? Vagrant가 사용할 경로에 대한 가정을 벗어나는 모든 것이 효과가 있습니다.
greg_1_anderson

@ greg_1_anderson 당신은 자신의 디렉토리를 설정할 수 있습니다. 그렇게하면 디렉토리에 대해 명시 적이며 방랑자를 가정하지 않습니다. config.vm.synced_folder "puppet/manifests/configuration", "/hieradata"
ferventcoder

답변을 업데이트했습니다. 또한 상대 경로가 도움이 될 것이라고 생각되면 tickets.puppetlabs.com/browse/HI 에서 티켓을 만드십시오. 감사합니다!
ferventcoder

퍼펫은 실행할 때 hiera datadir 구성에 대한 상대 경로를 허용합니다 puppet apply. datadir은 Puppet이 실행 된 현재 디렉토리에 상대적입니다.
Nathan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.