Cara mengatur: datadir: saat menggunakan Hiera dengan Wayang dan Vagran

10

Saya ingin tahu cara mengatur :datadir:di hiera.yamluntuk penggunaan optimal dengan Wayang dan gelandangan. Saat ini saya menggunakan vagrant 1.5.0 dengan virtualbox 4.2 di Ubuntu 13.10 dengan tamu Ubuntu 12.04 menjalankan boneka 3.1.1

Saya mencoba membuat lingkungan yang mirip dengan posting blog ini, Puppet Best Practices: Konfigurasi khusus lingkungan . Secara khusus, Vagrantfile saya mengandung:

  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

Saya dapat mengkonfirmasi bahwa hiera_config_pathitu benar, karena saya mendapatkan kesalahan jika saya menghapus hiera.yaml.

puppet/hiera.yaml mengandung:

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

Dan selanjutnya, puppet/manifests/configuration/common.yamlberisi:

---
myvar: "test"

Menguji ini dari commandline:

$ hiera -c hiera.yaml myvar
test

Sejauh ini baik. Namun, jika saya mencoba untuk menguji ini dari dalam file manifes boneka, variabel tidak dapat ditemukan, dan saya mendapatkan kesalahan. Contoh uji:

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

Kesalahannya adalah:

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

Jika saya ssh ke mesin saya melalui vagrant ssh, saya dapat melihat bahwa Vagrant me-mount direktori manifes saya di / tmp / vagrant-puppet-2. Jika saya mengedit hiera.yamlfile, dan mengganti :datadir:dengan path lengkap /tmp/vagrant-puppet-2/manifests/configuration, maka manifes Wayang saya dapat mengakses data Hiera saya. Bisakah saya melakukan ini dengan jalur relatif?

greg_1_anderson
sumber

Jawaban:

9

Saya menemukan solusinya saat mendokumentasikan pertanyaan saya. Ubah: datadir: untuk membaca:

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

Wayang akan memberikan path ke direktori manifes di $ settings :: manifestdir. Menyimpan data Hiera di dalam direktori manifes berguna karena Vagrant akan memasang direktori ini secara eksplisit sebelum menjalankan Wayang di sistem tamu, dan direktori lain yang Anda pilih untuk tujuan ini mungkin tidak tersedia.

greg_1_anderson
sumber
Apakah ini berarti saya perlu 2 hiera.yamlfile, satu untuk digunakan dengan gelandangan, dan satu untuk digunakan dengan Wayang (dalam produksi)?
Felipe Alvarez
Saya hanya pernah punya satu file hiera.yaml. Saya tidak menggunakan pengaturan ini lagi, tetapi saya percaya bahwa teknik dalam jawaban ini tidak lagi berfungsi di versi Wayang terbaru. Jika Anda memiliki masalah dengan itu, silakan lihat beberapa jawaban lainnya.
greg_1_anderson
2

The hiera.yamlaku bekerja dengan menspesifikasikan :datadir: /etc/puppet/hieradan saya tidak beruntung dengan pengaturan --yamldirpilihan sebagai beberapa jawaban lain yang ditentukan. Namun, saya menyadari setelah beberapa saat bahwa saya bisa memetakan hieradata saya ke lokasi itu di guest vm:

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

Ini bekerja dengan baik :-)

Stig Brautaset
sumber
Ini persis set up yang saya miliki. Saya membuat folder yang dipetakan config.vm.synced_folder("D:/branches/preprod/hieradata", "/etc/puppet/hieradata")dan juga ditentukan puppet.hiera_config_path = "D:/branches/preprod/hiera.yaml"dalam bait konfigurasi boneka.
Felipe Alvarez
1

Inilah yang saya lakukan dalam percobaan boneka saya sendiri.

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 minimalis saya terlihat seperti ini:

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

Dan untuk tujuan ilustrasi, struktur direktori saya di host (MacBook) terlihat seperti ini:

    .
    ├── 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
Joaquin Menchaca
sumber
0

Masalah awal Anda adalah / yang :datadirperlu menjadi jalur absolut. Hiera tidak memungkinkan Anda menentukan jalur relatif untuk :datadir. Jika Anda merasa ini harus diizinkan, silakan ajukan permintaan untuk mengubahnya .

manifestdir sudah usang . Anda mungkin lebih suka menggunakan yamldir saja. Anda dapat mengganti pengaturan itu saat Anda meloloskan boneka.

Untuk gelandangan:

 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

PEMBARUAN : Karena Anda perlu memberikan jalur absolut (dan karena gelandangan), Anda harus menyiapkan folder bersama Anda sendiri sehingga Anda dapat secara eksplisit tentang di mana itu dan tidak membuat asumsi pada jalur setel gelandangan untuk eksekusi boneka. Tambahkan ini ke Anda Vagrantfile:

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

dan kemudian ubah baris pertama di atas ke:

servername.vm.provision :puppet, :options => ["--yamldir /hieradata"]  do |puppet|
ferventcoder
sumber
Terima kasih untuk referensi ke --yamldir; itu sangat membantu. Masalahnya, bagaimanapun, adalah bahwa saya perlu menggunakan jalur relatif. Jika saya meletakkan path absolut, saya harus menggunakan ["--yamldir / tmp / vagrant-puppet-2 / manifests / configuration"]; Namun, saya tidak bisa percaya bahwa / tmp / gelandangan-boneka-2 akan menjadi jalur yang stabil. Apakah ada variabel yang dapat saya referensi di Vagrantfile yang berisi jalur ini? Atau bisakah saya mengatur beberapa variabel untuk menetapkan jalur apa yang harus digunakan alih-alih / tmp / vagrant-puppet-2? Apa pun yang lolos dari membuat asumsi tentang jalur apa yang akan digunakan Vagrant akan berhasil.
greg_1_anderson
@ greg_1_anderson Anda dapat mengatur direktori Anda sendiri, dengan cara itu Anda eksplisit tentang direktori dan tidak membuat asumsi tentang gelandangan. config.vm.synced_folder "puppet/manifests/configuration", "/hieradata"
ferventcoder
Diperbarui jawabannya. Juga jika Anda merasa jalur relatif itu akan membantu, silakan buat tiket di tickets.puppetlabs.com/browse/HI - terima kasih!
ferventcoder
Wayang memang memungkinkan jalur relatif untuk konfigurasi hiera datadir saat berjalan puppet apply. Datadir akan relatif terhadap dir saat ini di mana Wayang dijalankan.
Nathan