Как исправить полную ошибку в параметре 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'],
   }
}
Другие вопросы по тегам