Это может оказаться сложнее, чем кажется.
Как правило, факт - это хороший способ получить информацию от агента к хозяину. С FACT 2.x
факт может принимать значение массива или хэша для размещения нескольких имен файлов, которые вы хотите связывать.
Однако манифест может никогда не полагаться на значение, которое определяется во время синхронизации exec
(или любого) ресурса. Это потому, что ресурсы оцениваются во время фазы приложения каталога. Эта фаза начинается после завершения компиляции манифеста. Агент работает с полным каталогом. Информация о фактах собирается до начала компиляции. Таким образом, манифест должен иметь возможность полностью полагаться на информацию, которая присутствует до того, как компилятор начнет ее оценивать.
Обратите внимание, что это не так, если вы используете puppet apply
вместо master/agent.
Я вижу два пути, чтобы вы могли это сделать.
- Move вся логика от ведущего к агенту - построить более сложный сценарий, который делает всю необходимую работу через один монолитный
exec
ресурса. Это может быть или не быть осуществимым.
- Успокойте решение, требующее двух марионеток. Создайте (группу) настраиваемых фактов, которые собирают сгенерированные имена файлов. Создайте манифест таким образом, чтобы вся логика, зависящая от имени файла, игнорировалась до тех пор, пока имя файла не будет определено.
Оба варианта, вероятно, не идеальны.
Альтернативой является переосмысление вашей модели, так что имена файлов не должны динамически генерироваться в первую очередь. Я не могу прокомментировать осуществимость, не зная о конкретной проблеме/сценарии.
Еще раз спасибо, я закончил писать пользовательскую функцию, используя класс tempfile ruby, чтобы создать файл и вернуть имя. – Derongan