'если помечены?'Внутренний ресурс (шеф-повар) - PullRequest
0 голосов
/ 19 сентября 2019

В рецепте шеф-повара у меня есть ресурс выполнения, где я хотел бы, чтобы значение атрибута команды зависело от того, помечен ли сервер определенным образом (или что-либо еще, чем я могу управлять из другого рецепта).Т.е. я хотел бы что-то вроде:

execute 'application_settings_control' do
    if tagged?('test-server')
      command "/usr/sbin/application_settings --disablessl --fix /etc/correct-settings.json"
    else
      command "/usr/sbin/application_settings --fix /etc/correct-settings.json"
    end
...

, но это дает

NoMethodError
-----------
undefined method `tagged?' for Chef::Resource::Execute

Это работает, если я поставлю if tagged?... снаружи и продублирую все определение ресурса, но это дастмного дублированного кода, который выглядит плохо, и его сложнее поддерживать.Я нашел ссылки, говорящие о том, что вы можете использовать tagged?() в only_if / not_if атрибутах, но это не очень помогает мне (я думаю, я мог бы сделать код еще труднее для чтения, имея два почти идентичных ресурса с разными commands и отметьте тег в only_if / not_if).

Это просто какая-то простая синтаксическая ошибка, которую я делаю, или что?

1 Ответ

0 голосов
/ 19 сентября 2019

Самый простой способ - использовать атрибуты узла в сочетании с охранниками

execute 'application_settings_control' do
  command "/usr/sbin/application_settings --disablessl --fix /etc/correct-settings.json"
  only_if { node['roles'].include? 'test-server' }
end

, вы можете использовать библиотеку и реализоватьсвою собственную функцию tagged? и используйте ее в своих рецептах вместе с охранниками

или вы можете использовать обычное выражение if умно

execute 'application_settings_control' do
  diable_ssl = node['roles'].include?('test-server') ? '--disablessl' : ''
  command(lazy { "/usr/sbin/application_settings #{disable_ssl} --fix /etc/correct-settings.json" })
end
...