如何使用opscode chef和database cookbook订购查询

时间:2013-09-19 02:13:44

标签: chef-recipe cookbook chef

我正在寻找一些关于在我的厨师食谱中定义优先级的帮助。

配方应该在数据库中导入sql转储,然后对数据库执行2个mysql查询。

我正在使用Chef Solo。

第一个mysql_database操作:导入转储的查询效果很好 但是其他两个查询似乎什么也没做,因为转储似乎仍然在数据库中导入数据,并且运行时数据不存在。随机执行?

我的食谱:

mysql_database node['wp-dev']['database'] do
    connection ({:host => "localhost", :username => 'root', 
                 :password => node['mysql']['server_root_password']})
    #NOW THE SQL SCRIPT importing the dump - WORKING
    sql { ::File.open("/tmp/database.sql").read }
    #NOW THE 2 QUERIES - Not working at first Run
    sql "UPDATE WORKING QUERY WHEN COPIED IN MYSQL 1"
    sql "UPDATE WORKING QUERY WHEN COPIED IN MYSQL 2"
    action :query
end

我无法弄清楚如何修复此问题或如何使用only_if在运行查询之前检查导入是否已完成。

2 个答案:

答案 0 :(得分:2)

解决方案是使用不同的mysql_datase块,并在完成时通知另一个块。

mysql_database 'insertTestData' do
   connection mysql_connection_info
   database_name node['some']['database']
   sql { ::File.open(/somePath/testData.sql).read }
   action :nothing
end


mysql_database 'createTables' do
   connection mysql_connection_info
   database_name node['some']['database']
   sql { ::File.open(/somePath/tableCreate.sql).read }
   action :query
   notifies :query,"mysql_database[insertTestData]"
end

答案 1 :(得分:1)

您需要为正在执行的每个sql语句创建一个单独的mysql_database块。您不能在同一个查询中有多个SQL查询。