Як налаштувати: datadir: під час використання Hiera з Puppet та Vagrant


10

Я хотів би знати , як налаштувати :datadir:в hiera.yamlдля оптимального використання з ляльковим і Vagrant. В даний час я використовую vagrant 1.5.0 з virtualbox 4.2 на Ubuntu 13.10 з гостьовою лялькою Ubuntu 12.04 3.1.1

Я намагаюся створити середовище, подібне до цієї публікації в блозі, Puppet Best Practices: Конфігурації для оточення . Зокрема, мій 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...

Якщо я заткнувся в свою машину через vagrant ssh, я можу побачити, що Vagrant монтує мій каталог маніфестів за адресою / tmp / vagrant-puppet-2. Якщо я редагую hiera.yamlфайл і замінюю :datadir:повний шлях /tmp/vagrant-puppet-2/manifests/configuration, то мої маніфестні ляльки можуть отримати доступ до моїх даних Hiera. Чи можу я зробити це відносним шляхом?

Відповіді:


9

Я знайшов рішення, документуючи своє запитання. Змінити: datadir: прочитати:

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

Лялька надасть шлях до каталогу маніфестів у $ settings :: manifestdir. Збереження даних Hiera у каталозі маніфестів корисно, оскільки Vagrant буде встановлювати цей каталог явно перед запуском Puppet в гостьовій системі, а інші каталоги, які ви можете вибрати для цієї мети, можуть бути недоступними.


Чи означає це, що мені потрібні 2 hiera.yamlфайли, один для роботи з бродячим, а один для використання з лялькою (у виробництві)?
Феліпе Альварес

У мене був лише один файл hiera.yaml. Я більше не використовую цю налаштування, але вважаю, що техніка у цій відповіді більше не працює в останніх версіях ляльки. Якщо у вас виникли проблеми, будь ласка, подивіться деякі інші відповіді.
greg_1_anderson

2

hiera.yamlЯ працюю з специфицирует :datadir: /etc/puppet/hieraі у мене не було ніякої удачі з установкою --yamldirопції , як деякі з інших відповідей , зазначених. Однак я зрозумів, що через деякий час я можу просто відобразити свої ієрадати до цього місця в гості 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"у строфах налаштування ляльок.
Феліпе Альварес

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має бути абсолютним шляхом. Ієра не дозволяє вказувати відносні шляхи для :datadir. Якщо ви вважаєте, що це потрібно дозволити, будь ласка, надішліть запит на зміну .

маніфестдір застарілий . Ви можете скористатись ямлдіром замість цього. Ви можете змінити це налаштування під час передачі маріонетки.

Для бродячих:

 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? Все, що відходить від створення припущень про те, якими шляхами користується Вагрант, працювало б.
greg_1_anderson

@ greg_1_anderson ви можете налаштувати власні каталоги, таким чином, ви явно стосуєтесь каталогу та не робите припущень щодо бродячих. config.vm.synced_folder "puppet/manifests/configuration", "/hieradata"
ferventcoder

Оновлено відповідь. Також якщо ви вважаєте, що відносний шлях буде корисним, будь-ласка, створіть квиток на Tickets.puppetlabs.com/browse/HI - спасибі!
ferventcoder

Лялька дозволяє використовувати відносні шляхи для конфігурації даних hiera при запуску puppet apply. Datadir буде відносно поточного режиму, де було проведено лялечку.
Натан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.