![chef 13,并抑制 bundler 网络请求](https://linux22.com/image/709137/chef%2013%EF%BC%8C%E5%B9%B6%E6%8A%91%E5%88%B6%20bundler%20%E7%BD%91%E7%BB%9C%E8%AF%B7%E6%B1%82.png)
我的节点根本无法访问互联网。我们没有权限设置本地 gem 镜像。所有 gem 安装都需要从 chef 服务器进行。
现在,当 chef 运行时,它会调用“bundler install”(chef/lib/chef/cookbook/gem_installer.rb -- L51),没有任何选项。
我们如何终止 bundler 运行或强制其进入本地或独立设置,以便它不会发起连接?(从本地目录安装是可以的,只要我们可以强制它在每个 gem 中位于不同的位置)
有没有其他人在严格的企业环境中运行这个,有强大的防火墙和软件推广规则?我担心这对厨师来说是一个挑战。
这似乎没有帮助,但我的目录内容(只是一块宝石)可能是错误的:
/opt/chef/embedded/bin/bundle \ config \ local.chef-vault /var/chef/cache/cookbooks/gem-chef-vault/files/default/
好的。因此文件中的子模块检出可以工作:
cd ~/chef-repo git submodule add \ https://github.com/chef/chef-vault.git \ local-cookbooks/gem-chef-vault/files/default/chef-vault
请注意,由于 chef 将加入所有 cookbook 目录,因此 bundler 中的参考仍然是 .../cookbooks/... 。
嗯。在 gem 下载开始之前很难更改 /root/.bundle/config。例如,这无法赢得比赛:
template /root/.bundle/config do action :nothing end.run_action(:create)
在 [Line 49] 处执行例程(https://github.com/chef/chef/blob/master/lib/chef/cookbook/gem_installer.rb#L49) (||true) 关闭了 gem 抓取,但是当包含的第三方 cookbook 在编译期间“需要” (尚未安装的) gem 时,我们又回到了失败的状态——并且 r=/r.run_action(:install) 位似乎无法运行……我认为它应该运行在它应该运行的地方。
即使我可以在厨师盒上点亮一个便宜的空宝石仓库:
mkdir -p /var/opt/opscode/nginx/html/repo/gems /opt/opscode/embedded/bin/gem \ generate_index \ -d /var/opt/opscode/nginx/html/repo/
:::::::::::::: /var/opt/opscode/nginx/etc/addon.d/99-gem-mirror_external.conf :::::::::::::: location "/repo/" { }
(重新启动chef-server-ctl restart
)....并将节点指向该位置
knife ssh 'name:victim2' -- \ chef-client --config-option 'rubygems_url=http://chef/repo/'
它仍然死机-在'需要'所以我认为URL不相关。
如果我们仍然在企业中使用 Chef,那么我们当前的策略是如下代码:
##3p_something::default.rb: chef_gem 'something' do # install in compile source '/some/local/file.gem' clear_sources true compile_time true include_default_source false action :nothing end.run__action (:install) # include_recipe 'something'
理想情况下,我们希望在包含的配方盲目地从网络上抓取某些东西之前预先播种所需的宝石,这样我们就能得到可验证、一致和可重复的东西(当然;更新 file.gem 是我们在这方面接受的另一项努力)。
看起来就像厨师问题 3456但并非完全如此,或者docker 问题 682或者chef-vault 第 61 期和63:我们的问题是,当读取 metadata.rb 中的“gem”行时,这一切都会自动发生。
答案1
您可以使用rubygems_url
配置设置来瞄准本地镜像,或者只是不使用任何利用该功能的食谱,它根本不应该激活。
答案2
最佳答案似乎是符合 #5 的答案。您需要创建和管理 gem 镜像,并通过以下两种方法之一输入本地 URL。
也许引导 .gemrc 和 .bundle/config 中的位置会起作用(未经直接确认),如 #3 中所述,但不要尝试在其上使用 run_action 后记,因为 gem 语句是第一个。它将消除在不断增加且有害的命令行上提供覆盖位的需要(尽快执行,因为自动化可以降低输入错误的风险)。至于有效但空的 gem 'repo' 的 URL 以停止该过程,我无法确认问题是否被理解。
#6 可能不起作用。即使你删除 chef 包中的代码或使用有效但空的 gem repo 禁用它,也可能不起作用。
是的,这威胁到了单一事实来源。是的,你需要设置更多装备。是的,你需要维护它。是的,它可能会起作用。没有提出其他想法。
请记住,最终,“这取决于你”。我要感谢 Sean Spicer 帮助我们节省了每年每个节点 137 美元。:-/