私はシェフのレシピを持っていて、mysqlドッカーコンテナを持ってきて、あるロジックがパスするとそこに接続してデータベースエントリをロードします。リソースがタスクを完了するまでシェフを遅らせる
問題は、mysqlコンテナが起動して接続を受け入れる準備が整う前に、データの復元を担当するリソースに移動するため、常に最初に実行されないという問題です。ここで
は、コンテナのもたらすレシピの一部です:
docker_container 'imhere-mysql' do
hostname mysqlHost
repo 'lutraman/imhere'
tag 'mysql'
env ["MYSQL_ROOT_PASSWORD=#{mysql_password}"]
volumes [ '/var/imhere/mysql:/var/lib/mysql' ]
action :run
end
、ここでは、復元を行い一部です:
remote_file "#{parent_data_dir}/#{db_restore_filename}" do
source "#{db_restore_url}/#{db_restore_filename}"
notifies :run, 'execute[mysql_load_dump]'
end
execute "mysql_load_dump" do
command "#{scripts_dir}/mysql_restore_dump.sh"
environment(
'MYSQL_HOSTNAME' => mysqlHost,
'PARENT_DATA_DIR' => parent_data_dir,
'DB_RESTORE_FILENAME' => db_restore_filename,
'MYSQL_PASSWORD' => mysql_password,
'RETRIES' => "10"
)
action :nothing
end
これはあまり関係が、ちょうど完全性のためです、ここでスクリプトが最終的に実行するものは次のとおりです。
MYSQL_IP_ADDRESS=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $MYSQL_HOSTNAME)
gunzip -c $PARENT_DATA_DIR/$DB_RESTORE_FILENAME | \
mysql -h $MYSQL_IP_ADDRESS -D imhere -u root -p"$MYSQL_PASSWORD"
ご覧のとおり、私はpをハッキングしましたそれはいくつかの再試行を行いますが、それは競合状態を導入するだけです。コンテナの準備が整うまでシェフにdocker_container
リソースをブロックするように指示するにはどうすればよいですか?