2016-08-13 2 views
0

Я написал Баш ресурс следующим образом:not_if не работает, как ожидалось в Баш ресурс

bash 'initialize_vault' do 
    environment (node['vault']['env']) 
    code <<-EOH 
    vault init > /etc/vault/keys 
    EOH 
not_if { vault init | grep 'initialized' } 
end 

Кажется, что not_if не работает, как ожидалось Баш выполняется каждый раз.

Что такое правильный способ написать not_if здесь?

+0

Глупый вопрос здесь, но вы уверены, что содержимое 'initialized', которое вы ищете, записывается в stdout, а не stderr (где данные ведения журнала/состояния, по соглашению, * предположительно *, чтобы пойти)? –

+0

Прошло некоторое время с тех пор, как я работал с шеф-поваром, но передавая строку оболочки в этой форме, а не как, ну, * строка * удивляет. 'not_if 'vault init 2> & 1 | grep -q initialized'' пахнет больше, чем я помню, когда был прав. –

+0

Тем не менее, в контексте основная логика здесь вряд ли будет правильной. Подумайте, что это на самом деле делает: вы всегда * запускаете 'vault init' сразу - при оценке предложения' not_if' - и после этого пытаетесь запустить его во второй раз, если это предложение 'not_if' не вернулось правда. Это не имеет смысла: если вы не хотите запускать его, если он уже инициализирован, тогда как безопасно запускаться в предложении 'not_if'? –

ответ

1

Хорошо, перемотать. not_if имеет два очень разных режима. Вы можете передать ему строку, такую ​​как not_if "foo bar", которая будет запускать строку в виде команды. Вы также можете дать ему блок Ruby, такой как not_if { foo('bar') }, который будет запускать блок как код Ruby. Вы пересекли потоки здесь :)

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