2017-02-15 26 views
0

У меня есть рецепт шеф-повара, в котором я пытаюсь сказать:Если оператор с использованием регулярных выражений в Ruby (Chef рецепт)

«Если имя хоста сервера заканчивается в -1, а затем включить и запустить newrelic- sysmond и newrelic-daemon, иначе отключите эти службы "

, используя RegEx, чтобы определить, заканчивается ли имя хоста в -1 или нет.

Используя мою попытку ниже, службы, похоже, включаются и запускаются независимо от того, заканчивается ли имя хоста в -1 или нет. Я совершенно новой для Ruby, и повар, так что я не был бы сюрприз, если мой код неверен:

if node["hostname"] =~ /^.*-1$/ 
    service 'newrelic-sysmond' do 
     action [ :enable, :start ] 
    end 
    service 'newrelic-daemon' do 
     action [ :enable, :start ] 
    end 
else 
    service 'newrelic-sysmond' do 
     action [ :disable ] 
    end 
    service 'newrelic-daemon' do 
     action [ :disable ] 
    end 
end 
+3

Любой пример значения 'node [" hostname "]', которое соответствует тому, где они не должны? Вы можете добавить имя хоста «Chef :: Log.warn»: # {node ['hostname']} "' перед тем, если вы хотите отладить и посмотреть, что он тестирует. (ваш код мне нравится) – Tensibai

+2

И этот код является единственным в вашем списке? возможно, есть другое место, где определяется тот же ресурс службы. (в этом случае вы должны перемотать его, а не переопределять его, см. https://docs.chef.io/dsl_recipe.html#edit-resource) – Tensibai

+3

«... определить, заканчивается ли имя хоста в -1 ...» Затем используйте 'node [" hostname "]. End_with? (" - 1 ")'. Это намного быстрее и понятнее, чем ваше регулярное выражение. Если вы настаиваете на использовании регулярного выражения, то '/ -1 $ /' является достаточным и намного понятнее. См. Http://rubular.com/r/E5trSWP2lf и http://rubular.com/r/jVOu4hD6Re. Кажется, ваш текущий шаблон правильный, поэтому проблема в другом месте. –

ответ

0

Существует вероятность того, что имя хоста не то, что вы думаете. Вероятно, вы хотите что-то вроде if node['machinename'] =~ /-1$/ или if node['machinename'].end_with?('-1'). В противном случае это выглядит нормально.

+0

Это сомнительная практика для создания ответов на основе комментариев, сделанных за час до этого. –

+0

Важным битом было использование 'machinename' вместо' hostname', о котором раньше не упоминалось. – coderanger

 Смежные вопросы

  • Нет связанных вопросов^_^