Chef:是否可以定义使用模板的 Chef 资源,并从另一本说明书中调用它?

2024-01-20

我有一个使用 Chef 模板的资源,并且运行良好。食谱中的其他资源和食谱可以调用此资源。就我而言,我定义了一个 Maven 工件资源,在给定一些 Maven 参数(存储库名称、工件 ID 等)的情况下,您可以从 Nexus maven 存储库下载文件。

但是,当我从定义它的资源以外的任何其他食谱调用该资源时(使用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 存储库 (Nexus) 下载工件。


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

食谱/mytemplate/resources/foo.rb

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

食谱/mytemplate/templates/foo.erb:

THIS IS THE DEFAULT TEMPLATE

食谱/测试/metadata.rb:

name "test"
version "0.0.1"

depends "mytemplate"

食谱/测试/食谱/default.rb:

foo "whatever"

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

食谱/测试/食谱/default.rb:

foo "whatever" do
  template_cookbook cookbook_name
  template_source "bar.erb"
end

食谱/测试/模板/bar.erb:

THIS IS THE OVERRIDDEN TEMPLATE

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

您可以在定义属性的 sous-chef tomcat 食谱中“野外”使用此模式here https://github.com/sous-chefs/tomcat/blob/35195822e051a856f342fd7f80e1ee77bdfabf15/resources/service_upstart.rb#L35-L36然后在它渲染的模板资源中使用here https://github.com/sous-chefs/tomcat/blob/35195822e051a856f342fd7f80e1ee77bdfabf15/resources/service_upstart.rb#L90 and here https://github.com/sous-chefs/tomcat/blob/35195822e051a856f342fd7f80e1ee77bdfabf15/resources/service_upstart.rb#L100

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Chef:是否可以定义使用模板的 Chef 资源,并从另一本说明书中调用它? 的相关文章

随机推荐

  • 如何内嵌文本旋转 90 度

    如何在不使用样式表的情况下将文本旋转 90 度 我已将以下说明放置在页面的标题区域中 然后我在相关段落周围放置了以下内容 div p My paragraph p div 但它不起作用 因此我的问题 这是一个小的视觉示例 rotate te
  • 谷歌地图不显示

    我需要在我的 php 页面地图上实现 我有容器 div div 它位于其他 div 内 我将这段代码放入其中标签 但根本不显示 有谁能够帮助我
  • 如何将表转换为 Spark Dataframe

    在 Spark SQL 中 可以使用以下命令将数据帧作为表进行查询 sqlContext registerDataFrameAsTable df mytable 假设我有的是mytable 我如何获取或访问它作为 DataFrame 最干净
  • 如何在 Swift 中规范化 UIImage 的像素值?

    我们正在尝试使UIImage以便它可以正确传递到 CoreML 模型中 我们从每个像素检索 RGB 值的方法是首先初始化一个 CGFloat 数组称为rawData每个像素的值 这样就有一个红色 绿色 蓝色和 alpha 值的位置 在bit
  • ANSI 颜色在带有 PowerShell 的 VSCode 集成终端中不起作用

    我正在为我的 python 项目使用 Visual Studio Code 并且我也在使用片状天堂 https flakeheaven readthedocs io en latest 未维护的分叉弗莱克地狱 https github co
  • 将 python BOTO 与 AWS SQS 结合使用,返回无意义的字符

    因此 我使用 python 和 BOTO 来访问我的 AWS SQS 我在 SQS 中有一些消息 我可以从 AWS 仪表板看到这些消息 然而 当我尝试通过 python 获取这些消息时 出现的字符只是乱码 知道这是怎么回事吗 conn bo
  • 在中继器内更新图像的 ImageUrl

    我希望有一个人可以帮助我 恐怕这是一个相当新手的问题 我在中继器中有一个图像 我想根据传递给它的参数更改其 IMAGEURL
  • 使用 Clipper 库 (c++) 进行线和多边形裁剪返回空路径

    我正在尝试使用 Clipper 库按线分割多边形 执行裁剪后 返回空路径 有人可以建议正确的方法来做同样的事情吗 Paths clip 2 soln clip 0 lt lt IntPoint 264 210 lt lt IntPoint
  • 在 Python 中下载 Sharepoint Excel 文件

    我正在尝试使用 Python 脚本从 SharePoint 存储库下载 Excel 文件 我正在使用 Office365 Rest Python Client 如示例中所定义https github com vgrem Office365
  • 在 Vista 上捕获“程序停止运行”

    在 Vista 上 我遇到了应用程序崩溃处理程序的问题 基本上 如果发生 SEH 无法捕获的意外情况 我会收到此弹出窗口 其中包含 应用程序停止工作 blablabla 关闭程序 调试程序 也就是说 在我使用系统控制面板 启用错误报告后 您
  • 如何获取图像的亮度梯度

    我正在努力通过图像亮度检查来理解图像 我尝试通过下面的代码找到图像的亮度 def brightness im file im Image open im file stat ImageStat Stat im r g b stat rms
  • 使闪亮的 dateInput 返回 NULL 或空字符

    我正在开发一个闪亮的应用程序 它允许用户从input插入 SQL Server 数据库 我想要做的一件事是删除当前存在的日期 为此 我需要一种方法来通过NULL NA or 某物我可以用它来将数据库中的值设置为 NULL dateInput
  • 查找具有属性支持的 JavaScript 库,用于在 JavaScript 中序列化和反序列化对象

    考虑 JavaScript 中的以下类 Tools UserBase Tools Class define Tools UserBase Tools EntityBase UserId type System Int32 key true
  • Laravel 在共享主机上运行 artisan 命令

    我在以下网站上托管了一个网站http 000webhostapp com http 000webhostapp com一段时间以来它工作正常 但它向我显示了这个错误 生产 错误 未指定应用程序加密密钥 我发现我必须运行这个 artisan
  • 如何使用 Terraform 和 AWS API Gateway 创建 API 代理

    我正在尝试使用 Terraform 在 AWS 上的 API Gateway 中建立一个简单的 API 代理 基本上 我想包装 root 并将请求代理回另一个端点 这可能是最简单的设置 但我似乎无法让它在 Terraform 中工作 您将在
  • 在 html 中添加图像

    我似乎无法在 html 中添加图像 我正在使用 ASP net MVC 3 我的图像名为 KeyLargoPic 位于闪存驱动器上的文件夹 X Project Project Photos Key Largo 中 它看起来是 JPEG 代码
  • 如何使 osx 应用程序向后兼容以及如何测试它们的困惑

    阅读苹果SDK指南后https developer apple com library mac documentation developertools conceptual cross development Overview overv
  • 正则表达式中反斜杠后面的数字是什么意思?

    a b 1 什么是 1这个表达的意思是 1 表示匹配表达式中的第一个捕获组 n将是第 n 个捕获组 注意 0将是整场比赛 在许多引擎中 n 的上限为 9 但有些引擎也支持高达 99 当在正则表达式中使用时 例如 a b 1 这意味着在 a
  • IIS 中的 PuppeteerSharp

    我面临着一个有点恼人的情况 我们尝试在应用程序中使用 PuppeteerSharp 来生成背景 PDF 虽然它在开发模式下运行良好 但在生产环境中却不起作用 该应用程序是一个WebAPI 2 0站点 NET4 7 1 Windows 10机
  • Chef:是否可以定义使用模板的 Chef 资源,并从另一本说明书中调用它?

    我有一个使用 Chef 模板的资源 并且运行良好 食谱中的其他资源和食谱可以调用此资源 就我而言 我定义了一个 Maven 工件资源 在给定一些 Maven 参数 存储库名称 工件 ID 等 的情况下 您可以从 Nexus maven 存储