Chef - 如何编写包含用于“执行”的 DSL 的自定义资源

2023-12-26

我写了一个厨师definition发布到我们的聊天服务器。

由于不再推荐定义,我如何将其重写为资源?我对如何使用“事件”方式触发代码特别感兴趣。

File chat\definitions\post.rb :

define :chat_post do

  chat_url = 'https://chat.our.company/hooks/abcdef1234567890'
  message = params[:name]

  execute "echo" do
    command "curl -m 5 -i -X POST -d \"payload={"text": "#{message}"\" #{chat_url}"
    ignore_failure true
  end
end

调用菜谱中的代码:

artifacts.each do |artifactItem|
  # deploy stuff
  # ...

  chat_post "#{node['hostname']}: Deployed #{artifact_name}-#{version}"
end

现在,我已经阅读了厨师文档并尝试了各种方法(准确地说:Module, a library and a resource)并阅读有关的文档厨师定制资源 https://docs.chef.io/custom_resources.html,但没有成功。

有人可以指导我:如何将此代码转换为resource,如果这是正确的方法(厨师 12.6+)?

我很高兴知道

  • 食谱资源在食谱中的位置(chat/recipes,或者其他地方?)
  • 代码应该是什么样子(从我上面的定义转换)
  • 新代码是如何调用的(来自另一个食谱),我需要其中包含任何内容吗

From 自定义资源文档 https://docs.chef.io/custom_resources.html像这样的事情应该做(未经测试):

in chat/resources/message.rb:

property :chat_url, String, default: 'https://chat.our.company/hooks/abcdef1234567890'
property :message, String, name_property: true

action :send
  execute "echo #{message}" do
    command "curl -m 5 -i -X POST -d \"payload={"text": "#{message}"\" #{chat_url}"
    ignore_failure true
  end
end

现在在另一本食谱中:

artifacts.each do |artifactItem|
  # prepare the message:

  chat_message "#{node['hostname']}: Deployed #{artifact_name}-#{version}" do
    action :nothing
  end

  # deploy stuff
  # dummy code follow
  deploy artifactItem['artifact_name'] do
    source "whatever_url/#{artifactItem}
    notifies :send,"chat_message[#{node['hostname']}: Deployed #{artifactItem["artifact_name"]}-#{artifactItem['artifact_name']}]"
  end
end

默认情况下,通知会延迟,因此 chat_message 资源只会在运行结束时触发。

你部署食谱将必须depends on the chat食谱能够调用其custom_resource。

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

