扩展Chef 12资源(Ruby)

时间:2018-07-06 13:09:29

标签: ruby chef aws-opsworks

我正在将Amazon Opsworks与Chef 12一起使用。 它带有一个名为deploy的内置资源(已在厨师14中删除)。

部署的问题是我需要自定义release_slug

当前版本的发布路径如下:

/ srv / www / development / releases / 20180706123524

但是我需要我的建筑编号

/ srv / www / development / releases / 199

所以我想扩展Deploy,并用我的自定义ID替换release_slug(20180706123524)。 我可以在Chef资料来源中看到,这正是他们使用带有时间戳的部署所做的:https://github.com/chef/chef/blob/12.5-stable/lib/chef/provider/deploy/timestamped.rb

我在https://stackoverflow.com/questions/16114469/how-to-extend-a-lightweight-provider-in-chef#=

处发现了类似的stackoverflow问题

这是我的食谱中/ libraries下的内容:

deploy_slug.rb:

class Chef
    class Resource::DeploySlug < Resource::DeployRevision

        def initialize(name, run_context = nil)
            super
            @resource_name = :deploy_slug
        end
    end
end

在尝试修改release_slug之前,我只希望部署使用我的自定义资源实际运行。 在我的食谱中,我尝试使用deploy_slug来调用它。

这是我得到的错误:

* deploy_slug[/srv/www/development] action deploy
================================================================================
Error executing action `deploy` on resource 'deploy_slug[/srv/www/development]'
================================================================================
Chef::Exceptions::ProviderNotFound

我在这里想念什么?

1 个答案:

答案 0 :(得分:0)

首先:甚至不支持此功能。 您不应这样做,这是个坏主意。该资源已从Chef中删除,特别是因为它不好用。请使用简单的git资源。

也就是说,问题在于您还需要继承Provider::Deploy::Revision并通过provides :deploy_slug将其映射到新资源。