Назад | Перейти на главную страницу

Vagrant Puppet применяет манифест с неправильной средой

Я использую 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