Chef - 如何编写包含用于“执行”的 DSL 的自定义资源 的相关文章

  • 如何使用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在
  • Opscode Chef 注册节点时请求实体太大

    我正在注册一个在运行列表中搜索其他节点属性的节点 问题是当节点信息太大而无法通过 HTTP 放在服务器上时 然后 Chef client 打印一条 FATAL Net HTTPServerException 413 Request Enti
  • 使用 Berkshelf 解决递归 git Cookbook 依赖关系

    TL 博士版本 Berkshelf 是否能够解决基于 Git 的说明书中的递归依赖关系 如果可以 如何解决 我尝试使用 Berkshelf 管理我的 Chef 食谱依赖项 这些食谱都存储在内部 Git 存储库中 依赖关系如下 env doc
  • 厨师食谱中使用了哪些 ruby​​ 功能?

    我刚开始使用 Chef 对 ruby 不太了解 我无法理解食谱中使用的语言语法 比如说 我在食谱中的recipes default rb 中创建一个目录 如下所示 directory home test mydir do owner tes
  • 有没有办法将资源的属性解析延迟到“执行”阶段?

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

    我正在尝试通过 Chef 代码部署 Rails 应用程序 食谱包含代码 deploy revision testapp do repo REPO URL ssh wrapper home ubuntu ssh chef ssh deploy
  • Chef mysql opscode-cookbooks 不起作用:“无法找到 mysql 食谱的 ruby​​ 食谱”

    我正在尝试使用https github com opscode cookbooks mysql https github com opscode cookbooks mysql但是当我运行流浪者条款时 找不到食谱 mysql 的食谱 rub
  • Vagrant 来测试厨师食谱 - 但如何处理私人 git

    我使用 vagrant 来测试我的厨师食谱 问题是我已经克隆了我的私人存储库并且机器没有被认证 我如何自动对 boostrap Chef 进行 git 身份验证 我正在使用 vagrant ubuntu 11 10 with Chef Th
  • 在 ruby​​ 类中调用 Knife

    我想围绕刀创建一个很好的包装类 以允许程序以可读的方式运行刀命令 我目前正在尝试使用 Chef gem 中的 Knife rb 文件作为取得成功的指南 但是 我在关闭编辑器时遇到问题 如果我运行以下代码 require chef knife
  • 如何通过 Chef 在 Tomcat 7 食谱上上传 WAR 文件?

    我正在尝试在由 CHEF 上的食谱安装的 Tomcat 7 上部署一个 War 文件 但是 我在任何论坛上都找不到我的问题的答案 我不知道该怎么做 我使用的是 Ubuntu 服务器 12 10 我正在使用的食谱是https github c
  • Chef:是否可以定义使用模板的 Chef 资源,并从另一本说明书中调用它?

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

    我试图理解 Chef 客户端和验证器的概念 以及它们与引导过程的关系 根据本文 http docs opscode com server manage clients html 厨师 客户将使用 etc chef validation pe
  • 如何安装knife-ec2插件?

    OSX 10 9 2 ruby v ruby 2 0 0p247 2013 06 27 revision 41674 universal x86 64 darwin13 knife v Chef 11 10 4 当我跑步时 knife ec
  • 从 github 添加厨师食谱

    我使用以下命令从 opscode 网站下载了许多食谱 Knife Cookbook网站安装git例如 但是现在我想从 github 上的存储库下载一本说明书到我当前的说明书目录中 我该怎么做呢 我应该将存储库克隆到我的食谱目录中吗 谢谢你
  • Knife Bootstrap 的 Chef 节点配置问题 - 无法通过服务器进行身份验证

    我正在尝试使用 Knife Bootstrap 设置厨师客户端节点 knife bootstrap nodename x user P passwd sudo 收到以下错误消息 Chef 在尝试创建客户端 nodename url com
  • 如何在 Chef LWRP 定义中实现动态属性默认值

    我希望能够用 3 个参数来定义一个轻量级资源 其中两个是基本 基本参数 第三个是这两个参数的组合 我还想提供自定义第三个参数的可能性 例如 如何修改以下代码以实现上述行为full name属性 资源定义 actions install at
  • 指定与 Chef Solo 一起运行哪些食谱

    我正在使用 Chef solo 在本地测试我的食谱 但我希望能够只运行我正在测试的食谱 目前 chef solo 似乎将运行在solo rb 中指定的cookbooks 目录中的所有cookbook 我已经在 json 属性文件中指定了运行
  • 如何获取 RightScale 厨师食谱中正在运行的食谱的完整路径?

    从我当前正在执行的食谱食谱中 我想访问它在我的执行机器上的 当前 位置 我需要它来访问它的缓存目录结构 我有一种感觉它位于 node 内部的某个地方 但我根本找不到有关其结构的任何文档 有什么建议吗 Thanks 刚刚通过检查 run co
  • 调用 LWRP 时的 Cookbook 名称前缀

    Summary 我可以使用外部说明书中的 LWRP 而不添加说明书名称前缀吗 例如 如果mycookbook包含mylwrp资源 我该怎么做 include recipe mycookbook Contains mylwrp mylwrp

