如何使用mysql chef cookbook的默认my.cnf模板?

时间:2015-02-26 17:08:46

标签: mysql vagrant chef

我一直试图了解版本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

2 个答案:

答案 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