Использование include_recipe в LWRP, а не run_context.include_recipe

Я начал использовать include_recipe в моих LWRP, и он просто работал - не знал о run_context.include_recipe. Я не уверен, что понимаю разницу и читаю некоторые вещи в интернете, что звучит так, будто обычный include_recipe не должен работать даже в LWRP?

Кажется, работает нормально, но просто любопытно, если я здесь что-то не так делаю. Я не хочу, чтобы include_recipe запускал рецепты каждый раз, когда вызывается ресурс, я просто использую его как обычные include-ресурсы, которые зависят от определенных рецептов, чтобы сначала настроить вещи, просто включив их.

Я предположил, что включенные рецепты запускаются только при первом вызове ресурса, и если ресурс вызывается несколько раз, include_recipe не запускается повторно.

1 ответ

Решение

Проблема с include_recipe внутри LWRP заключается в том, что ресурсы из включенного рецепта попадают в контекст выполнения для действия провайдера, который в основном похож на подконтекст. К сожалению, хорошее решение трудно найти. Как и в случае с вашим последним вопросом, у меня есть решение в моей библиотеке Poise, но оно очень сложное, и у всех "простых" решений есть свои недостатки. Если вы еще не прочитали его, посмотрите https://coderanger.net/two-pass/, в котором рассказывается о внутренней структуре работы DSL. Добавьте к этому посту, что внутренняя часть провайдера - это, по сути, его собственная версия цикла компиляции и конвергенции с собственной коллекцией ресурсов. Вы должны будете представить, как работает последовательность выполнения, и разобраться, какие ресурсы идут в какие коллекции и где находятся сходящиеся указатели (в основном, как указатель инструкций и подпрограммы работают в "обычном коде").

Другие вопросы по тегам