Как определить функцию/действие/в шеф-поваре, которая возвращает значение, которое можно использовать, например. не_если

В данный момент я изучаю шеф-повара и пытаюсь написать все так, чтобы повторная подготовка ничего не сломала.

У меня есть сервер, который развернут на машине, а затем в него загружен какой-то код. В следующий раз при подготовке я предпочитаю сначала проверить, был ли уже загружен код. И я хочу сделать это универсальным способом, потому что я использую его в разных рецептах. Моя идея заключалась бы в том, чтобы определить функцию/определение/и т. д. Я могу вызвать функцию, которая проверяет условие и возвращает значение. Я надеюсь, что смогу использовать эту функцию/... в предложении not_if для других действий.

Есть ли способ сделать это в шеф-поваре с определением/действием/поставщиком/... или мне нужно где-то добавить какие-то рубиновые вещи?


person Norbert Hartl    schedule 21.09.2011    source источник


Ответы (1)


Все ресурсы в Chef имеют условное исполнение.

Операторы not_if и only_if могут принимать команду оболочки в виде строки или рубинового блока, чтобы определить, должны ли они выполнять свое действие или нет.

user "myuser" do
  not_if "grep myuser /etc/password"
  action :create
end

У вас может быть атрибут node и вы можете использовать его как условное выражение или вызвать метод ruby, возвращающий true или false.

template "/tmp/somefile" do
  mode "0644"
  source "somefile.erb"
  not_if { node[:some_value] }
end

https://web.archive.org/web/20111120120013/http://wiki.opscode.com/display/chef/Resources#Resources-ConditionalExecution

person AdamK    schedule 28.09.2011
comment
Спасибо. Тем временем я понял, что предоставление строки будет выполняться как сценарий оболочки. Я создал несколько сценариев моста для связи с сервером, чтобы предотвратить множественную загрузку кода. - person Norbert Hartl; 29.09.2011
comment
Привет @AdamK, не могли бы вы рассказать, как использовать ruby_block внутри условий not_if/only_if? - person Eye; 28.03.2013