随机推荐

  • 我的 jQuery CDN url 正确吗?

    谁能确认 CDNsrcjQuery 的链接 我正在使用以下内容 是的 URL 和您的script标签正确 顺便说一句 jQuery 1 4 3 最近发布了
  • 具有网络凭据的 HttpClient.GetAsync

    我目前正在使用HttpWebRequest获得一个网站 我想使用等待模式 该模式没有给出HttpWebRequests 我找到了班级HttpClient 这似乎是新的 Http 工作类 我在用着HttpClient GetAsync 查询我
  • Android 视频录制预览无效

    我有一项服务 我尝试让该服务将视频录制到文件中 启动Service的Activity public static SurfaceView mSurfaceView public static SurfaceHolder mSurfaceHo
  • 如何从 JAX-RS 方法重定向到 JSF 页面?

    我有一个 JAX RS 资源 在解析业务逻辑后 我想在 JSF 页面中显示结果 我怎样才能做到这一点 Path rest public class PaymentServiceRest GET Path status public Stri
  • 何时不在 C#(或 Java、C++ 等)中使用 Regex

    很明显 有很多问题看起来像一个简单的正则表达式就能解决 但事实证明是这样的很难用正则表达式来解决 那么某人如何不是正则表达式专家 知道他 她是否应该学习正则表达式来解决给定的问题 See 正则表达式解析 C 源代码以查找所有字符串 http
  • Android VideoView同时播放2个视频

    我正在尝试玩一个videoview在另一个视频视图之上 第一个视频视图已暂停 而第二个视频视图正在播放 它似乎可以工作 但屏幕上没有出现第二个视频 尽管我听到了音频并看到了通常出现在顶部的控件 我假设这是某种订单问题 有什么想法吗 顺便说一
  • Guzzle、ReactPHP、Amphp 的并行请求

    有什么区别 GuzzleHttp http docs guzzlephp org en stable ReactPHP https reactphp org Amphp https github com amphp 它们有何不同以及典型的使
  • Html禁用android深度链接

    有没有办法告诉网页链接 标签 不深层链接到Android应用程序并保留在浏览器中 我指的是在网站上可以做什么 而不是在应用程序上 只要意图 URL 模式与其清单中的深度链接模式匹配 应用程序就会启动 我认为如果你知道模式是什么 你就可以解决
  • 如何读取添加到日历中的事件/条目?

    我现在可以添加条目 在我的应用程序中 用户可以在他的日历上输入约会 事件 但在他这样做之前 它应该向他显示他已经添加的事件 它应该从日历中获取事件并将其显示给他 这个怎么做 我被困在这部分 提前致谢 Cursor cursor cr que
  • winform的透明背景?

    我想让我的窗口窗体透明 所以删除了边框 控件和所有内容 只留下窗体框 然后我尝试将 BackColor 和 TransparencyKey 设置为透明 但没有成功 因为 BackColor 不接受透明颜色 经过一番搜索后 我在 msdn 上
  • 如何在 Ruby 中从字符串“A::B::C”获取类对象?

    下面的例子失败了 class A class B end end p Object const get A gt A p Object const get A B gt NameError wrong constant name A B U
  • 滚动时保持报告标题可见

    我经常检查以下选项 希望在报告呈现在RS门户网站 但它从来没有工作过 报告通常有一些Row Groups 这对这个选项是否有效有影响吗 或者这是一个错误Reporting Services 我发现它通常不像广告中那样工作 你必须找到 高级模
  • 添加对 netstandard 2.0 的引用时出现问题

    我将 Asp Net Core 1 1 应用程序更改为 Core 2 0 这一切进展顺利 但是在我更新了我的 nuget 软件包之后 我到处都遇到这个错误 类型 xxx 是在未引用的程序集中定义的 您必须添加对程序集 netstandard
  • 将记录插入 BigQuery 流与简单插入 - 使用 table->insertRow 或 table->inserRows 与使用 bigquery->runquery

    如果我使用 table gt insertRow 或 table gt inserRows 函数 这意味着我正在将数据流式传输到 bigquery 中 https googlecloudplatform github io google c
  • 为什么这个迭代是随机的? [复制]

    这个问题在这里已经有答案了 描述 所以我的目的是迭代这个 地图 并让它按顺序打印每对 但是 我随机获得了这些对 代码和输出 code let map Int String 1000 M 900 CM 500 D 400 CD 100 C 9
  • 为什么 Python 在从末尾索引列表时从索引 -1(而不是 0)开始? [复制]

    这个问题在这里已经有答案了 list a b c d print list 3 Number 3 is d print list 4 Number 4 is a 用另一种方式解释 因为 0等于0 如果向后开始0 对于解释器来说是有歧义的 如
  • 从样式表设置内容边距

    我正在努力将内容边距设置为零QLayoutQt 中带有样式表的对象 我可以删除它们QLayout setContentsMargins 0 0 0 0 但我更喜欢从样式表中完成它 截至目前 这一目标还无法实现 使用 QLayout setC
  • 如何在单击按钮时弹出默认 iPhone 键盘

    你好 当我们点击 UITextField 或 UITextView 时 iPhone 屏幕底部会弹出一个默认键盘 我希望 iPhone 键盘出现在单击按钮时 然后处理键盘上键入的按键 我该怎么做 在按钮上添加 touchupinside 事
  • 相当于powershell中的网络使用(列出计算机的连接)?

    根据windows帮助NET USE 当不带选项使用时 会列出计算机的连接 我想在 powershell 中找到一种方法来获取 net use 输出中的远程条目列表 我知道作为一种极端措施 我可以解析 net use 命令本身的结果 但我不
  • Chef - 如何编写包含用于“执行”的 DSL 的自定义资源

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