我正在尝试厨师 - 更确切地说 - 用它设置一个简单的灯。我的食谱应该包含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上的密码以某种方式重置。有人经历过这个吗?我错过了什么?
答案 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。
使用数据字节值取消注释行时会发生什么?