Я использую следующий ресурс шеф-повара:
execute 'run_command' do
command "chkconfig service on"
only_if node['platform_version'].to_i == 6, 5
end
Пожалуйста, дайте мне знать, правильно ли используется защита only_if
Я использую следующий ресурс шеф-повара:
execute 'run_command' do
command "chkconfig service on"
only_if node['platform_version'].to_i == 6, 5
end
Пожалуйста, дайте мне знать, правильно ли используется защита only_if
Команды ruby в защитном блоке должны быть заключены в {}. Также обратите внимание, что любой код ruby внутри защитного блока будет выполняться на этапе схождения, то есть во время выполнения. У меня был аналогичный сценарий, и, основываясь на комментарии tensibai выше, я просто использовал массив с предварительно включенными значениями для проверки версии ubuntu.
execute "apt-get-update" do
command "apt-get update"
ignore_failure true
notifies :install, 'package[ntp]', :immediately
not_if {[16.04, 18.04].include?(node['platform_version'].to_f) && (node['packages'].keys.include? "ntp")}
#not_if {(node['packages'].keys.include? "ntp")}
end
Итак, для вашего сценария я считаю, что защитный блок будет чем-то вроде
execute 'run_command' do
command "chkconfig service on"
only_if {[5, 6].include?(node['platform_version'].to_i)}
end
only_if %w(6 5).include?(node['platform_version')
. Это просто ruby-тест, поэтому, если вы хотите сделать X == 5 или 6, лучше всего создать массив из [5,6] и проверить, включает ли этот массив фактическое значение platform_version. - person Tensibai   schedule 19.10.2016only_if %w(6 5).include?(node['platform_version'].to_i)
- person meallhour   schedule 19.10.2016