簡體   English   中英

Chef_gem的依賴項

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM