Как определить функцию / действие / ... в chef, которая возвращает значение, которое можно использовать, например, not_if - PullRequest
3 голосов
/ 21 сентября 2011

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

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

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

1 Ответ

2 голосов
/ 28 сентября 2011

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

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

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

Вы можете иметь атрибут узла и использовать его в качестве условия или вызвать метод ruby, который возвращает true или false.

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

http://wiki.opscode.com/display/chef/Resources#Resources-ConditionalExecution

...