Chef 食谱中的编译时间与运行时间

2024-01-03

我有以下(简化的)方法,称为 java,当然可以安装 Java。

文件菜谱/default.rb

include_recipe "install_java"

文件菜谱/install_java.rb

# Install RPM from yum repo via yum_install library function
yum_install("jdk1.7.0_51")

# List the directories in /usr/java
jdk_dir = `ls -ld /usr/java/jdk1.* | sort | tail -1`
if jdk_dir.empty?
  raise "Missing JDK installation"
end

当我通过“chef-client -o Recipe[java]”运行菜谱时

Synchronizing Cookbooks:
  - java
Compiling Cookbooks...
ls: /usr/java/jdk1.*: No such file or directory

=================================================== ========================= /var/chef/cache/cookbooks/java/recipes/default.rb 中的食谱编译错误 ================================ ===============================================

RuntimeError
------------
Missing JDK installation

看起来 yum_install() 函数没有被调用。但是,如果我修改 install_java.rb 配方以仅具有

# Install RPM from yum repo via yum_install library function
yum_install("jdk1.7.0_51")

有用。

为什么是这样?


好吧,厨师跑了两遍。

“编译时间”

我喜欢称其为收集阶段.
此时,您的配方中的实际 ruby​​ 代码已运行。这意味着任何类似的陈述jdk_dir = ls -ld /usr/java/jdk1.* | sort | tail -1届时将被处决。但是,创建 Chef 资源的 ruby​​ 代码yum_install("jdk1.7.0_51")只创造资源。这些由您的食谱代码创建的资源随后将添加到 Chef 中资源集合,但资源操作尚未运行。

《汇聚时间》

我称之为解决阶段。 此时 - 在所有配方运行之后(创建资源,但不运行操作) - 我们现在准备好实际运行资源操作。 Chef 从第一个资源开始资源集合并对该资源运行指定的操作。它通过集合工作,根据需要调用通知,直到所有资源的操作都已运行。然后你的跑步就完成了。

您的具体案例

因此,就您而言,您正在尝试访问收集阶段但您不会创建目录,直到解决阶段。如果你想在这段时间内运行 ruby​​ 代码解决阶段你可以这样做ruby_block资源。例如:

ruby_block 'verify java is there' do
  block do
    if jdk_dir.empty?
      raise "Missing JDK installation, reinstall"
    end
  end
end

If this ruby_block资源放置在您之后yum_install(这可能应该是yum_package) 资源,那么它将被放置在安装资源之后收集阶段,然后在期间执行解决阶段 (i.e., run time)的厨师运行。

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

Chef 食谱中的编译时间与运行时间 的相关文章

