Fix git repository ownership
[chef.git] / cookbooks / git / recipes / server.rb
1 #
2 # Cookbook Name:: git
3 # Recipe:: server
4 #
5 # Copyright 2011, OpenStreetMap Foundation
6 #
7 # Licensed under the Apache License, Version 2.0 (the "License");
8 # you may not use this file except in compliance with the License.
9 # You may obtain a copy of the License at
10 #
11 #     http://www.apache.org/licenses/LICENSE-2.0
12 #
13 # Unless required by applicable law or agreed to in writing, software
14 # distributed under the License is distributed on an "AS IS" BASIS,
15 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 # See the License for the specific language governing permissions and
17 # limitations under the License.
18 #
19
20 include_recipe "networking"
21
22 git_directory = node[:git][:directory]
23
24 directory git_directory do
25   owner node[:git][:user]
26   group node[:git][:group]
27   mode 02775
28 end
29
30 if node[:git][:allowed_nodes]
31   search(:node, node[:git][:allowed_nodes]).each do |n|
32     n.interfaces(:role => :external).each do |interface|
33       firewall_rule "accept-git" do
34         action :accept
35         family interface[:family]
36         source "#{interface[:zone]}:#{interface[:address]}"
37         dest "fw"
38         proto "tcp:syn"
39         dest_ports "git"
40         source_ports "1024:"
41       end
42     end
43   end
44 else
45   firewall_rule "accept-git" do
46     action :accept
47     source "net"
48     dest "fw"
49     proto "tcp:syn"
50     dest_ports "git"
51     source_ports "1024:"
52   end
53 end
54
55 Dir.new(git_directory).select { |name| name =~ /\.git$/ }.each do |repository|
56   template "#{git_directory}/#{repository}/hooks/post-update" do
57     source "post-update.erb"
58     owner "root"
59     group node[:git][:group]
60     mode 0755
61   end
62
63   if repository != "dns.git"
64     template "#{git_directory}/#{repository}/hooks/post-receive" do
65       source "post-receive.erb"
66       owner "root"
67       group node[:git][:group]
68       mode 0755
69       variables :repository => "#{git_directory}/#{repository}"
70     end
71   end
72 end
73
74 template "/etc/cron.daily/git-backup" do
75   source "backup.cron.erb"
76   owner "root"
77   group "root"
78   mode 0755
79 end