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 食谱中的编译时间与运行时间 的相关文章

  • 厨师食谱在 ohai 未定义方法“[]”上失败,因为 nil:NilClass

    我正在编写一本厨师食谱 在我的流浪盒子上设置一个带有 nginx postgresql 和 unicorn 的普通 ubuntu 12 04 2 但是我遇到了 nginx 的麻烦 有一个例外 undefined method for nil
  • 如何使用Chef设置环境变量?

    有一个与此类似的问题 但无法使其正常工作 我想简单地设置一个环境变量 然后使用它 execute start zookeeper do cwd opt zookeeper 3 4 5 bin command zkServer sh star
  • 捆绑包安装使用不同的 Ruby 版本?

    我尝试使用 Knife solo 在 Vagrant 上安装 Ruby 2 0 0 p353 当我以 root 和 vagrant 身份登录时 ruby v返回 Ruby 2 0 0 p353 然而 当我跑步时bundle install在
  • 测试 Chef 角色和环境

    我是 Chef 新手 一直在使用测试厨房测试我的食谱的有效性 效果很好 现在 我试图在最初运行 Chef 之前确保生产节点上特定于环境的属性正确 这些将在角色中定义 例如 我可能有使用带有开发设置的 Vagrant 盒子聚合的菜谱 这会验证
  • Chef:尝试添加时“节点”上未定义节点属性或方法“<<”

    在我的 postgresql 配方的属性文件中 我有 default postgresql pg hba comment gt IPv4 local connections type gt host db gt all user gt al
  • 将自定义 Chef 推送作业添加到 Windows 白名单

    我正在尝试将推送作业添加到推送客户端的 Windows 白名单中 当我用刀进行搜索时 它会在 Windows 节点的白名单中显示自定义作业 当我尝试运行它时 作业立即失败 并且在 Windows 端它说该命令不在白名单中 我在GitHub上
  • 厨师食谱 - 重新加载路径

    我刚刚使用 Chef Cookbook 安装了 Java 并为所有用户更新了 PATH 环境变量 将新文件添加到 etc profile d 是否可以告诉厨师重新加载 PATH 变量 当我做这样的事情时 execute java check
  • 如何确定目录中的任何文件是否已更改

    Chef 有没有办法确定它是否更改了给定目录中的任何文件 如果conf d 目录中的任何设置被更新 我想重新启动服务器进程 我确信可以在每次厨师客户端运行时将 md5sum 列表写入文件 并将当前迭代与之前的迭代进行比较 但这是解决常见场景
  • 如何在Chef客户端上设置节点属性?

    我正在使用厨师 客户食谱将机器配置为厨师客户端 创建此客户端时如何配置节点属性 我不想做knife node edit 我的目标是在创建此节点时设置一些节点属性 可能是通过向 JSON 文件添加一些内容 UPDATE 我正在创建数百个将使用
  • Chef 中的引导问题

    我已经使用 Chef 设置了基本的基础设施 这包括本地厨师服务器 基于 ubuntu 工作站和基于 ubuntu 的服务器 用作节点 请注意 整个基础设施都位于我办公室网络的防火墙后面 我已经为服务器访问互联网做了必要的代理设置 所以这就是
  • Chef - 如何编写包含用于“执行”的 DSL 的自定义资源

    我写了一个厨师definition发布到我们的聊天服务器 由于不再推荐定义 我如何将其重写为资源 我对如何使用 事件 方式触发代码特别感兴趣 File chat definitions post rb define chat post do
  • 我应该使用 include_recipe 还是将配方添加到 run_list 中?

    试图找出大型项目的最佳方法 何时适合使用以下方法在菜谱中添加菜谱include recipe而不是将食谱添加到run list 有没有好的经验法则 在我看来 任何配方都应该能够在空机器上独立运行 因此 如果某个配方 A 依赖于在其之前运行的
  • 在 ruby​​ 类中调用 Knife

    我想围绕刀创建一个很好的包装类 以允许程序以可读的方式运行刀命令 我目前正在尝试使用 Chef gem 中的 Knife rb 文件作为取得成功的指南 但是 我在关闭编辑器时遇到问题 如果我运行以下代码 require chef knife
  • 厨师从模板和刀搜索中创建逗号分隔的字符串

    我正在尝试从 Knife 查询创建动态创建的以逗号分隔的 Splunk 索引器列表 数据端口附加到每个主机名 该查询将返回的主机列表提供给模板和相应的 erb 然而 尽管当我聚合到测试 Docker 实例时没有抛出任何错误 但 conf 文
  • Chef Solo 错误:找不到食谱

    海伊 我正在尝试在 Amazon EC2 Linux AMI 上使用 Chef Solo 运行 MongoDB 配方 我已经安装了 Omnibus 在 rb 文件中设置了说明书路径 并在 json 文件中设置了运行列表 我已将 mongod
  • 如何使用 ChefSpec 测试我的 LWRP?

    我创建了自定义 LWRP 但是当我运行ChefSpec https github com sethvargo chefspec单元测试 它不知道我的 LWRP 操作 这是我的resource actions install uninstal
  • gitlab-ctl 重新配置:无法确定节点名称

    我确实在 Ubuntu 16 04 4 LTS 上设置了一个新的 GitLab 实例 安装包进展顺利 GitLab 似乎已启动并运行 然后我开始配置实例并设置 SMTP etc gitlab gitlab rb 后来我跑了sudo gitl
  • 指定与 Chef Solo 一起运行哪些食谱

    我正在使用 Chef solo 在本地测试我的食谱 但我希望能够只运行我正在测试的食谱 目前 chef solo 似乎将运行在solo rb 中指定的cookbooks 目录中的所有cookbook 我已经在 json 属性文件中指定了运行
  • 调用 LWRP 时的 Cookbook 名称前缀

    Summary 我可以使用外部说明书中的 LWRP 而不添加说明书名称前缀吗 例如 如果mycookbook包含mylwrp资源 我该怎么做 include recipe mycookbook Contains mylwrp mylwrp
  • 将 sensu-client 连接到服务器时 AMQP 连接的 bad_header

    我已经安装了 sensu 和厨师社区食谱 但是 sensu客户端无法连接到服务器 导致rabbitmq连接错误 尝试连接时消息超时 这是详细的客户端日志 来自 sensu client log 的日志 timestamp 2014 07 0

随机推荐

  • 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