Я регулярно, но случайно получаю следующее сообщение об ошибке, когда запускаю марионеточный клиент на машинах (недемонизированных):
err: Could not create : Parameter path failed: File paths must be fully qualified warning: Not using cache on failed catalog warning: Configuration could not be instantiated: Parameter path failed: File paths must be fully qualified
Кажется умеренно ясным, что это означает - что у меня нет полного пути в параметре. Однако это не говорит мне где Я могу найти это, чтобы исправить это, или даже какой параметр неверен :(
(Если я использую параметр отладки, он работает стабильно, поэтому кажется, что проблема с кешированием манифестов ... Было бы неплохо избавиться от этого для производственного использования, тем не менее)
Примечание: я не могу заставить это происходить постоянно : /
[Отвечаю на собственный вопрос после того, как немного поработал над конфигурацией]
Мне удалось отследить это до одного из модулей, которые я написал (конечно), но это произошло из-за использования переменной, которая не сработала так, как я ожидал.
Произошло следующее:
$variable_dir = "/etc/puppet/bar"
class foo {
file { $variable_dir:
ensure => directory
}
}
define some-define() {
# Trimmed for brevity
exec { "some-$name":
# command, creates, timeout etc here
require => File[$variable_dir],
}
}
.. что в основном вызвало некоторую путаницу с File [], использующим переменную. Я заменил их на явное значение переменной, и все работает нормально, но это было чем-то вроде сюрприза! Я предполагаю, что мое понимание области действия и того, когда можно определять / использовать переменные, несколько не в порядке с Puppet, поэтому я собираюсь узнать, что много лучше...
Кажется, это вызвало то же поведение, что и использование неполных путей в строках файлов, из-за того, что не удалось найти переменную или не получить значение? Во всяком случае, довольно странно.
Изменить: вполне возможно, что переменная не была найдена в области видимости, поэтому была пуста и определенно не являлась полностью определенным путем. Однако не объясняет, почему это не соответствовало ...
Когда вы тестируете конфигурацию марионетки, вы можете сделать это, запустив
puppetd --test
что даст вам гораздо более подробный вывод, и он должен показать вам, где он не работает. Если вы действительно в отчаянии, можете приступить к --debug
чтобы получить еще больше результатов.
Если вы хотите заглянуть в свой .pp
файлы вы должны искать
file { "path/to/file":
...
}
в котором отсутствует /
(т.е. он должен читать /path/to/file
вместо)
Полный путь должен быть помещен в имя ключа, если вы не используете path
параметр.
Например:
file { '/full/path':
ensure => directory,
recurse => true,
}
или:
file { 'my name':
path => "/full/path",
ensure => directory,
recurse => true,
}
Если вы используете переменную, убедитесь, что она определена. Если он в другом классе, используйте стандартный $class::variable
синтаксис. Для получения дополнительной информации запустите марионетку с -vd
(подробный + отладка) параметр.
Вы можете указать фактический путь к свойству path, и тогда он будет работать. Это работает для меня:
$variable_dir = "/etc/puppet/bar"
class foo {
file { 'variable_dir':
path => ${variable_dir},
ensure => directory
}
}
define some-define() {
# Trimmed for brevity
exec { "some-$name":
# command, creates, timeout etc here
require => File['variable_dir'],
}
}