Chef infra 厨师长-在执行资源之前通知执行
我在Chef infra 厨师长-在执行资源之前通知执行,chef-infra,chef-recipe,Chef Infra,Chef Recipe,我在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]',
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
当前不是有效的计时,并且
就是这样,我想知道我是否遗漏了一些简单的东西。保持APT缓存最新
虽然这不是你问题的答案,但我希望能为你的实际问题提供一个答案(顺便说一句,这是一个非常常见的问题):
在使用软件包之前,您应该包含在跑步列表中的食谱将自动提取回购。
为了避免在每次chef运行期间拉取回购,默认情况下,它每天只拉取一次回购,而这个最小延迟可以通过节点['apt']['periodic\u update\u min\u delay']
进行配置
因此,至少对于我在过去几年中与Chef一起使用的用例,我认为我不需要通知资源执行apt get update
。即使在添加额外的apt存储库时,也可以通过以下方式轻松完成:
apt_存储库“安全ubuntu多元宇宙”怎么办
uri'http://security.ubuntu.com/ubuntu'
分发“可靠的安全性”
成分[‘多元宇宙’]
deb_src“正确”
结束
apt_repository
资源的聪明之处在于它会自动触发apt get update
运行
触发资源之前运行的气味
(经原作者许可添加,作者)
关于为什么:在之前99%的时间是错误的“好主意”:
当您在一个独立的软件包安装中考虑这个问题时,听起来应该这样做,要求软件包在安装之前通知execute运行apt get update
现在,当您将其扩展到N个软件包(在1个或多个配方中)时,如果必须安装每个软件包,您将希望确保在每个软件包之前运行apt get update
龙来了,我们要打多少次电话才能得到更新?用一个直接的:before,:immediate
它将被调用N次,在每个包之前调用一次,这很愚蠢,但可能是您的愿望
您可能会反对,它应该只执行一次,并且作为:delayed
,它应该排队,但是什么时候?在编译时,我们不知道是否需要安装包,因此假设添加一个新的“编译”阶段来测试这些资源并构建“预通知”队列
这是木偶所做的一部分,当你想要完全控制执行顺序的时候,问题就来了
更多细节
新的:紧跟在资源之前
现在我说了为什么应该节约使用,好消息是:
一个新的:在不久的将来即将进入chef,这项功能已添加到chef 12.6中:
因此,您可以完全按照上面粘贴的方式编写代码。您想要解决的实际问题是什么?首先更新所有包?或者你的意思是apt get update
而不是upgrade
?哈,是的,对不起,意思是apt get update
。。。我已经更新了这个问题,现在我注意到您已经有了一个include\u recipe“apt”
。因此,一切都应该在没有任何通知的情况下工作,不是吗?它有操作:无
,因此它不会运行,除非通知。没有,我在第二个块中包含apt::default
配方。但不确定,如果这是社区apt
食谱-可能不值得补充(放弃我的答案,因为你的答案涵盖了98%):在这里发出通知之前,的目的是什么?这显然是即时的,因此如果在4个配方中安装4个软件包,那么apt get update将被调用4次,这就是为什么:before
对于注释来说通常是一个假好的ideaThx@Tensibai。请随意编辑和添加剩余的2%;-)这似乎是一个更好的方法。。。虽然我还处在一个阶段,我想从头开始创作我所有的食谱。。。我想我会撕开apt的食谱,看看它是如何做每日更新的:D。。。Thanks@StephenKing抱歉,变成了长添加,同时发现更新信息:)Tensibai,写得好,谢谢!拉伸,尽量避免重新发明轮子;-)太棒了,谢谢