如何在 Chef 中扩展轻量级提供程序

2023-11-25

我正在创建一堆不同的 Chef 提供程序来部署不同类型的应用程序。厨师的文档扩展轻量级提供程序表明这是可能的,但实际上并没有说明要做什么。该页面表明也许可以调用mixin是需要的,但我不知道我的代码在下面的文件中应该有什么结构/libraries或者如何将该代码实际包含在下面的内容中/providers.

以下是我想做的事情的示例。

在我的基类下/libraries:

repository "http://my.svn.server/#{deployment[:project]}/branches/#{node[:chef_environment]}/"
user "deploy"
scm_provider Chef::Provider::Subversion
svn_username "svn_user"
svn_password "password"

在我的 Torquebox Rails 应用程序部署提供程序中:

deploy_revision "/my/deployment/directory/#{deployment[:project]}" do
  # Magically mixin the code from libraries
  environment "RAILS_ENV" => node[:chef_environment]
  restart_command "rake torquebox:deploy"
end

当然还有针对不同类型应用程序的其他类型的提供商。

谁能指出我在这方面的正确方向?我缺少什么文档吗?


厨师会自动将 LWRP DSL 转换为成熟的 Ruby 类在运行时。这是由说明书的名称和文件名决定的(这与创建实际资源名称的方式相同)。

所以如果你有一本名为bacon和一个 LWRPbacon/resources/eat.rb,相关的 LWRP 为bacon_eat。相关的class是驼峰式的、恒定的版本 -Chef::Resource::BaconEat and Chef::Provider::BaconEat在这种情况下。

这种模式有一个例外 -default。 “默认”在厨师领域很特别,因为它doesn't获得前缀。所以如果你有一本名为bacon和一个 LWRPbacon/resources/default.rb,相关的 LWRP 为bacon (not bacon_default)。相关的class是驼峰式的、恒定的版本 -Chef::Resource::Bacon and Chef::Provider::Bacon(不是“BaconDefault”)在这种情况下。

好吧,那为什么要讲背景故事呢?为了扩展 LWRP,您需要继承 LWRP 的类(Rubyism)。所以在你的libraries/目录,您想要扩展您的自定义资源:

class Chef
  class Resource::MyResource < Resource::Bacon # <- this
  end
end

所以,在你的例子中:

class Chef
  class Resource::MyDeployRevision < Resource::DeployRevision
    def initialize(name, run_context = nil)
      super

      # This is what you'll use in the recipe DSL
      @resource_name = :my_deploy_revision

      # Things like default action and parameters are inherited from the parent

      # Set your default options here
      @repository = "http://my.svn.server/#{node['deployment']['project']}/branches/#{node.chef_environment}/"
      @user = 'deploy'
      @scm_provider = Chef::Provider::Subversion
      @svn_username = 'svn_user'
      @svn_password = 'password'
    end
  end
end

然后使用my_deploy_revision在你的食谱中。

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

