有没有办法将资源的属性解析延迟到“执行”阶段?

2023-12-21

我有两个 LWRP。第一个涉及创建磁盘卷、对其进行格式化并将其安装在虚拟机上,我们将此称为资源cloud_volume。第二个资源(它的作用并不重要)需要新格式化卷的 UUID,这是必需的属性,我们将调用此资源foobar.

资源cloud_volume and foobar用于类似下面的食谱中。

volumes.each do |mount_point, volume|
  cloud_volume "#{mount_point}" do
    size volume['size']
    label volume['label']
    action [:create, :initialize]
  end
  foobar "#{mount_point}" do
    disk_uuid node[:volumes][mount_point][:uuid]   # This is set by cloud_volume
    action [:do_stuff]
  end
end

所以,当我做厨师运行时,我得到了Required argument disk_identifier is missing!例外。

经过一番挖掘后,我发现配方分两个阶段处理:编译阶段和执行阶段。看起来问题出在编译时,因为那是时间点node[:volumes][mount_point][:uuid]未设置。

不幸的是我无法使用 OpsCode 的技巧here http://web.archive.org/web/20120226074250/http://wiki.opscode.com/display/chef/Evaluate+and+Run+Resources+at+Compile+Time由于在 cloud_volume LWRP 中使用通知(因此它会落入文档中显示的反模式)

所以,毕竟,我的问题是,有什么办法可以绕过价值的要求disk_uuid在编译时就知道?


更干净的方法是使用惰性属性评估 http://docs.opscode.com/resource_common.html#lazy-attribute-evaluation。这将评估node[:volumes][mount_point][:uuid]在执行期间而不是编译期间

foobar "#{mount_point}" do
  disk_uuid lazy { node[:volumes][mount_point][:uuid] }
  action [:do_stuff]
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法将资源的属性解析延迟到“执行”阶段? 的相关文章

