添加到Chef Gem Source?

时间:2014-08-08 16:52:12

标签: ruby rubygems chef

我的组织完全在防火墙内工作(即,没有机器可以访问互联网)。每当厨师烹饪书更新并需要宝石时,食谱都会失败,因为他们无法从rubygems.org下载和安装宝石。

我们自己托管所需宝石的副本 - 我们如何向厨师添加自定义内部资源,以便我们不必处理故障?

1 个答案:

答案 0 :(得分:1)

您可以使用Chef Client管理嵌入式Ruby的gemrc。

chef_etc_dir = Chef::Util::PathHelper.join(Chef::Config.embedded_dir, 'etc')
chef_gemrc   = Chef::Util::PathHelper.join(chef_etc_dir, 'gemrc')

directory chef_etc_dir do
  owner "root"
  group "root"
  mode "0755"
end.run_action(:create)

file chef_gemrc do
  owner "root"
  group "root"
  mode "0644"
  content <<EOF
---
:sources:
- https://path.to.internal.repo/
- https://rubygems.org
:update_sources: true
EOF
  end.run_action(:create)

PathHelper方法应为Windows或Linux提供适当的路径。

“。run_action(:create)”添加在编译时执行资源,而不是收敛时间,以确保后续的chef_gem资源在收敛时可以访问新管理的gemrc。

更新:Chef似乎建议rubygems cookbook执行此功能。

gemrc :global do
  values(
    sources: %w{ https://path.to.internal.repo https://rubygems.org }
  )
end