关于Chef的MySQL食谱不会运行两次

时间:2014-07-22 14:39:53

标签: vagrant chef chef-recipe

我正在尝试厨师 - 更确切地说 - 用它设置一个简单的灯。我的食谱应该包含apache2,mysql和php。现在我被mysql困住了。

我正在使用的食谱:https://supermarket.getchef.com/cookbooks/mysql。我的配置几乎与食谱指南页面相同。

databag_secret = Chef::EncryptedDataBagItem.load_secret("/etc/chef/encrypted_data_bag_secret")
secrets_mysql = Chef::EncryptedDataBagItem.load("secrets", "mysql", databag_secret)

include_recipe "mysql::client"
include_recipe "mysql::server"

mysql_service 'default' do
  allow_remote_root false
  remove_anonymous_users true
  remove_test_database true
  #server_root_password secrets_mysql['mysql_root_pass']
  server_debian_password 'vagrantsuxx'
  action :create
end

从数据包中检索我的秘密工作正常,我的食谱的第一次运行总是通过。每当我尝试再次运行它时会出现以下错误:

[2014-07-22T14:32:01+00:00] ERROR: Running exception handlers
Running handlers complete

[2014-07-22T14:32:01+00:00] ERROR: Exception handlers complete
[2014-07-22T14:32:01+00:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
Chef Client failed. 5 resources updated in 6.99007798 seconds
[2014-07-22T14:32:01+00:00] ERROR: mysql_service[default] (mysql::server line 20) had an error: Mixlib::ShellOut::ShellCommandFailed: execute[install-grants] (/var/chef/cache/cookbooks/mysql/libraries/provider_mysql_service_ubuntu.rb line 91) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '1'
---- Begin output of /usr/bin/mysql -u root -pilikerandompasswords < /etc/mysql_grants.sql ----
STDOUT:
STDERR: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
---- End output of /usr/bin/mysql -u root -pilikerandompasswords < /etc/mysql_grants.sql ----
Ran /usr/bin/mysql -u root -pilikerandompasswords < /etc/mysql_grants.sql returned 1
[2014-07-22T14:32:01+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)

我想知道为什么会这样。 /etc/mysql_grants.sql上的密码以某种方式重置。有人经历过这个吗?我错过了什么?

1 个答案:

答案 0 :(得分:0)

您使用的是密码吗?

我无法在该配置中看到它

secrets_mysql似乎已被阅读然后我无法看到它被操作。它似乎并没有在基本食谱中使用,所以我并不是100%确信密码是进入提供者加载的。我看到它在您的提供商电话中注释了

以下显示了在服务提供商使用之前如何在debian帮助程序中构建密码字符串

  def pass_string
    if new_resource.parsed_server_root_password.empty?
      pass_string = ''
    else
      pass_string = '-p' + Shellwords.escape(new_resource.parsed_server_root_password)
    end

    pass_string = '-p' + ::File.open('/etc/.mysql_root').read.chomp if ::File.exist?('/etc/.mysql_root')
    pass_string
  end

然后使用它

        cmd << "#{pass_string} < /etc/mysql_grants.sql"

所以资源值定义如下

    def parsed_server_root_password
  return server_root_password if server_root_password
end

这有默认的ilikerandompasswords。

使用数据字节值取消注释行时会发生什么?