【问题标题】:Chef - Notify an execute before resourceChef - 在资源之前通知执行
【发布时间】:2017-07-20 15:50:45
【问题描述】:

我在 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-get update 而不是upgrade
  • 哈,是的,对不起,意思是apt-get update ...我已经更新了问题
  • 我现在注意到的是你已经有一个include_recipe "apt"。所以一切都应该在没有任何通知的情况下工作,不是吗?
  • 它有action :nothing,所以除非得到通知,否则它不会运行
  • 不,我指的是您在第二个块中包含的 apt::default 配方。但不确定,如果这是社区 apt 食谱 - 可能不是。

标签: chef-infra chef-recipe


【解决方案1】:

使 APT 缓存保持最新

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

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

为了避免在每次 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 个或多个配方中)时,您将希望确保 apt-get update 已在每个必须安装的包之前运行。

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

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

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

更多详情here

新的:immediately_before 资源

现在我说为什么要谨慎使用它,好消息是:
rfc-154PR 的新 :immediately_before 将在不久的将来成为厨师。

【讨论】:

  • 值得补充(放弃我的回答,因为你的回答涵盖了 98%)::before 通知的目的是什么?这显然是立竿见影的,因此如果在 4 个配方中安装 4 个软件包 apt-get update 将被调用 4 次,这就是为什么 :before 通常是一个错误的好主意的部分原因
  • 感谢@Tensibai 的评论。随意编辑并添加剩余的 2% ;-)
  • 这似乎是一个更好的方法......虽然我还处于想从头开始创建所有食谱的阶段......我想我会撕掉 apt 食谱分开并了解它是如何进行每日更新的:D ...谢谢
  • @StephenKing 不好意思,变成了长加,同时发现更新信息:)
  • 天丝白,写得好,谢谢!伸展,尽量避免重新发明轮子;-)
【解决方案2】:

Chef 12.6 中添加了相关功能: https://docs.chef.io/release_notes.html#what-s-new-in-12-6

所以您现在可以编写与上面粘贴的完全一样的代码。

【讨论】:

  • 太棒了,谢谢?...不幸的是现在无法更改已接受的答案大声笑
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-05
  • 2013-09-08
  • 1970-01-01
  • 2016-12-15
  • 1970-01-01
  • 2022-11-12
相关资源
最近更新 更多