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
dbが存在する場合に期待するもの(dbnameエントリのある行)を返し、存在しない場合は何も返しません。
では、not_ifはそれをどのように評価するだけですか?正しいか間違っているか? 1または0?すべてのプロセスが成功すると0を返さないのですか?
だれでもアドバイスをいただければ幸いです!
この問題に遭遇しました。私の問題は、not_ifコマンドが「dbuser」ではなく「root」として実行されていることでした。に変更した場合
not_if 'psql --list|grep mydb', :user => 'dbuser'
その後、あなたが探していた結果を得るかもしれません。
コマンドラインから自分でテストを実行し、デフォルトの戻り値(別名、「$?」)を確認します。あなたはこのようなものを得るはずです:
% psql --list|grep mydb
mydb-is-here
% echo $?
0
そこにないものを試すと、次のようなものが得られるはずです。
% psql --list|grep mydb-not-here
% echo $?
1
シェフが注目するのは、$に詰め込まれる数値、つまり「0」または「1」です。つまり、「not_if」構文で示した例は正しいものです。