Назад | Перейти на главную страницу

Условные зависимости в CHEF

У меня сложный программный стек, которым я управляю двумя рецептами.

recipe[stack::foo]
recipe[stack::bar]

foo устанавливается на каждом сервере, тогда как bar устанавливается только на подмножестве серверов. bar зависит от файла и сервиса foo.

рецепт [stack :: foo]

  file 'fooFile' do
    source 'somewhere'
    notifies :restart, service[barService] #bar needs to be restart first, if it is present
    notifies :restart, service[fooService]
  end

  service 'fooService' do
    action :start
  end

рецепт [stack :: bar]

  file 'barFile' do
    source 'somewhere'
  end

  service 'barService' do
    action :start
  end

Можно ли сделать условную зависимость, чтобы если bar рецепт присутствует на узле, он перезапустит его. Если это не так, он его пропустит.

Я пробую что-то вроде этого

  file 'fooFile' do
    source 'somewhere'
    notifies :restart, service[barService] if exists? "service[barService]" 
    notifies :restart, service[fooService]
  end

Ответили в IRC, и пользователь spuder сообщил, что двойной запрос не приветствуется.

tl; dr использовать resources() или проверьте список выполнения.