如何覆盖octopus-deploy的超市厨师食谱的tentacle_install_location路径?

时间:2015-12-23 20:31:05

标签: chef chef-recipe cookbook octopus-deploy berkshelf

我目前的设置:

我正在制作一本食谱,将Octopus Deploy触角安装到我公司的标准VM上。我创建了一个名为“octopus-deploy-mk6”的新本地食谱。 “mk6”是我们公司的名称,我正在使用这个配方来定义我公司特定的安装要求。我在名为“octopus-deploy”的超市社区食谱中添加了Berksshelf依赖项。这是“octopus-deploy”的链接:

Octopus-deploy supermarket link

我通过 chef-repo / metadata.rb 文件中的berksshelf depend语句包含超市食谱:     

depends 'octopus-deploy', '~> 0.4.3'

我把它放在 chef-repo / cookbooks / octopus-deploy-mk6 / recipes / default.rb 文件中的食谱中(注意,我发现校验和在示例中不需要):


    octopus_deploy_tentacle 'Tentacle' do
      action :install
      version '3.1.5'
    end

当我执行“berks install”时,“berks更新”“刀菜谱上传octopus-deploy-mk6”命令,它很好地安装了Octopus Deploy Tentacle。食谱实际上超出了我的预期。感谢布伦特蒙塔古(如果你碰巧读到这篇文章)创建的食谱。

如果我没有正确设置此设置,请随时告诉我。我对Chef很新。

以下是问题:

我们安装Octopus Deploy触角的企业标准是将其安装在:“C:\ Program Files(x86)\ Octopus \ Tentacle”中,超市食谱将其安装在“C中:\ Program Files \ Octopus Deploy \ Tentacle“。虽然我个人喜欢超市食谱挑选的目录名称更好,但企业标准是把它放到x86目录和Octopus子目录中,我无法改变标准。 如何覆盖默认的触手安装位置?

这个问题的简单解决方案是使用“复制和粘贴重用”,只需将整个社区食谱复制到我的octopus-deploy-mk6食谱中,只需更改下面提到的一个文件即可。但是,我宁愿不这样做,以便我可以提供超市版本的未来更新。

这是我到目前为止调试的内容:

我注意到超市社区食谱在 octopus-deploy / libraries / tentacle.rb 文件中有以下代码:


  module OctopusDeploy
  # A container to hold the tentacle values instead of attributes
  module Tentacle
  ...
    def tentacle_install_location
      'C:\Program Files\Octopus Deploy\Tentacle'
    end

我在安装操作之前尝试过设置chef-repo / cookbooks / octopus-deploy-mk6 / recipes / default.rb文件:


    OctopusDeploy.Tentacle.tentacle_install_location = 'C:\Program Files (x86)\Octopus\Tentacle'

但它没有解决问题。我还尝试在chef-repo / cookbooks / octopus-deploy-mk6 / attributes / default.rb文件中添加一个属性,但它没有用。根据我的理解,这个属性文件方法只适用于覆盖其他cookbook设置的属性(不覆盖ruby方法/属性)。

对此有任何帮助表示赞赏。我是Chef的新手,在Stackoverflow或Google上找不到任何其他帖子来回答这个问题(我可能对Chef和Ruby来说太新了,无法知道要搜索的术语)。

1 个答案:

答案 0 :(得分:1)

所以对于简短的回答:"你不能"。

为了更详细地解释,我们必须看看如何使用该辅助方法。你可以通过猴子补丁来覆盖那个助手,语法会与你所拥有的不同,但它无论如何都不会有所帮助,所以让我们继续前进吧。该方法似乎仅在the provider code中使用了两次,并且两次都是为PowerShell代码的某些代码段设置cwd。该路径永远不会传递给安装程序,我可以告诉它必须是实际创建目录的内容。安装本身可能发生here。要更改实际安装目标,您需要将其置于该资源中的MSI安装选项中。我没有具体了解Octopus Deploy,但我猜你可以查找所需的msiexec标志来实现这一目标。不幸的是,由于这段代码是如何编写的,你必须分叉食谱以在那里进行更改。我建议让它使用资源属性,然后将其作为补丁提交回原始菜谱。