Во всех ответах, которые предполагают
include_recipe "foo" if node['bar'] == 'baz'
вы забываете одну чрезвычайно важную вещь - это, если оценивается на этапе компиляции, и если узел ['bar'] изменяется в ходе выполнения, это если даст неправильный результат, поскольку он будет основан на оригинале, а не на измененном ценность.
Можно возразить, что это плохая практика, но подумайте дважды, прежде чем делать это. Просто пример: установка пакетов в режиме шеф-клиента — обычная практика. После этого перезагрузить пакеты плагинов ohai можно считать хорошей практикой, но что произойдет с кодом:
include_recipe "my_cookbook::install" unless node['packages'].key?('mypackage')
в случае, если мой пакет установлен где-то в поваренной книге, которая выполняется ранее в том же запуске клиента? Правильный ответ — рецепт будет включен, хотя из кода ясно, что ожидается, что это не так.
К сожалению, я, по крайней мере, не знаю, как решить эту проблему, так как и include_recipe, и возможное условие оцениваются на этапе компиляции. Насколько я знаю, нет способа условного включения рецепта на основе действий, предпринятых другими кулинарными книгами в рамках одного и того же запуска шеф-клиента.
person
Stanislav
schedule
08.03.2019