Я хотел бы знать , как настроить :datadir:
в hiera.yaml
для оптимального использования с кукольным и Vagrant. В настоящее время я использую vagrant 1.5.0 с virtualbox 4.2 на Ubuntu 13.10 с гостем Ubuntu 12.04 под управлением puppet 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...
Если я захожу в мою машину через ssh vagrant ssh
, я вижу, что Vagrant монтирует мой каталог манифеста в / tmp / vagrant-puppet-2. Если я редактирую hiera.yaml
файл и заменяю :datadir:
его полным путем /tmp/vagrant-puppet-2/manifests/configuration
, тогда мои манифесты Puppet могут получить доступ к моим данным Hiera. Могу ли я сделать это с относительным путем, хотя?
hiera.yaml
файла, один для использования с vagrant и один для использования с Puppet (в производстве)?hiera.yaml
Я работаю с специфицирует:datadir: /etc/puppet/hiera
и у меня не было никакой удачи с установкой--yamldir
опции , как некоторые из других ответов , указанных. Однако через некоторое время я понял, что могу просто сопоставить свои hieradata с этим местом на гостевой виртуальной машине:Это хорошо работает :-)
источник
config.vm.synced_folder("D:/branches/preprod/hieradata", "/etc/puppet/hieradata")
и также указалpuppet.hiera_config_path = "D:/branches/preprod/hiera.yaml"
в строфах конфигурации марионетки.Это то, что я делаю в своих собственных кукольных экспериментах.
Мой минималистский hiera.yaml выглядит так:
И в целях иллюстрации моя структура каталогов на хосте (MacBook) выглядит следующим образом:
источник
Ваша первоначальная проблема заключалась в том, что это
:datadir
должен быть абсолютный путь. Hiera не позволяет вам указывать относительные пути для:datadir
. Если вы считаете, что это должно быть разрешено, отправьте запрос на его изменение .manifestdir устарел . Вы можете вместо этого использовать yamldir . Вы можете переопределить эту настройку, когда передадите куклу.
Для бродяги:
ОБНОВЛЕНИЕ : Так как вам нужно указать абсолютный путь (и потому что vagrant), вы должны настроить свою собственную общую папку, чтобы вы могли четко указать, где она находится, и не делать предположений относительно пути vagrant set для выполнения марионеток. Добавьте это к вашему
Vagrantfile
:а затем измените первую строку выше на:
источник
config.vm.synced_folder "puppet/manifests/configuration", "/hieradata"
puppet apply
. Datadir будет относительно текущего каталога, в котором запускался Puppet.