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

Chef infra 厨师:是否可以定义一个使用模板的厨师资源,并从另一本食谱中调用它?,chef-infra,Chef Infra,我有一个在Chef中使用模板的资源,它工作得很好。食谱中的其他资源和食谱可以称为此资源。在我的例子中,我定义了一个maven工件资源,其中给定一些maven参数(repo名称、工件ID等),您可以从Nexus maven repo下载一个文件 但是,当我从任何其他cookbook调用资源时(当然,使用metadata.rb指定依赖项),我会得到一个错误 Chef::Exceptions::FileNotFound -----------------------------

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

但是,当我从任何其他cookbook调用资源时(当然,使用
metadata.rb
指定依赖项),我会得到一个错误

 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)下载工件。

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

食谱/mytemplate/resources/foo.rb

提供:foo
属性:模板\源,字符串,默认值:“foo.erb”
属性:模板\烹饪书,字符串,默认值:“mytemplate”
操作:运行do
模板“/tmp/foo.xyz”do
source新建\u资源。模板\u源
cookbook new_resource.template_cookbook
终止
终止
食谱/mytemplate/templates/foo.erb:

THIS IS THE DEFAULT TEMPLATE
THIS IS THE OVERRIDDEN TEMPLATE
食谱/test/metadata.rb:

THIS IS THE DEFAULT TEMPLATE
THIS IS THE OVERRIDDEN TEMPLATE
名称“测试”
版本“0.0.1”
依赖于“mytemplate”
食谱/test/recipes/default.rb:

THIS IS THE DEFAULT TEMPLATE
THIS IS THE OVERRIDDEN TEMPLATE
foo“随便”
然后,调用方可以使用自己的模板名称和位置覆盖该模板,并将模板“依赖项注入”到资源中:

食谱/test/recipes/default.rb:

THIS IS THE DEFAULT TEMPLATE
THIS IS THE OVERRIDDEN TEMPLATE
foo“随便”做什么
模板\u食谱\u名称
模板\源“bar.erb”
终止
食谱/test/templates/bar.erb:

THIS IS THE DEFAULT TEMPLATE
THIS IS THE OVERRIDDEN TEMPLATE
cookbook_文件
资源有一个
cookbook
属性,该属性应该工作相同


您可以在sous chef tomcat cookbook中“在野外”使用此模式,其中定义了属性,并随后在其呈现的模板资源中使用此模式,

我应该添加-
cookbook\u文件
也不能在资源中使用,如果您依赖并从另一个cookbook调用该资源。您是英雄。