現在、シェフを使用してサーバーをプロビジョニングしており、レシピ/クックブックをインストールして実行すると、mongo データベースにデータを自動的に追加したいと考えています。
ここから問題が発生します。実行リソースを使用して、次のように mongo スクリプトを実行していました。
execute "install-mongodb-config" do
command "mongo #{node[:mongodb][:mongo_db_host]}/#{node[:mongodb][:mongo_db]} \"#{node[:mongodb][:mongo_add_config_script]}\""
action :run
end
レシピのこの部分は、何を試しても常に失敗しました。ここで試したすべての詳細には触れませんが (必要な場合を除きます)、サブスクライブと通知のすべての可能性を使い果たしたとだけ言っておきましょう (と思います)。
この問題は、mongodb::10gen_repo を使用して mongodb をインストールしていることが原因です。apt-get がパッケージをインストールするとレシピは終了し、chef はさらにリソースを実行し続けます。
上記のリソースを mongodb::10gen_repo の直後に実行しようとしましたが、mongodb が利用できないようで、mongo シェルが接続してスクリプトを実行できません。表示されるエラーは、次のようなものです。
MongoDB shell version: 2.0.2
Thu Sep 6 18:40:45 ReferenceError: setTimeout is not defined mongotest.js:2
failed to load: mongoAddConfig.js
私たちが試した中で、これを素晴らしいシェフの方法で回避できたものはありません. 私たちが頼ったのは、実行リソースを次のものに置き換えることでした。
execute "install-mongodb-config" do
command "sleep 60; mongo #{node[:mongodb][:mongo_db_host]}/#{node[:mongodb][:mongo_db]} \"#{node[:mongodb][:mongo_add_config_script]}\""
action :run
end
これにより、mongo スクリプトが実行される前にコマンドが 60 秒間スリープ状態になります。これが正しい方法ではないことはわかっていますが、今のところ機能しています。
誰でもこれを行う正しい方法を提案できますか? mongodb シェフ スクリプトを作成した人たちと話し、機能をリクエストする必要があると感じています。