Я использую Puppet 3.7 в стандартном режиме клиент-сервер, со средами и использую Hiera для данных. Я использую Vagrant для тестирования манифестов Puppet прямо из репозитория Puppet.
Недавно я начал использовать Hiera и изменил свой Vagrantfile (и каталог Vagrant), чтобы он работал с ним. Теперь, похоже, он работает с Hiera, но появляется другая проблема: Vagrant думает, что моя виртуальная машина находится в производстве среды, когда она находится в экспериментальной. (раньше это работало нормально)
Репозиторий Puppet выглядит так
~/code/puppet
└── environments
├── experimental
│ ├── manifests
│ │ └── site.pp
│ ├── modules
│ └── Puppetfile
├── production
│ ├── manifests
│ │ └── site.pp
│ ├── modules
│ └── Puppetfile
└── testing
├── manifests
│ └── site.pp
├── modules
└── Puppetfile
Мои настройки Vagrant хранятся в другом каталоге. Я создал символическую ссылку (ln -s) на ~ / code / puppet с именем puppet в этом каталоге. Vagrantfile выглядит
config.vm.define "standalone", primary: true do |config|
config.vm.box = "debian_wheezy+vbox_jessie+puppet_3.7"
config.vm.hostname = "standalone.puppet.vagrant"
config.vm.network "private_network", ip:"192.168.10.21"
config.vm.synced_folder "puppet/hieradata", "/etc/puppet/hieradata"
config.vm.provision :puppet, :options => ["--yamldir /hieradata"] do |puppet|
puppet.manifests_path = "puppet/environments/experimental/manifests"
puppet.manifest_file = "site.pp"
puppet.module_path = [ "puppet/environments/experimental/modules", "puppet/environments/production/modules", "puppet/modules" ]
puppet.hiera_config_path = "puppet/hiera.yaml"
end
end
Я полагаю, что мои недавние изменения после использования Hiera неверны для Vagrant, и, возможно, причиной являются хаки (связывание каталога кода марионетки), но я не вижу, как это должно быть организовано.
Есть ли люди, которые знают эту проблему и как ее решить?
Спасибо
Обновить
Я изменился
puppet.manifests_path = "puppet/environments/#{env}/manifests"
и удалил puppet.working_directory, чтобы моя виртуальная машина была включена / подготовлена.
С участием
puppet.module_path = [ "puppet/modules", "puppet/environments/production/modules" ]
похоже, моя виртуальная машина получает доступ к производственным и текущим модулям env, которые мне нужны.
Вы можете указать все параметры для марионеточного запуска. Вы можете использовать что-то вроде этого:
srv.vm.provision :puppet do |puppet|
puppet.working_directory = "/vagrant/puppet"
puppet.module_path = "puppet/modules"
puppet.manifests_path = "puppet/manifests"
puppet.manifest_file = "site.pp"
puppet.hiera_config_path = "puppet/hiera.yaml"
puppet.options = "--debug --verbose --environment #{env}"
end
Это означает, что ваши модули находятся в «puppet / modules / # {env}», а ваши манифесты - в «puppet / manifest / # {env}. Теперь "env" - это переменная, которую вы можете установить в своем Vagrantfile:
env = "production"
или: вы можете поместить все переменные, такие как "env", в файл yaml и загрузить его.
Для справки вы можете найти все варианты предоставления марионеток здесь: https://www.vagrantup.com/docs/provisioning/puppet_apply.html
Я пришел сюда, чтобы решить аналогичную проблему. Мне удалось объединить более одного пути к модулям с помощью массива. Таким образом, путь к модулю станет
modulepath = ../puppet/environments/dev/modules:../puppet/modules
Ваши пути будут разными.
Моя бродячая среда всегда будет dev
так что я в порядке, жестко запрограммировав этот путь к модулю здесь.
Мой Vagrantfile выглядит так:
Vagrant.configure(2) do |config|
config.vm.box = "centos7"
config.vm.synced_folder("../../puppet/trunk/server/hieradata", "/etc/puppet/hieradata")
config.vm.provision "puppet" do |puppet|
puppet.environment = "dev"
puppet.environment_path = "../../puppet/trunk/server/environments"
puppet.hiera_config_path = "../../puppet/trunk/server/hiera.yaml"
puppet.module_path = [ "../../puppet/trunk/server/environments/dev/modules", "../../puppet/trunk/server/modules" ]
end
end