Chef infra Chef recipe将多个git repo克隆到单独的文件夹

Chef infra Chef recipe将多个git repo克隆到单独的文件夹,chef-infra,Chef Infra,我需要将几个git存储库克隆到单独的文件夹中(即/var/www/repo_name)。 在我看来,我可以做到这一点: git节点['git\u folder']do 存储库节点['git_repository'] 参考“主机” 行动:同步 用户“用户名” 结束 但是我如何才能为角色中的一个配方赋予多个属性呢?。我能用数据包满足我的需要吗?有什么不同的方法吗?配方包含资源声明,所以只需声明多个资源: git "/var/www/repo1" do repository https://gi

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

git节点['git\u folder']do
存储库节点['git_repository']
参考“主机”
行动:同步
用户“用户名”
结束

但是我如何才能为角色中的一个配方赋予多个属性呢?。我能用数据包满足我的需要吗?有什么不同的方法吗?

配方包含资源声明,所以只需声明多个资源:

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中的循环,我不愿意,除非是从数据库驱动的。我喜欢在我的厨师食谱中有明确的意图陈述。

以下是您如何使用数据包来完成它:

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

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"
}
假设您具有以下数据包项目结构:

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"
}
属性
id
destination
url
是必需的。如果省略了
修订版
用户
操作
,则配方中将使用默认值:

data_bag('git_repos')。每个do|name|
repo=数据包项目('git\U repo',名称)
吉特回购['destination']do
存储库repo['url']
参考回购协议[“修订版”]| |“主版”
用户repo['user']| |'username'
行动回购[“行动”]?repo['action'].to_sym::sync
结束
结束

如您所见,在这种情况下,您可以使用数据包,但我不清楚您为什么要这样做。在我看来,这种方法没有那么直观,在调试过程中更难推理。

Thx谢谢您的回复。此配方将在一组服务器中使用,并且在每台服务器中都会有不同的属性。。在我看来,在users::sysadmins recipe do中这样做会更好。我已经做了一个类似于您的配方,但我只是好奇,我是否可以在这里使用数据包。@Blasterdick看起来像Seth提供了一个数据包示例。还有一个小问题。。如果我需要按项目名称对数据包项进行分组,然后为配方指定一个属性,比如节点['git-clone']['project'],那么如何将其放入配方中?。。提前谢谢。@Blasterdick请在不同的帖子上再问一个问题。