如何在 Chef 中扩展轻量级提供程序 的相关文章

  • 测试 Chef 角色和环境

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

    我正在尝试将文件从 Windows 共享复制到我的节点的缓存 显然没有办法从remote file 做到这一点 所以我的替代想法是尝试将Windows 共享安装到本地驱动器并通过文件资源访问我需要的文件 然而 即使 Chef 告诉我挂载成功
  • Vagrant:在配置阶段创建此所有者时如何将所有者设置为同步/共享文件夹

    Vagrantfile 相关部分 config vm provision chef solo do chef chef add recipe yum various recipes in one of these i create the
  • Chef:尝试添加时“节点”上未定义节点属性或方法“<<”

    在我的 postgresql 配方的属性文件中 我有 default postgresql pg hba comment gt IPv4 local connections type gt host db gt all user gt al
  • 以非 root 用户身份运行厨师客户端

    我想在我的 Linux 机器上以测试用户身份运行 Chef client 为此 我在 client rb 文件中添加了来自 etc chef client rb 的缓存路径 cache path chef cache 然后我从测试用户 非r
  • Chef apt_repository 开始失败并出现 SSL 验证错误

    从过去 2 天开始 我们开始看到与 apt repository 资源相关的 Chef 执行失败 厨师 客户执行也遇到了类似的失败 主厨独奏版本 12 19 36 操作系统 Ubuntu 14 中的 Ubuntu v18 请参阅 Chef
  • 有没有办法将资源的属性解析延迟到“执行”阶段?

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

    我正在尝试使用安装javachef solo 问题是设置JAVA HOME and PATH变量在 etc profile文件 我尝试使用 file 厨师提供的资源 这是我的一些代码 java home export JAVA HOME u
  • 如何找到 Chef 菜谱中可用的磁盘?

    当 Chef 配方正在执行时 我想确定是否有足够的可用磁盘空间来执行操作 如何最好地做到这一点 Ohai http docs opscode com ohai html每次运行时都会检测节点的某些属性 这些属性被捕获为自动属性 http d
  • 为什么厨师无法解析我的食谱?

    Intro我正在学习 Chef 以自动化工作中的服务器管理 我从下载了 Chefdk 3 0here https downloads getchef com chef dk windows 现在我正在尝试使用厨师制作我的第一本食谱 重要的我
  • 仍然可以在节点 run_list 中指定确切的食谱版本吗?

    我的笔记中有这样的内容 run list recipe email protected cdn cgi l email protection 可以明确指定在节点 run list 中使用的说明书版本 但我无法让它工作 也找不到任何文档来说明
  • Chef 客户和验证者

    我试图理解 Chef 客户端和验证器的概念 以及它们与引导过程的关系 根据本文 http docs opscode com server manage clients html 厨师 客户将使用 etc chef validation pe
  • “berks update ”到底是做什么的?

    根据 berks help update 该命令应该 更新 Berksfile 中指定的说明书 和依赖项 是的 这就是它所说的 但这到底是什么意思呢 这与 Berksfile 中不同类型的 食谱 规范有何不同 更新命令将尝试查找每个说明书的
  • 在vagrant box上创建虚拟主机

    我正在尝试设置一个基于 Chef 提供的 vagrant 的开发环境 我使用 Apache 使用 Chef 创建了一个环境 并且可以通过端口转发从我的主机访问 Web 服务器 我想让我的流浪盒包含多个虚拟主机 并且通过共享文件夹 我将定义不
  • 如何让 Ohai 插件生成 ['etc']['passwd']?

    我已将 Chef 客户端从14 0 to 15 3 14但每当我在我的节点 macOS Mojave 上执行 Chef client 时 就会出现问题 客户端输出是 undefined method for nil NilClass Coo
  • 如何在 Chef LWRP 定义中实现动态属性默认值

    我希望能够用 3 个参数来定义一个轻量级资源 其中两个是基本 基本参数 第三个是这两个参数的组合 我还想提供自定义第三个参数的可能性 例如 如何修改以下代码以实现上述行为full name属性 资源定义 actions install at
  • 如何获取 RightScale 厨师食谱中正在运行的食谱的完整路径?

    从我当前正在执行的食谱食谱中 我想访问它在我的执行机器上的 当前 位置 我需要它来访问它的缓存目录结构 我有一种感觉它位于 node 内部的某个地方 但我根本找不到有关其结构的任何文档 有什么建议吗 Thanks 刚刚通过检查 run co
  • 拆分字符串以仅获取前 5 个字符

    我想去那个地点 var log src ap kernelmodule 10 001 100 但看起来我的代码必须处理 ap kernelmodule 10 002 100 ap kernelmodule 10 003 101 等 我想使用
  • Vagrant + Chef:配置错误“虚拟机上缺少 Chef 所需的共享文件夹。”

    我已经使用 Chef library Chef 安装了 Vagrant Virtualbox 当我做vagrant up第一次 食谱被正确加载 但是 当我事后进行配置时 无论是vagrant provision vagrant reload
  • Chef - 使用动态变量创建模板?

    我在厨师食谱上遇到了一些挑战 我是厨师新手 所以请耐心等待 第 1 步 我的厨师食谱安装 Ruby Passenger 然后与 Nginx 一起编译 Passenger nginx 模块 Install passenger and ngin

