我需要将几个git存储库克隆到单独的文件夹中(即/var/www/repo_name
)。
在我看来,我可以这样做:
git node['git_folder'] do
repository node['git_repository']
reference "master"
action :sync
user "username"
end
但是我怎样才能为角色中的一个食谱赋予几个属性?我可以以某种方式使用数据包满足我的需求吗?有什么不同的方式吗?
答案 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"
}
属性id
,destination
和url
是必需的。如果省略revision
,user
或action
,则会在配方中使用默认值:
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中的循环,除非菜谱被驱动(来自数据库?),否则我很不情愿。我喜欢在我的厨师食谱中明确表达意图。