首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Chef:是否可以定义一个使用模板的Chef资源,并从另一本食谱中调用它?

Chef:是否可以定义一个使用模板的Chef资源,并从另一本食谱中调用它?
EN

Stack Overflow用户
提问于 2020-08-25 04:17:02
回答 1查看 137关注 0票数 2

我有一个资源,它在Chef中使用了一个模板,它工作得很好。食谱中的其他资源和食谱可以调用此资源。在我的例子中,我定义了一个maven工件资源,其中给定了一些maven参数(repo名称、工件ID等),您可以从Nexus maven repo下载一个文件。

但是,当我从定义该资源的食谱之外的任何其他食谱中调用该资源时(当然,使用metadata.rb指定依赖项),我得到一个错误

代码语言:javascript
复制
 Chef::Exceptions::FileNotFound
           ------------------------------
           template[/usr/local/nexus-download.bash] (/tmp/kitchen/cache/cookbooks/cookbook-1/resources/nexus_http_artifact.rb line 52) had an error: Chef::Exceptions::FileNotFound: Cookbook 'cookbook-2' (1.0.0) does not contain a file at any of these locations:
[...]

该模板基本上是一个bash脚本,在检查了MD5总和并使用Nexus HTTP API与当前下载进行比较后,运行该脚本以通过网络从maven repo (Nexus)下载工件。

EN

回答 1

Stack Overflow用户

发布于 2020-08-25 09:36:36

您可以通过模板资源的cookbook属性控制模板所来自的食谱。对于自定义资源,cookbook属性默认为使用该资源的调用cookbook,而不是声明该资源的位置。您可以很容易地覆盖它,因为您知道您正在编写的食谱的名称。所以我们可以这样做:

cookbooks/mytemplate/resources/foo.rb

代码语言:javascript
复制
provides :foo

property :template_source, String, default: "foo.erb"
property :template_cookbook, String, default: "mytemplate"

action :run do
  template "/tmp/foo.xyz" do
    source new_resource.template_source
    cookbook new_resource.template_cookbook
  end
end

cookbooks/mytemplate/templates/foo.erb:

代码语言:javascript
复制
THIS IS THE DEFAULT TEMPLATE

cookbooks/test/metadata.rb:

代码语言:javascript
复制
name "test"
version "0.0.1"

depends "mytemplate"

cookbooks/test/recipes/default.rb:

代码语言:javascript
复制
foo "whatever"

然后,调用者可以使用自己的模板名称和位置覆盖它,并将模板“依赖注入”到资源中:

cookbooks/test/recipes/default.rb:

代码语言:javascript
复制
foo "whatever" do
  template_cookbook cookbook_name
  template_source "bar.erb"
end

cookbooks/test/templates/bar.erb:

代码语言:javascript
复制
THIS IS THE OVERRIDDEN TEMPLATE

cookbook_file资源有一个应该以相同方式工作的cookbook属性。

您可以在sous-chef tomcat食谱中“在野外”使用这种模式,其中属性被定义为here,随后在模板资源中使用它呈现herehere

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63568162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档