Как исправить полную ошибку в параметре Puppet?
Я регулярно, но случайно получаю следующее сообщение об ошибке, когда запускаю клиент puppet на машинах (недемонизированных):
ошибка: не удалось создать: путь к параметру не удалось: пути к файлам должны быть полностью определены предупреждение: не использовать кеш в сбойном каталоге предупреждение: не удалось создать экземпляр конфигурации: сбой пути к параметру: пути к файлам должны быть полностью определены
Кажется в меру ясным, что это значит - у меня нет полного пути в параметре. Однако, это не говорит мне, где я могу найти это, чтобы исправить это, или даже какой параметр неверен:(
(Если я использую опцию отладки, она работает последовательно, поэтому кажется, что проблема с кэшированием манифестов... Было бы неплохо избавиться от этого для производственного использования, все же)
Примечание: я не могу сделать это последовательно:/
4 ответа
[Отвечая на собственный вопрос после того, как немного поболтал в конфиге]
Мне удалось отследить это до одного из модулей, которые я написал (конечно), но это было связано с использованием переменной, которая не сработала так, как я ожидал.
Что случилось было:
$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
синтаксис. Для получения дополнительной информации, запустите Puppet с -vd
(подробный + отладочный) параметр.
Вы можете поставить фактический путь к свойству пути, тогда он работает. Это работает для меня:
$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'],
}
}