28

シェフの条件付き実行を理解しているかどうかわかりません。

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 はそれをどのように評価するのでしょうか? 正しいか間違っているか?1または0?成功した場合、すべてのプロセスが 0 を返すわけではありませんか?

誰でもアドバイスをいただければ幸いです。

4

2 に答える 2

23

この問題に遭遇しました。私の問題は、not_if コマンドが「dbuser」ではなく「root」として実行されていたことです。に変更すると

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

そうすれば、探していた結果が得られるかもしれません。

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

于 2012-07-08T13:07:17.447 に答える
21

コマンド ラインから自分でテストを実行し、デフォルトの戻り値 ("$?") を確認します。次のようなものを取得する必要があります。

    % psql --list|grep mydb
    mydb-is-here
    % echo $?
    0

そこにないものを試してみると、次のようなものが得られるはずです:

    % psql --list|grep mydb-not-here
    % echo $?
    1

シェフが見ようとしているのは、$? に詰め込まれる数値、つまり「0」または「1」です。つまり、「not_if」構文で示した例は正しいです。

于 2011-12-05T23:57:54.897 に答える