ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mysql – chef_gem的依赖项

2019-07-04 04:02:24  阅读:294  来源: 互联网

标签:mysql ruby rubygems chef percona


我目前正在更新community MySQL cookbook,以便它可以用来安装Percona,这是一个替代MySQL的库存,但有一些附加的功能,可以轻松启用HA和群集.

我所有的添加都很有效,直到我想能够在食谱中使用’ruby’食谱.这使用’chef_gem’提供程序来安装’mysql’rubygem.由于这是一个原生扩展,因此需要进行编译,为此,需要安装MySQL的开发文件.

如果我使用正常的MySQL二进制文件,一切都运行良好,因为MySQL已经在Centos存储库中.但是,为了能够安装Percona软件包,我需要确保repo位于’/etc/yum.repos.d’中.我遇到的问题是,在尝试安装mysql gem之前,我无法让厨师做这项工作.

因此,最终发生的是系统尝试编译mysql gem而没有安装MySQL(Percona)的开发头文件,即使它们被正确引用,也找不到它们,因为尚未设置存储库.

我创建了一个’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 cookbook中进行了一些挖掘,并发现yum_key的提供程序尝试运行’remote_file’来按照您的预期下载密钥.但是这个’remote_file’没有运行.那么我试着把它作为像上面这样的资源来运行,但它在名称中有一个变量,所以我不能有效地调用它,例如:

remote_file "/etc/pki/rpm-gpg/#{new_resource.key}" do
    ...
end

我想我开始在这里找到一只兔子.我会继续尝试让这件事情发挥作用,但我们欢迎任何更多的想法.我不想在本文中的回购中直接编码,因为我更喜欢重用我知道工作的东西.

解决方法:

无论您需要从percona_repo配方中获得哪些资源,只需在chef_gem之前手动调用所需的操作/它们.

例如,如果你需要的东西看起来像这样:

yum_repo "percona-repo" do
  action :install
 ...
end

然后你可以在chef_gem声明之前做到这一点:

resources(:yum_repo => 'percona-repo').run_action(:install)

不幸的是,这确实引入了两种食谱之间的紧密联系,但没有办法说“嘿,厨师,包括这个食谱,但是马上就做了所有事情而不是以后,”凯?

标签:mysql,ruby,rubygems,chef,percona
来源: https://codeday.me/bug/20190704/1373329.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有