2016-10-03 7 views
0

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

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

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

ответ

2

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

+0

Я должен добавить, что вы задавали много вопросов по Шеф-повару, вы должны знать, что у нас есть команда Slack, где вы можете найти меня и других для более вопросов в реальном времени: https: //community-slack.chef. io/ – coderanger

+0

Прохладный, я присоединяюсь к каналу. Итак, тогда run_context.include_recipe добавляет включенный рецепт «глобально», и просто включение include_recipe делает доступный рецепт доступным для ресурса? – red888

+1

Оба те же, другой - 'Chef.run_context.include_recipe', который помещает материал в глобальный контекст, но это также означает, что они оценивают синхронизацию с вещами в провайдере. В принципе, я старался избегать всякого беспорядка, когда это возможно, но это часто означает, что рефакторинг кода, ориентированного на рецепт, в поваренных книгах по потоку должен быть ориентирован на ресурсы. – coderanger