2014-09-03 5 views
1

Допустим, у меня есть ресурс exec на узле, который создает файл с именем, определенным во время выполнения. У меня есть полный доступ к запущенному скрипту, и скрипт знает имя создаваемого файла.Обработка сгенерированных файлов в кукольном

В Puppet, желательно без использования такого большого рубина, как я могу использовать имя этого файла, созданного в ресурсе File или Package?

Из того, что я видел, некоторые люди упомянули об этом, используя для этого особый факт. Однако, если я намерен использовать один и тот же сценарий несколько раз, как я могу сохранить этот факт в правильной области?

ответ

1

Это может оказаться сложнее, чем кажется.

Как правило, факт - это хороший способ получить информацию от агента к хозяину. С FACT 2.x факт может принимать значение массива или хэша для размещения нескольких имен файлов, которые вы хотите связывать.

Однако манифест может никогда не полагаться на значение, которое определяется во время синхронизации exec (или любого) ресурса. Это потому, что ресурсы оцениваются во время фазы приложения каталога. Эта фаза начинается после завершения компиляции манифеста. Агент работает с полным каталогом. Информация о фактах собирается до начала компиляции. Таким образом, манифест должен иметь возможность полностью полагаться на информацию, которая присутствует до того, как компилятор начнет ее оценивать.

Обратите внимание, что это не так, если вы используете puppet apply вместо master/agent.

Я вижу два пути, чтобы вы могли это сделать.

  1. Move вся логика от ведущего к агенту - построить более сложный сценарий, который делает всю необходимую работу через один монолитный exec ресурса. Это может быть или не быть осуществимым.
  2. Успокойте решение, требующее двух марионеток. Создайте (группу) настраиваемых фактов, которые собирают сгенерированные имена файлов. Создайте манифест таким образом, чтобы вся логика, зависящая от имени файла, игнорировалась до тех пор, пока имя файла не будет определено.

Оба варианта, вероятно, не идеальны.

Альтернативой является переосмысление вашей модели, так что имена файлов не должны динамически генерироваться в первую очередь. Я не могу прокомментировать осуществимость, не зная о конкретной проблеме/сценарии.

+0

Еще раз спасибо, я закончил писать пользовательскую функцию, используя класс tempfile ruby, чтобы создать файл и вернуть имя. – Derongan

Смежные вопросы