Я использую Vagrant, чтобы сразу начать некоторую начальную конфигурацию Puppet, и меня смущает, как включить / запустить несколько манифестов (кроме site.pp) в рабочий процесс выполнения марионетки, не создавая дополнительных манифестов в модулях и включая их таким образом.
В каталоге манифестов марионеток, на который я указываю Vagrant (см. Ниже), у меня есть два манифеста, которые я хочу выполнить: site.pp и hierasetup.pp.
config.vm.provision "puppet" do |puppet|
puppet.manifests_path = "puppet_files/manifests"
puppet.module_path = "puppet_files/modules"
puppet.manifest_file = "site.pp"
puppet.options = "--verbose --debug"
end
В настоящее время у меня есть site.pp как манифест, который вызывает hierasetup.pp. Мой site.pp выглядит так:
File {
owner => 'root',
group => 'root',
mode => '0644',
}
import "hierasetup.pp"
include jboss
Но я получаю эту ошибку об устаревании "импорта":
Предупреждение: использование import устарело в /tmp/vagrant-puppet-1/manifests/site.pp:33. Видеть http://links.puppetlabs.com/puppet-import-deprecation (на grammar.ra: 610: в `_reduce_190 ')
В соответствии с указанным URL в разделе «Что стоит попробовать вместо этого» говорится:Чтобы хранить определения узлов в отдельных файлах, укажите каталог в качестве основного манифеста.".
Далее это марионеточный документ по основным манифестам говорит:
"Рекомендуется: если вы активно используете основной манифест вместо того, чтобы полагаться на ENC, подумайте об изменении настройки манифеста на $ confdir / manifestests. Это позволяет разделить код верхнего уровня на несколько файлов, избегая использования ключевого слова import. Он также будет соответствовать поведению простых сред."
Похоже, что Puppet может ссылаться на весь каталог, а не только на конкретный файл манифеста, так что я ожидал, что Vagrant сделает это и позволит мне отказаться от "puppet.manifest_file = "site.pp"и укажите вместо этого на родительский каталог, в котором будут выполняться все файлы * .pp. Однако удаление этой строки в Vagrant просто генерирует жалобу на ожидаемый" default.pp "вместо нее:
поставщик марионеток: * Настроенный манифест Puppet отсутствует. Укажите путь к существующему манифесту: /some/path/puppet_files/manifests/default.pp
Так:
Обновить: Благодаря Шейну проблема с номером 2 (код Vagrant не отслеживается, чтобы разрешить указание на каталоги манифеста марионеток) была обнаружена на сайте отслеживания проблем Vagrant GitHub и с тех пор исправлена: https://github.com/mitchellh/vagrant/issues/4169
Во-первых, правильно ли я понимаю «новый» (неимпортный) способ вызова нескольких манифестов, когда нужно указать каталог, в котором будут выполняться все файлы * .pp внутри него?
Да, конечно. Видеть Вот:
Если вы сильно используете основной манифест вместо того, чтобы полагаться на ENC, подумайте об изменении настройки манифеста на $ confdir / manifestests. Это позволяет разделить код верхнего уровня на несколько файлов, избегая использования ключевого слова import.
Более того, manifest
и modulepath
также устаревают в пользу сред каталогов и манифестного поведения каталога, см. Вот:
Теперь, когда среды каталогов завершены, среды с конфигурационными файлами устарели. Определение блоков среды в puppet.conf вызовет предупреждение об устаревании, как и любое использование параметров modulepath, manifest и config_version в puppet.conf.
Это довольно большое изменение для многих развертываний, но в долгосрочной перспективе оно должно стать хорошим улучшением.
А во-вторых, «догнал» ли Vagrant это новое изменение, чтобы приспособить ссылки на каталоги в сочетании с отказом Puppet от «импорта»?
Нет, это не имеет; из их документов:
manifest_file (строка) - имя файла манифеста, который будет служить точкой входа для запуска Puppet. Ожидается, что этот файл манифеста будет существовать в настроенном manifest_path
При использовании с Vagrant вы пока сталкиваетесь с предупреждениями об устаревании, что очень прискорбно. Но импорт не планируется удалять до версии 4.x, так что у Vagrant есть время, чтобы наверстать упущенное.