gpt4 book ai didi

chef-infra - Chef - 在资源之前通知执行

转载 作者:行者123 更新时间:2023-12-01 10:36:45 24 4
gpt4 key购买 nike

我在 apt 配方中有一个简单的 execute[apt-update] 资源:

execute "apt-update" do
command "apt-get update"
action :nothing
end

而且我希望能够通知它,只有当需要安装一个包时。我希望是这样的:

include_recipe "apt"

package "openssh-server" do
action :install
notifies :run, 'execute[apt-update]', :before
end

:before 当前不是有效时间,probably wont be any time soon

它是 possible with Puppet 的东西,想知道我是否遗漏了一些简单的东西。

最佳答案

使 APT 缓存保持最新

虽然这不是您问题的答案,但我希望可以为您提供实际问题的答案(顺便说一句,这是一个很常见的问题。):

apt在使用 package 资源之前,您应该将其包含在运行列表中的 cookbook 将自动提取存储库。

为了避免在每次 chef 运行期间拉取 repos,默认情况下它每天只拉取一次,而这个最小延迟可以通过 node['apt']['periodic_update_min_delay'] 配置.

因此,至少对于我在过去几年使用 Chef 的用例而言,我认为我从来不需要通知正在执行 apt-get update 的资源。即使添加额外的 apt 存储库,也可以按如下方式轻松完成:

apt_repository 'security-ubuntu-multiverse' do
uri 'http://security.ubuntu.com/ubuntu'
distribution 'trusty-security'
components ['multiverse']
deb_src 'true'
end

apt_repository 资源的巧妙之处在于它会自动触发 apt-get update 运行。

触发资源运行之前的味道

(经原作者许可添加,由 @Tensibai 贡献)

为什么 :before 在 99% 的时间里都是错误的“好主意”:

当您在独立的包安装上考虑它时,这听起来是可行的方法,要求包通知执行之前运行 apt-get update

现在,当您将其扩展到 N 个包(在 1 个或多个 Recipe 中)时,您将希望确保 apt-get update 已在每个包之前运行(如果必须安装的话)。

龙来了,我们要调用多少次 apt-get update ?使用直接的 :before, :immediately 它将被调用 N 次,在每个包之前调用一次,这很愚蠢,但可能是你的愿望。

您可能反对它应该只执行一次,并且作为 :delayed 它应该排队,但是什么时候呢?在编译时我们不知道包是否需要安装,这假设添加一个新的“编译”阶段来测试这些资源并构建“预通知”队列。

这是 Puppet 所做的一部分,当您希望完全控制执行顺序时,问题就来了。

关于此的更多详细信息 here

新的 :immediately_before 资源

现在我说了为什么要谨慎使用它,好消息是:
根据 rfc-154,一个新的 :immediately_before 将在不久的将来进入 chef。还有这个PR

关于chef-infra - Chef - 在资源之前通知执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34066962/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com