Понимание Chef only_if not_if

Я не уверен, что понимаю условное выполнение Chef.

Я хотел бы выполнить условное выполнение на основе того, существует ли база данных в Postgresql

Вот мой пример

execute "add_db" do
  cwd "/tmp"
  user "dbuser"
  command "createdb -T template_postgis mydb"
  not_if 'psql --list|grep mydb'
end

Выполнение psql --list|grep mydb возвращает то, что вы ожидаете, если база данных существует (строка с записью dbname) и ничего, если не существует.

Так как же оценивает not_if только это? True или false? 1 или 0? Разве все процессы не возвращают 0, если они успешны?

В общем, любой совет будет очень признателен!

27
задан rjohnston 29 September 2015 в 15:21
поделиться

1 ответ

Я только что столкнулся с этим вопросом. Моя проблема заключалась в том, что команда not_if выполнялась как «root», а не «dbuser». Если вы измените его на

not_if 'psql --list|grep mydb', :user => 'dbuser'

, вы можете получить результаты, которые искали.

http://tickets.opscode.com/browse/CHEF-438

22
ответ дан 28 November 2019 в 05:22
поделиться