随机推荐

  • Inno Setup RegKey存在于64位系统上

    我使用 Inno Setup 创建了一个安装程序 并想使用 Pascal Script 查询注册表 if RegKeyExists HKEY LOCAL MACHINE SOFTWARE Classes Installer UpgradeC
  • 如何在 Flutter 中获取“Ap​​ps Instance Id”

    我想设置Firebase 应用内消息传递在我的扑动应用程序上 首先 它需要FirebaseInstanceId正如所解释的here 这样我就可以测试向我的设备发送消息 然而该文档并没有详细说明如何在 Android 上获取它 尤其是在 fl
  • 删除级联时的 MongoDB DBRef

    MongoDB 有没有办法让外键具有 ON DELETE CASCADE 功能 我知道您可以使用 DBRef 作为一种外键 但是当删除引用指向的集合中的项目时 引用将返回 null 但我希望引用所属的项目被删除 我该怎么做呢 或者我每次删除
  • 错误 1114 (HY000):表“XXX”已满

    我知道这个问题以前被问过 但似乎没有任何帮助 我在 2 3 天前遇到了这个问题 询问服务器支持 他们告诉我必须将 mysql 从 var 移动到 home 那里是我所有的磁盘空间 这就是我所做的 然后我运行插入 一切都很顺利 直到今天 当我
  • 无法在 PDF 中保存阿拉伯语单词 - PDFBox Java

    正在尝试保存Arabic可编辑 PDF 中的单词 它工作得很好English但是当我使用阿拉伯语单词时 我遇到了这个异常 java lang IllegalArgumentException U 0627 在此字体 Helvetica 编码
  • ASP.Net MVC 3.0 Ajax.BeginForm 正在重定向到页面?

    在 ASP Net MVC 3 0 中我使用 Ajax Beginform 并点击 JsonResult 表单成功后我将调用 jQuery 函数 但由于某种原因我的表单重定向到 JsonAction my View using Ajax B
  • Delphi XE中占用大量内存的TStringList对象

    我正在开发一个模拟程序 该程序首先要做的事情之一是读取一个大文件 28 MB 大约 79 000 行 解析每一行 大约 150 个字段 为该对象创建一个类 并将其添加到 TStringList 它还读取另一个文件 该文件在运行期间添加更多对
  • Volley 库请求队列的最大大小是多少

    我在用VolleyAndroid 中的库 我想知道允许使用的队列的最大大小是多少Volley图书馆 我没有发现与此相关的任何内容 据我所知 您需要将网络请求添加到队列中 但我不知道可以将其并行队列的最大大小是多少 RequestQueue
  • MySQL 索引减慢查询速度

    MySQL Server version 5 0 95 Tables All InnoDB 我遇到 MySQL 数据库查询问题 基本上我发现如果我索引一个特定的 varchar 50 字段tag name 我的查询比不索引字段花费的时间更长
  • 如何限制python上的用户输入长度?

    amt float input Please enter the amount to make change for 我希望用户输入美元金额 因此允许 5 个字符 00 00 有没有办法限制它 以便不允许他们输入超过 5 个字符 我不想要这
  • 从 Java 字符串末尾删除行尾字符

    我有一个字符串 我想仅使用 Java 从字符串的最末尾删除行尾字符 foo r nbar r nhello r nworld r n 我想成为 foo r nbar r nhello r nworld 这个问题与问题类似 但不一样59367
  • 错误 C2797:成员初始值设定项列表内的列表初始化

    我当时正在看MVA 的 C 教程我下面提到的代码是由凯特而不是我编写的 然而 她似乎在编译时没有显示任何错误 但在我的例子中 我收到以下错误 错误 1 错误 C2797 NamedRectangle name 列表初始化 内部成员初始值设定
  • AttributeError:使用自定义生成器在 Keras 模型上调用 fit 时,“tuple”对象没有属性“rank”

    我想构建一个具有两个输入的神经网络 用于图像数据和数字数据 所以我为此编写了自定义数据生成器 这train and validation数据框包含 11 列 image name 图像的路径 9个数字特征 target 项目的类 最后一列
  • 如何在Golang中使用COM(组件对象模型)

    我有一个 Windows DLL XA Session dll 文件 但我不知道如何在 golang 中使用它 这是DLL Viewer图片 我想使用ConnectServerCOM 方法 这是我的代码 package main impor
  • 使用对象解构赋值时,为什么属性“name”会转换为字符串? [复制]

    这个问题在这里已经有答案了 Given let obj name 1 console log typeof obj name obj name number 1 Why is name使用时将标识符强制转换为字符串var在对象解构赋值时 l
  • 如何检查文件是否正在被其他应用程序使用?

    我需要处理一个视频文件 并且需要在打开该文件之前完成该文件 因此 我需要在处理文件之前检查文件是否已打开 但已被另一个进程打开 知道如何检查吗 我正在使用Linux 如果没有任何额外的宝石 一个稍微浪费的方法可能是 if x lsof F
  • 使用 DateTime.TryParse() 检查多种日期格式

    我正在使用一种方法来验证文本框 public bool ValidateDateTimeTextBoxes params TextBox textBoxes DateTime value DateTime Today string date
  • 如果该行中的第一列为 null,实体框架将返回 null

    我在实体框架模型中看到了奇怪的行为 我有一个如下所示的查询 var rows from alarm in context Alarms join temp in context ListDetails on alarm ListDetail
  • 如何使用 Azure 函数 Node.js 读取 Json 文件

    我创建了一个Azure时间触发器函数 我想和他一起读取一个Json文件 我确实安装了 read json 和 jsonfile 软件包并尝试了两者 但它不起作用 这是一个示例函数 module exports function contex
  • 如何在 Chef 中扩展轻量级提供程序

    我正在创建一堆不同的 Chef 提供程序来部署不同类型的应用程序 厨师的文档扩展轻量级提供程序表明这是可能的 但实际上并没有说明要做什么 该页面表明也许可以调用mixin是需要的 但我不知道我的代码在下面的文件中应该有什么结构 librar