]> git.openstreetmap.org Git - chef.git/blob - cookbooks/git/recipes/server.rb
Sort git server firewall rules by node name
[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 include_recipe "xinetd"
22
23 git_directory = node[:git][:directory]
24
25 directory git_directory do
26   owner node[:git][:user]
27   group node[:git][:group]
28   mode 0o2775
29 end
30
31 if node[:git][:allowed_nodes]
32   search(:node, node[:git][:allowed_nodes]).sort_by { |n| n[:fqdn] }.each do |n|
33     n.interfaces(:role => :external).each do |interface|
34       firewall_rule "accept-git" do
35         action :accept
36         family interface[:family]
37         source "#{interface[:zone]}:#{interface[:address]}"
38         dest "fw"
39         proto "tcp:syn"
40         dest_ports "git"
41         source_ports "1024:"
42       end
43     end
44   end
45 else
46   firewall_rule "accept-git" do
47     action :accept
48     source "net"
49     dest "fw"
50     proto "tcp:syn"
51     dest_ports "git"
52     source_ports "1024:"
53   end
54 end
55
56 Dir.new(git_directory).select { |name| name =~ /\.git$/ }.each do |repository|
57   template "#{git_directory}/#{repository}/hooks/post-update" do
58     source "post-update.erb"
59     owner "root"
60     group node[:git][:group]
61     mode 0o755
62   end
63
64   next unless node[:recipes].include?("trac") && repository != "dns.git" && repository != "chef.git"
65
66   template "#{git_directory}/#{repository}/hooks/post-receive" do
67     source "post-receive.erb"
68     owner "root"
69     group node[:git][:group]
70     mode 0o755
71     variables :repository => "#{git_directory}/#{repository}"
72   end
73 end
74
75 template "/etc/cron.daily/git-backup" do
76   source "backup.cron.erb"
77   owner "root"
78   group "root"
79   mode 0o755
80 end
81
82 template "/etc/xinetd.d/git" do
83   source "xinetd.erb"
84   owner "root"
85   group "root"
86   mode 0o644
87   notifies :reload, "service[xinetd]"
88 end