如何使用Chef LWRP指定GIT Branch

时间:2015-08-14 04:33:37

标签: chef git-branch cookbook recipe lwrp

我们真正想要的是部署LWRP能够指定GIT的分支。理想情况下,这是从环境中获得的。

我们称之为:

my_deploy 'install my-client-portal' do
       repo 'https://hqdevgit01.my.lan/sites/my-client-portal.git'
       destination '/var/sites/my-client-portal'
 action :installNodeFromGit
        branch node[:my_deploy][:branch_name]
end

上面的分支不起作用..

LWRP资源

actions :installNodeFromGit

default_action :installNodeFromGit if defined?(default_action)

attribute :repo, :kind_of => String, :required => true
attribute :destination, :kind_of => String, :required => true
attribute :branch, :kind_of => String, :required => false, :default => 'master'

LWRP提供商

use_inline_resources

action :installNodeFromGit do

    converge_by("Installing.") do
      resp = install
      @new_resource.updated_by_last_action(resp)  
    end

end

def load_current_resource

  @current_resource = Chef::Resource::MyDeploy.new(@new_resource.name)
  @current_resource.repo(@new_resource.repo)
  @current_resource.destination(@new_resource.destination)
  @current_resource.branch(@new_resource.branch)

end

def install
    ENV['GIT_SSL_NO_VERIFY']="true"

    directory new_resource.destination do
        owner 'root'
        group 'root'
        mode '0755'
         action :create
       recursive true
    end

    git new_resource.destination do
         repository new_resource.repo
         action :sync
         revision new_resource.branch
    end

    if new_resource.destination
       path = new_resource.destination
      cmd  = "npm install"
   execute "npm install at #{path}" do
              cwd path
                  command cmd
         end
    end
end

1 个答案:

答案 0 :(得分:0)

问题在于您使用的是LWRP(您必须已在Chef环境中使用),然后希望将其作为一个或多个其他GIT分支运行(可能未在Chef环境中加载)。

如果您正确设置分支,则可以将每个分支包含在不同的食谱中(有关规范和分支的详细信息,请参阅Berkshelf或Librarian的文档。)例如,您可能有这样的berkshelf行:

cookbook "mycookbook", git: "https://github.com/my_git/mycookbook.git", branch: "master"
cookbook "mycookbook_branch1", git: "https://github.com/my_git/mycookbook.git", branch: "branch1"
# etc

我认为分支烹饪书必须在内部具有这些独特的名称(例如" mycookbook_branch1"。)它很麻烦但是如果你在Chef环境中使每个分支都可访问,那么你可能有一个争取选择所需(分支)资源的机会。

显然我不知道细节,但从表面上看,在主分支中创建每个可能的资源(具有不同的名称)并在食谱中选择正确的资源似乎更简单。 如果真的变得非干,你可以随时提取模块等。