Chef 食谱 'include_recipe' 优先于其他代码和资源
Chef recipe 'include_recipe' takes precedence over other code and resources
我正在尝试创建一本 Chef 食谱,目前它主要只是另一本食谱的包装食谱(audit cookbook). I'm still learning Chef, but from what I can gather from the About Recipes documentation and the Resources Reference documentation,Chef 食谱应按照定义的顺序执行(通过Ruby 代码 and/or Chef 资源)。
在 About Recipes 文档中提到
When a recipe is included, the resources found in that recipe will be
inserted (in the same exact order) at the point where the
include_recipe keyword is located.
在资源参考文档中,他们有一个 apt_update 资源,大概在 include_recipe 之前执行方法,因为它是在食谱的前面定义的。
我的包装食谱只有一个食谱,default.rb,就是这两行:
package 'ruby-dev'
include_recipe 'audit'
但是,在厨师客户或厨师独奏期间 运行 我看到 audit::inspec 食谱 运行 之前 security::default 导致事情中断的配方,因为 InSpec 有一些其他依赖项需要预先安装。在我使用 package 资源之前,我使用 execute 资源显式 运行 apt-get install ruby-dev
或 yum install ruby-dev
取决于使用 case 语句的平台,但同样的问题(所有代码都被跳过, include_recipe 方法首先被调用)。
如果它有用,我使用的是 Chef 12,我知道它已停产,但我还有其他依赖项需要我暂时坚持使用此版本的 Chef。
我很可能只是误解了 Chef 如何收敛工作以及执行的顺序,但这让我很伤心,所以我真的很感激一些指示! include_recipe 是否总是出现在您的配方中的其他代码之前?有没有办法解决?我错过了什么吗?
-- 编辑 --
我能够使用我的食谱中的以下代码获得所需的功能(在 include_recipe
调用触发安装依赖项 gem 之前安装其他包和 gems)食谱:
package 'build-essential' do
action :nothing
end.run_action(:install)
chef_gem 'train' do
version "1.4.4"
action :install
end
chef_gem 'signet' do
version "0.11.0"
action :install
end
include_recipe 'audit'
请注意,我最终安装了 build-essential
包而不是原始代码片段中的 ruby-dev
包,并且还安装了两个 gem 供 Chef 客户端使用。这一切都按照我在 Chef 运行.
编译阶段预期的顺序安装
来源:
如果你检查 audit::inspec
配方,你会发现它使用编译时间 installation of the inspec rubygem(见最后一行)
inspec_gem 'inspec' do
version node['audit']['inspec_version']
source node['audit']['inspec_gem_source']
action :nothing
end.run_action(:install)
run_action
Use .run_action(:some_action)
at the end of a resource block to run the specified action during the compile phase.
我正在尝试创建一本 Chef 食谱,目前它主要只是另一本食谱的包装食谱(audit cookbook). I'm still learning Chef, but from what I can gather from the About Recipes documentation and the Resources Reference documentation,Chef 食谱应按照定义的顺序执行(通过Ruby 代码 and/or Chef 资源)。
在 About Recipes 文档中提到
When a recipe is included, the resources found in that recipe will be inserted (in the same exact order) at the point where the include_recipe keyword is located.
在资源参考文档中,他们有一个 apt_update 资源,大概在 include_recipe 之前执行方法,因为它是在食谱的前面定义的。
我的包装食谱只有一个食谱,default.rb,就是这两行:
package 'ruby-dev'
include_recipe 'audit'
但是,在厨师客户或厨师独奏期间 运行 我看到 audit::inspec 食谱 运行 之前 security::default 导致事情中断的配方,因为 InSpec 有一些其他依赖项需要预先安装。在我使用 package 资源之前,我使用 execute 资源显式 运行 apt-get install ruby-dev
或 yum install ruby-dev
取决于使用 case 语句的平台,但同样的问题(所有代码都被跳过, include_recipe 方法首先被调用)。
如果它有用,我使用的是 Chef 12,我知道它已停产,但我还有其他依赖项需要我暂时坚持使用此版本的 Chef。
我很可能只是误解了 Chef 如何收敛工作以及执行的顺序,但这让我很伤心,所以我真的很感激一些指示! include_recipe 是否总是出现在您的配方中的其他代码之前?有没有办法解决?我错过了什么吗?
-- 编辑 --
我能够使用我的食谱中的以下代码获得所需的功能(在 include_recipe
调用触发安装依赖项 gem 之前安装其他包和 gems)食谱:
package 'build-essential' do
action :nothing
end.run_action(:install)
chef_gem 'train' do
version "1.4.4"
action :install
end
chef_gem 'signet' do
version "0.11.0"
action :install
end
include_recipe 'audit'
请注意,我最终安装了 build-essential
包而不是原始代码片段中的 ruby-dev
包,并且还安装了两个 gem 供 Chef 客户端使用。这一切都按照我在 Chef 运行.
来源:
如果你检查 audit::inspec
配方,你会发现它使用编译时间 installation of the inspec rubygem(见最后一行)
inspec_gem 'inspec' do
version node['audit']['inspec_version']
source node['audit']['inspec_gem_source']
action :nothing
end.run_action(:install)
run_action
Use
.run_action(:some_action)
at the end of a resource block to run the specified action during the compile phase.