Chef数据库食谱在原始sql上失败

时间:2019-04-04 19:05:05

标签: chef

我正在尝试执行原始sql来创建具有少量授权的用户,但是却收到未定义的方法错误。我正在使用数据库厨师食谱的v4.0.9。

mysql_database[create random grants] action query

       ================================================================================
       Error executing action `query` on resource 'mysql_database[create datadog grants]'
       ================================================================================

       NoMethodError
       -------------
       undefined method `close' for nil:NilClass

       Cookbook Trace:
       ---------------
       /tmp/kitchen/cache/cookbooks/database/libraries/provider_database_mysql.rb:153:in `close_query_client'

       Resource Declaration:
       ---------------------
       # In /tmp/kitchen/cache/cookbooks/xxxx/recipes/xxxxxx.rb

       156: mysql_database 'create random grants' do
       157:   connection mysql_connection_info
       158:   sql "GRANT SELECT, PROCESS, REPLICATION CLIENT ON *.* TO 'testuser'@'localhost' IDENTIFIED BY 'dummy';"
       159:   #sql 'SELECT 1'
       160:   action :query
       161: end
       162:

2 个答案:

答案 0 :(得分:2)

如果您使用database cookbook,则很久以前就不推荐使用它-它的开发已于2年前停止,并且其存储库已存档。

这是弃用消息:

  

此菜谱已被弃用。最初的目的是使数据库实现详细信息远离最终用户。事后看来,这是一个错误,因为很难/不可能为跨所有系统工作的数据库创建通用接口。相反,我们计划将各个提供程序迁移到各自的食谱(mysql,postgresql,sqlite,sql_server)中,以便他们可以充分利用基础数据库系统的功能集。

我建议您远离本食谱。

答案 1 :(得分:1)

我处于同一位置,并且正在使用此已弃用的食谱。为了运行该资源,您需要使用特定的食谱修订版-depends 'database', '4.0.8'

因此,如果将其添加到metadata.rb中,则上面的代码将起作用。

这是我这边的代码:

mysql_database 'create slave user' do
    connection mysql_connection_info
    sql "GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY '#{slave_password_data_bag_item['password']}'"
    action :query
end