[英]Dependencies for chef_gem
我目前正在更新社區MySQL食譜,以便可以用來安裝Percona,這是對現有MySQL的替代,但是具有一些附加功能,可以輕松地啟用HA和群集。
在我希望能夠使用本食譜中的“紅寶石”食譜之前,我所有添加的內容都運行良好。 這使用'chef_gem'提供程序來安裝'mysql'rubygem。 由於這是一個本機擴展,因此需要對其進行編譯,並且為此,需要安裝MySQL的開發文件。
如果我使用普通的MySQL二進制文件,那么一切都將正常運行,因為Centos存儲庫中已經存在MySQL。 但是,為了安裝Percona軟件包,我需要確保存儲庫位於“ /etc/yum.repos.d”中。 我遇到的問題是,在嘗試安裝mysql gem之前,我無法讓廚師做這項工作。
因此,最終發生的事情是系統嘗試在未安裝MySQL(Percona)開發頭文件的情況下編譯mysql gem,即使正確引用了它們,也未找到它們,因為尚未設置存儲庫。
我創建了一個“ percona-repo”配方,該配方使用“ yum”提供程序來完成這項工作,但是它不會在“ chef_gem”之前運行。 我知道Chef有兩個運行階段,我假設'chef_gem'會在編譯階段收集所有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”配方,以便我調用資源以添加新密鑰並回購到服務器:
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
我想我在這里開始有點兔子沃倫了。 我將繼續嘗試使其正常工作,但歡迎其他任何想法。 我試圖不走這條菜譜中直接在倉庫中直接編碼的路線,因為我更喜歡重用我知道的工作。
無論您從percona_repo
食譜中需要什么資源,只需在chef_gem
之前對其手動調用所需的操作。
例如,如果您需要的東西如下所示:
yum_repo "percona-repo" do
action :install
...
end
然后,您可以在chef_gem
聲明之前執行此chef_gem
:
resources(:yum_repo => 'percona-repo').run_action(:install)
不幸的是,這確實在兩個食譜之間引入了緊密的聯系,但是沒有辦法說“嘿,廚師,包括這個食譜,但是馬上做所有的事情,而不是后來的,“好嗎?”。
好吧,我一直走到兔子洞。
這似乎起作用:
include_recipe "percona::client"
resources(:yum_key => "RPM-GPG-KEY-percona").run_action(:add)
begin
resources(:remote_file => "/etc/pki/rpm-gpg/RPM-GPG-KEY-percona").run_action(:create)
rescue Chef::Exceptions::ResourceNotFound
end
resources("yum_repository[CentOS-Percona]").run_action(:add)
begin
resources(:template => "/etc/yum.repos.d/CentOS-Percona.repo").run_action(:create)
rescue Chef::Exceptions::ResourceNotFound
end
%w(
Percona-Server-shared-compat
Percona-Server-client-55
Percona-Server-devel-55
).each do |package|
package(package).run_action(:install)
end
chef_gem "mysql"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.