厨师数据库cookbook在原始sql上失败

问题描述 投票:1回答:2

我正在尝试执行一个原始的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:
chef
2个回答
2
投票

如果你使用database cookbook,那么它很久以前就被弃用了 - 它上面的开发已经停止了2年多以前,它的存储库被存档了。

这是弃用消息:

这本食谱已被弃用。最初的目的是从最终用户那里抽象出数据库实现细节。事后看来,这是一个错误,因为很难/不可能为所有系统中的数据库建立通用接口。相反,我们计划将各个提供者移动到他们各自的烹饪书(mysql,postgresql,sqlite,sql_server)中,他们可以充分利用底层数据库系统的功能集。

我建议你远离这本食谱。


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
© www.soinside.com 2019 - 2024. All rights reserved.