随机推荐

  • ResourceDictionary 源绑定到模块(用于本地化)

    我有一个 XAML 窗口 其中有一组绑定到对象的字符串 如下所示
  • Sonarqube:查看涵盖源代码的单元测试

    我们在 Bamboo 中有一个 CI 设置 它运行 Junit 测试并使用 Jacoco 计算单元测试覆盖率 然后我们运行Sonar插件进行源代码分析 一切都运行良好 我们可以看到 SonarCube 服务器上的分析 包括覆盖范围 但我们希
  • Symfony 框架的最佳论坛插件解决方案是什么?

    我正在寻找一个好的解决方案整合论坛进入 symfony 应用程序 像 phpBB 这样的东西会很棒 我见过 phpBB 插件与 symfony 集成 但这不足以满足我的目的 而且 在我看来 映射数据库表是一种蹩脚的方法 如果有人知道 Sym
  • 如何在微服务/容器/云环境中管理机密?

    微服务和云是一回事 每个人都在谈论和写作 就我个人而言 我对这个主题思考了很多 如何利用它从中受益 可能面临哪些挑战 这如何加速日常开发 以及如何管理一切 几天来困扰我的一个问题是 如何在微服务 云环境中管理机密 想象一下一家拥有 150
  • 如何在 Chrome 上下载文件而不自动将文件重命名为“下载”?

    我使用 javascript 生成文件并下载它 看来 根据 chrome 版本的不同 下载文件名可以自动重命名为 download 有办法避免吗 这是我的代码 var link document createElement a link s
  • UISearchBar 使用 Storyboard 实现

    我对 iOS 开发非常陌生 但也很兴奋 我构建了一个应用程序 它使用故事板并使用 plist 文件的内容填充 UITableView 到目前为止 我设法让一切运行良好 但现在我想添加一个搜索栏 就像联系人应用程序中的搜索栏一样 本质上这就是
  • 如何访问Singleton类的静态方法?

    我对单例类有一些困惑 以下是我的一些观点 单例类可以有静态方法吗 如果是的话我们如何调用该方法 静态类和单例类之间的主要区别是什么 我创建了我的单例类 如下所示 public class Singleton private static S
  • 如何修复 RedBlackTree 实现中的删除问题?

    这是我正在使用的 RedBlackTree 的实现 来自 Mark Allen Weiss 数据结构 public class RedBlackTree
  • SequenceStyleGenerator,如何使用前缀而不是后缀

    我正在休眠中处理序列 我们有一个关于序列命名的命名约束 格式为 SEQ 我如何自定义 参数化类 SequenceStyleGenerator 以便在序列名称中添加前缀 最后 我创建了一个继承自 SequenceStyleGenerator
  • 如何将 PathCchCanonicalizeEx 与 C++Builder 10.2 一起使用?

    我有一个使用旧版 32 位 C 编译器的旧版 Windows 项目 由于各种原因我需要使用Windows 8 功能PathCchCanonicalizeEx https stackoverflow com questions 7103864
  • Grails 2.1.0 不自动重新加载/自动重新编译

    看来 Grails 确实会自动重新编译我的 GSP 页面 但不会自动重新编译我的控制器 它曾经与以前版本的 Grails 一起使用 知道我可以寻找什么吗 在 OSX Snow Leopard 上使用 Grails 2 1 0 注意 这类似于
  • 快速半正弦近似(Python/Pandas)

    Pandas 数据框中的每一行包含 2 个点的纬度 经度坐标 使用下面的 Python 代码 计算许多 数百万 行的这 2 个点之间的距离需要很长时间 考虑到这两个点相距不到 50 英里 并且精度不是很重要 是否可以使计算速度更快 from
  • 使用“init”或“didmove”的正确方法是什么?

    语言 Swift 3 0 IDE Xcode 8 0 beta 2 项目 iOS 游戏 SpriteKit 我为 iOS 创建了一款游戏 我知道 Apple 对于接受应用程序 游戏的规则非常严格 所以我想知道哪种是设置游戏的正确方法 我从谷
  • 在共享开发环境中覆盖 PHP.ini

    我的开发环境与我的初创公司的其他开发人员共享 并在 Rackspace 上设置 php ini 文件位于 etc 文件夹 我相信这是一个集中位置 每个其他开发人员的开发环境设置都从这里进行配置 我想定制这个php ini专门为我自己归档 而
  • 在 Asp.net Core 1.0 项目的编译时复制文件

    我正在使用 Asp Net Core 1 0 创建 REST Api 我想在编译项目时将项目中未包含的文件复制到输出路径 但我不知道该怎么做 我尝试使用 buildOptions copyToOutput 但没有成功 我无法真正理解此处找到
  • Node.js 的 EJS(与 Express 捆绑)中未包含 link_to 和其他视图助手?

    我已经使用 Express Web 框架和 EJS 模板引擎设置了一个 NodeJS 服务器 当我尝试使用 EJS 时link to在视图内查看助手时 我收到引用错误 这是因为我做错了什么 还是视图助手只是不包括在内 我尝试过以下方法 lt
  • 在 Blazor 中,如何动态更改 HTML 标签?

    假设我的 Blazor 组件中有以下标记 div ChildContent div 我想为父组件提供一种方法来确定将使用哪个标签来代替 div 就像是 lt Tag attributes Attributes data myattr som
  • QMessageBox 阻止 QDialog

    这次我真的不知道如何提出我的问题 我的应用程序以 QDialog 作为主窗口 该应用程序从远程机器获取不同的值 例如温度 湿度等 为了进行开发 我添加了一个包含不同小部件的组框来模拟这些值 我对向用户发出警告和警报有不同的限制 例如 如果温
  • 优雅地关闭 Java 命令行程序的最佳方法

    我对优雅地关闭 Java 命令行程序的不同方法感兴趣 发送终止信号不是一种选择 我可以想到几种不同的方法 打开端口并等待连接 完成后 优雅地关闭 观察要创建的文件 然后关闭 从终端读取一些输入 例如 执行关闭 第三种方法并不理想 因为经常有
  • Chef 食谱中的编译时间与运行时间

    我有以下 简化的 方法 称为 java 当然可以安装 Java 文件菜谱 default rb include recipe install java 文件菜谱 install java rb Install RPM from yum re