厨师食谱克隆几个git回购到单独的文件夹

时间:2014-08-04 11:56:58

标签: chef

我需要将几个git存储库克隆到单独的文件夹中(即/var/www/repo_name)。 在我看来,我可以这样做:

git node['git_folder'] do 
  repository node['git_repository']
  reference "master"
  action :sync
  user "username"
end

但是我怎样才能为角色中的一个食谱赋予几个属性?我可以以某种方式使用数据包满足我的需求吗?有什么不同的方式吗?

2 个答案:

答案 0 :(得分:2)

以下是使用数据包实现目标的方法:

假设您拥有以下数据包结构:

data_bags
  git_repos
    repo_1.json
    repo_2.json

假设您有以下数据包结构:

{
  "id": "repo_1",
  "destination": "/var/www/repo_1",
  "url": "https://repo.to/clone.git,
  "revision": "master",
  "user": "username",
  "action": "sync"
}

属性iddestinationurl是必需的。如果省略revisionuseraction,则会在配方中使用默认值:

data_bag('git_repos').each do |name|
  repo = data_bag_item('git_repos', name)

  git repo['destination'] do 
    repository repo['url']
    reference  repo['revision'] || 'master'
    user       repo['user'] || 'username'
    action     repo['action'] ? repo['action'].to_sym : :sync
  end
end

正如您所看到的,您可能在此实例中使用数据包,但我不清楚为什么您会这样做。在我看来,这种方法远不那么直观,而且在调试过程中难以推理。

答案 1 :(得分:0)

配方包含资源声明,因此只需声明多个资源:

git "/var/www/repo1" do
  repository https://github.com/myname/repo1.git
  action :checkout
end

git "/var/www/repo2" do
  repository https://github.com/myname/repo2.git
  action :checkout
end

git "/var/www/repo3" do
  repository https://github.com/myname/repo3.git
  action :checkout
end

有些人喜欢ruby中的循环,除非菜谱被驱动(来自数据库?),否则我很不情愿。我喜欢在我的厨师食谱中明确表达意图。