随机推荐

  • 如何在 Fauna DB 中创建索引以返回键值对中的排序数据

    我正在尝试创建一个索引 该索引返回带有键的对象中的排序数据 我的集合的默认索引返回如下内容 ref Ref Collection posts 251333584234742292 ts 1583632773120000 data title
  • 如何在 Objective-C 中定义和使用 ENUM?

    我在实现文件中声明了一个枚举 如下所示 并在接口中声明了该类型的变量作为 PlayerState thePlayerState 并在我的方法中使用了该变量 但我收到错误消息 指出它未声明 如何在我的方法中正确声明和使用 PlayerStat
  • java.nio.file 的替代方案

    我在这个项目中使用 Android Studio 2 3 1 和 jdk 1 8 我导入一个项目 它使用 java nio file Files 和 java nio file Paths Java 8 中不存在包 java nio fil
  • 如何使用 JHipster 和 Hibernate Envers

    我无法弄清楚如何使用 Hibernate Envers 和 JHipster 我使用 PostgreSQL 来存储数据 最新的 Jhipster 2 6 0 我刚刚生成了一个 JHipster 应用程序 没有任何修改 User 域类扩展了
  • shell whoami 不等于 php shell_exec whoami?

    在 shell 中 我执行简单的 whoami 操作 然后得到 geoff 这很好 因为这就是我 在 php 文件中 我有 shell exec whoami 我没有得到任何人 在我看来 这似乎是一个差异 可以解释我最初的问题 imagem
  • PHP从3个变量中获取最大的数字[重复]

    这个问题在这里已经有答案了 可能的重复 返回具有最高值的变量 https stackoverflow com questions 5737305 return variable with the highest value 我试图想出一种简
  • Rails - 如何“合并”或将值附加到 URL 内的数组?

    我正在尝试在 URL 中传递一个数组 该数组工作正常 但我想知道如何插入或删除某些值 例如 我有一个链接 如下所示 http localhost 3000 pins genre ids 1 2 3 我想构建一组可以在此 URL 数组中插入或
  • 在 ASP.NET 内部运行 ASP.NET MVC 时,会话为 NULL

    如果我创建一个 ASP NET Web 应用程序项目 然后使用像这样定义的默认路由向其添加 ASP NET MVC 2 routes MapRoute Default Route name controller action id URL
  • 使用 JS 检测 MacOS、iOS、Windows、Android 和 Linux 操作系统 [重复]

    这个问题在这里已经有答案了 如何使用 JavaScript 检测 MacOS X iOS Windows Android 和 Linux 操作系统 我学到了很多关于window navigator对象及其属性 platform appVer
  • 客户端 JavaScript 应用程序和服务器端 HTTP API 之间的身份验证?

    我已经构建了一些通过 HTTP 工作的服务器端 API 仅适用于我的客户端应用程序 那么 是否可以在客户端和服务器端之间对应用程序进行身份验证 以及如何做 有两种选择 Sessions HTTP认证 会话背后的想法是 服务器向客户端发送一个
  • 使用 MS Graph API C# 读取用户电子邮件

    我正在尝试使用 MS Graph API 读取特定邮箱中的电子邮件 var client await GetClient getting a client with client id secret var users await clie
  • ASP.Net 转发器 item.DataItem 为 null

    在网页中 加载时 我用两个表填充数据集以及这些表之间的关系 然后将数据加载到具有嵌套转发器的转发器中 用户单击按钮后也可能发生这种情况 数据从 SQL 数据库加载 转发器数据源设置为回发后的数据集 但是 当 ItemDataBound 发生
  • 甲骨文。在两个过程中重用游标作为参数

    让我们创建两个测试程序 CREATE OR REPLACE PROCEDURE Aaaa Test1 pDog SYS REFCURSOR IS TYPE tDogRec is record objid varchar2 7 lim num
  • 布局类似于放射状菜单

    我必须设计这样的东西并为每个块添加点击事件 我应该如何继续 任何人都可以指导我吗 我知道现在回复已经太晚了 但这适用于那些现在在项目中需要此类功能的开发人员 看看这个演示项目github https github com beaucolli
  • 如何拒绝来自 iframe 的网站访问?

    我注意到一些网站出于安全原因拒绝从 iFrame 访问其注册和登录页面 我认为这是个好主意 我想知道他们需要什么设置才能做到这一点 因为我想在我的网站上做同样的事情 该网站是用 Java 构建的 并在 Apache Tomcat 上运行 如
  • 在 64 位 VBA 中使用 TaskDialogIndirect

    问题描述 我尝试让代码在 64 位 VBA 下工作 而在 32 位 VBA 下工作正常 它与通用控件任务对话框有关 我使用 Microsoft Access 但问题在其他 VBA 主机中应该是相同的 一个部分在 32 位和 64 位 VBA
  • Html.ImageGetter

    任何人都可以帮我解决如何使用 Html ImageGetter 使用 html 图像 src 标签显示图像吗 和例子或很好的教程 要首先从文本文件中的应用程序资源获取图像 请插入一个 html 图像标签 如下所示 img src my im
  • C# - 检查给定的 url 是文件还是目录?

    我有一个方法可以输入 http ftp 或本地路径 通过输入 url 我需要确定它是文件还是目录 Path GetExtension url 几乎可以正常工作 但如果目录以 有 开头以它的名字命名 那么这个检查就会失败 还有其他方法可以检查
  • Pylint 错误消息:“E1101:模块‘lxml.etree’没有‘strip_tags’成员’”

    我正在尝试lxml http lxml de 第一次使用 python 进行个人项目 我正在尝试使用 etree strip tags 从一些源代码中剥离标签 https stackoverflow com questions 468131
  • 有没有办法将资源的属性解析延迟到“执行”阶段?

    我有两个 LWRP 第一个涉及创建磁盘卷 对其进行格式化并将其安装在虚拟机上 我们将此称为资源cloud volume 第二个资源 它的作用并不重要 需要新格式化卷的 UUID 这是必需的属性 我们将调用此资源foobar 资源cloud