我目前正在更新社区 MySQL 食谱,以便可以使用它来安装 Percona,它是现有 MySQL 的替代品,但具有一些附加功能,可以轻松启用 HA 和集群。
在我想能够使用食谱中的“红宝石”食谱之前,我所有的添加都运行良好。这使用“chef_gem”提供程序来安装“mysql”rubygem。由于这是一个本地扩展,因此需要对其进行编译,为此,需要安装 MySQL 的开发文件。
如果我使用普通的 MySQL 二进制文件一切正常,因为 MySQL 已经在 Centos 存储库中。但是,为了安装 Percona 软件包,我需要确保存储库位于“/etc/yum.repos.d”中。我遇到的问题是在尝试安装 mysql gem 之前我无法让厨师完成这项工作。
因此,最终发生的是系统尝试在没有安装 MySQL (Percona) 的开发头文件的情况下编译 mysql gem,即使正确引用它们,由于尚未设置存储库,因此找不到它们。
我创建了一个 'percona-repo' 配方,它使用 'yum' 提供程序来完成这项工作,但它不会在 'chef_gem' 之前运行。我知道厨师有两个运行阶段,我假设“chef_gem”在编译阶段收集所有宝石,无论它们在整个运行列表中的位置,然后安装开始时请求的所有项目。然后将运行存储库配方。
我尝试使用 Ruby 配方来执行以下操作:
include_recipe "mysql::percona_repo"
node['mysql']['client']['packages'].each do |mysql_pack|
package mysql_pack do
action :nothing
end.run_action(:install)
end
chef_gem "mysql" do
action :nothing
end.run_action(:install)
但这不起作用。chef_gem 总是在我的“precona_repo”配方之前运行,所以包安装失败,如果它到了那么远,意味着 ruby gem 安装也会失败。
如果有人对我如何解决这个问题有任何好主意,请告诉我。
更新
感谢 Mark 的建议,我现在更新了 'ruby' 配方,以便我调用资源来添加新密钥并将 repo 存储到服务器:
resources(:yum_key => "RPM-GPG-KEY-percona").run_action(:add)
resources(:yum_repository => "Percona").run_action(:add)
现在我可以看到这些在厨师运行中被激活。但是,当我查看文件系统时,文件不存在,因此 mysql 客户端软件包的安装失败。
我在 yum 食谱中进行了一些挖掘,发现 yum_key 的提供者尝试运行“remote_file”来下载密钥,正如你所期望的那样。但是,此“remote_file”未运行。因此,我尝试将其作为上述资源运行,但它的名称中有一个变量,因此我无法有效地调用它,例如:
remote_file "/etc/pki/rpm-gpg/#{new_resource.key}" do
...
end
我想我在这里开始有点像兔子沃伦了。我将继续尝试让这件事发挥作用,但欢迎更多想法。我试图不走在这个秘籍中直接在 repo 中编码的路线,因为我更喜欢重用我知道有效的东西。