我一直试图了解版本5.x和版本6.x之间的厨师mysql cookbook(https://github.com/chef-cookbooks/mysql)的变化,我正在努力一点点。
我已成功安装,但我不了解如何使用cookbook提供的默认my.cnf模板。因为它在不同的食谱中,我的数据库食谱无法找到它。我尝试将它复制到我的食谱中,但是当我这样做时,@ config变量没有被初始化,所以它有一个致命的错误。
这是我的数据库配方目前的样子(基本上是自述文件中提供的示例):
mysql_service 'default' do
port '3306'
version '5.5'
initial_root_password 'change me'
action [:create, :start]
end
mysql_config 'default' do
source 'my.cnf.erb'
notifies :restart, 'mysql_service[default]'
action :create
end
根据回复中的建议,我现在有了我的mysql_config:
mysql_config 'default' do
source 'my.cnf.erb'
cookbook 'mysql'
variables :config => {
:name => "mysql",
:port => 3306,
:user => "mysql"
},
:pid_file => "/var/run/mysqld/mysqld.pid",
:socket_file => "/var/run/mysqld/mysqld.sock",
:include_dir => "/etc/mysql/conf.d/"
notifies :restart, 'mysql_service[default]'
action :create
end
返回此错误:
Chef::Mixin::Template::TemplateError (undefined method `name' for {:name=>"mysql", :port=>3306, :user=>"mysql"}:Hash) on line #1:
1: # Chef generated my.cnf for instance mysql-<%= @config.name %>
2:
3: [client]
4: <% if @config.charset %>
5: default-character-set = <%= @config.charset %>
我还把我的食谱放在github:https://github.com/rhuffstedtler/chef-mysql-database-example
中答案 0 :(得分:1)
是的,您可以更改my.cnf,但是您必须将变量传递给mysql_service,并且您不必使用mysql_config。 (见下文)
遇到同样的问题之后我在mysql cookbook文件夹mysql / libraris / rsource_mysql_sercie.rb中找到了这个
require 'chef/resource/lwrp_base'
class Chef
class Resource
class MysqlService < Chef::Resource::LWRPBase
self.resource_name = :mysql_service
actions :create, :delete, :start, :stop, :restart, :reload
default_action :create
attribute :charset, kind_of: String, default: 'utf8'
attribute :data_dir, kind_of: String, default: nil
attribute :initial_root_password, kind_of: String, default: 'ilikerandompasswords'
attribute :instance, kind_of: String, name_attribute: true
attribute :package_action, kind_of: Symbol, default: :install
attribute :package_name, kind_of: String, default: nil
attribute :package_version, kind_of: String, default: nil
attribute :bind_address, kind_of: String, default: nil
attribute :port, kind_of: String, default: '3306'
attribute :run_group, kind_of: String, default: 'mysql'
attribute :run_user, kind_of: String, default: 'mysql'
attribute :socket, kind_of: String, default: nil
attribute :version, kind_of: String, default: nil
end
end
end
- &GT;因此,如果您想更改instance / my.cnf文件中的内容,则必须使用mysql_service定义的参数,例如:
mysql_service 'default' do
version '5.5'
port '3306'
socket '/run/mysqld/mysqld.sock'
initial_root_password "#{node['mysql']['server_root_password']}"
action [:create, :start]
end
希望这有帮助。
干杯,罗杰
答案 1 :(得分:0)
template
资源有一个属性cookbook
,告诉它要查看哪个食谱。对于正在初始化的@config
,您也有责任将该值传递给{ {1}}资源。此外,如果您查看模板,它还需要一些其他变量。其中一些变量是可选的,您可以从模板代码中看到。所以你会想要这样的东西:
mysql_config