Я хотел бы знать, как настроить :datadir:
в hiera.yaml
для оптимального использования с Puppet и Vagrant. В настоящее время я использую vagrant 1.5.0 с virtualbox 4.2 на Ubuntu 13.10 с гостевым Ubuntu 12.04 с марионеткой 3.1.1
Я пытаюсь создать среду, похожую на это сообщение в блоге, Рекомендации по работе с Puppet: конфигурации для конкретной среды. В частности, мой 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
, то мои манифесты Puppet могут получить доступ к моим данным Hiera. Могу ли я сделать это с относительным путем?
Я нашел решение, документируя свой вопрос. Изменить: datadir: читать:
:datadir: "%{settings::manifestdir}/configuration"
Puppet предоставит путь к каталогу манифеста в $ settings :: manifestdir. Хранение данных Hiera в каталоге манифеста полезно, потому что Vagrant будет явно монтировать этот каталог перед запуском Puppet в гостевой системе, а другие каталоги, которые вы можете выбрать для этой цели, могут быть недоступны.
В hiera.yaml
Я работаю с уточнениями :datadir: /etc/puppet/hiera
и мне не повезло с настройкой --yamldir
вариант, как указано в некоторых других ответах. Однако через некоторое время я понял, что могу просто сопоставить свои hieradata с этим местом на гостевой виртуальной машине:
config.vm.synced_folder "../puppet/hiera", "/etc/puppet/hiera"
Это прекрасно работает :-)
Это то, что я делаю в своих марионеточных экспериментах.
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
Ваша первоначальная проблема заключалась в том, что :datadir
должен быть абсолютный путь. Hiera не позволяет указывать относительные пути для :datadir
. Если вы считаете, что это должно быть разрешено, пожалуйста, отправить запрос на его изменение.
manifestdir - это устарел. Вы можете предпочесть использовать Ямлдир вместо. Вы можете переопределить этот параметр при передаче марионеточного применения.
Для бродяг:
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|