我的组织完全在防火墙内工作(即,没有机器可以访问互联网)。每当厨师烹饪书更新并需要宝石时,食谱都会失败,因为他们无法从rubygems.org下载和安装宝石。
我们自己托管所需宝石的副本 - 我们如何向厨师添加自定义内部资源,以便我们不必处理故障?
答案 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