Move git and dns from shenron to sarel
authorTom Hughes <tom@compton.nu>
Sat, 23 Jun 2018 13:39:27 +0000 (14:39 +0100)
committerTom Hughes <tom@compton.nu>
Sat, 23 Jun 2018 14:28:57 +0000 (15:28 +0100)
20 files changed:
cookbooks/chef/recipes/repository.rb
cookbooks/chef/recipes/server.rb
cookbooks/chef/templates/default/apache.erb
cookbooks/chef/templates/default/post-receive.erb
cookbooks/chef/templates/default/repository-backup.cron.erb [deleted file]
cookbooks/dns/templates/default/dns-update.erb
cookbooks/git/attributes/default.rb
cookbooks/git/metadata.rb
cookbooks/git/recipes/server.rb
cookbooks/git/recipes/web.rb
cookbooks/git/templates/default/apache.erb
cookbooks/git/templates/default/backup.cron.erb
cookbooks/git/templates/default/gitweb.conf.erb
cookbooks/git/templates/default/post-receive.erb [deleted file]
cookbooks/git/templates/default/xinetd.erb [deleted file]
roles/chef-repository.rb
roles/dns.rb
roles/git.rb
roles/sarel.rb
roles/shenron.rb

index 02dc093..a358e78 100644 (file)
@@ -27,44 +27,42 @@ directory "/var/lib/chef" do
   mode 0o2775
 end
 
-git "/var/lib/chef" do
-  action :checkout
-  repository node[:chef][:repository]
-  revision "master"
-  user "chefrepo"
-  group "chefrepo"
-end
+%w[public private].each do |repository|
+  repository_directory = node[:chef][:"#{repository}_repository"]
 
-directory "/var/lib/chef/.chef" do
-  owner "chefrepo"
-  group "chefrepo"
-  mode 0o2775
-end
+  git "/var/lib/chef/#{repository}" do
+    action :checkout
+    repository repository_directory
+    revision "master"
+    user "chefrepo"
+    group "chefrepo"
+  end
 
-file "/var/lib/chef/.chef/client.pem" do
-  content keys["git"].join("\n")
-  owner "chefrepo"
-  group "chefrepo"
-  mode 0o660
-end
+  directory "/var/lib/chef/#{repository}/.chef" do
+    owner "chefrepo"
+    group "chefrepo"
+    mode 0o2775
+  end
 
-cookbook_file "/var/lib/chef/.chef/knife.rb" do
-  source "knife.rb"
-  owner "chefrepo"
-  group "chefrepo"
-  mode 0o660
-end
+  file "/var/lib/chef/#{repository}/.chef/client.pem" do
+    content keys["git"].join("\n")
+    owner "chefrepo"
+    group "chefrepo"
+    mode 0o660
+  end
 
-template "#{node[:chef][:repository]}/hooks/post-receive" do
-  source "post-receive.erb"
-  owner "chefrepo"
-  group "chefrepo"
-  mode 0o750
-end
+  cookbook_file "/var/lib/chef/#{repository}/.chef/knife.rb" do
+    source "knife.rb"
+    owner "chefrepo"
+    group "chefrepo"
+    mode 0o660
+  end
 
-template "/etc/cron.daily/chef-repository-backup" do
-  source "repository-backup.cron.erb"
-  owner "root"
-  group "root"
-  mode 0o755
+  template "#{repository_directory}/hooks/post-receive" do
+    source "post-receive.erb"
+    owner "chefrepo"
+    group "chefrepo"
+    mode 0o750
+    variables :repository => repository
+  end
 end
index 9581b1a..12c4384 100644 (file)
@@ -84,10 +84,6 @@ service "chef-server" do
   subscribes :restart, "systemd_service[chef-server]"
 end
 
-git_allowed = search(:node, node[:git][:allowed_nodes]).collect do |n|
-  n.ipaddresses(:role => :external)
-end.flatten
-
 apache_module "alias"
 apache_module "proxy_http"
 
@@ -99,7 +95,6 @@ end
 
 apache_site "chef.openstreetmap.org" do
   template "apache.erb"
-  variables :git_allowed => git_allowed
 end
 
 template "/etc/cron.daily/chef-server-backup" do
index 706ab5e..9d86d91 100644 (file)
        ProxyPassMatch ^/.*\.git/ !
        ProxyPass / https://<%= node[:fqdn] %>:4443/
        ProxyPreserveHost on
-
-       SetEnv GIT_PROJECT_ROOT /var/lib/git
-       SetEnv GIT_HTTP_EXPORT_ALL
-       ScriptAlias / /usr/lib/git-core/git-http-backend/
 </VirtualHost>
-
-<Directory /usr/lib/git-core>
-       Options ExecCGI
-       Require ip <%= @git_allowed.sort.join(" ") %>
-</Directory>
index 58646ff..b402265 100644 (file)
@@ -9,7 +9,7 @@ while read oldrev newrev refname
 do
   if [[ "$refname" = "refs/heads/master" ]]
   then
-    cd /var/lib/chef
+    cd /var/lib/chef/<%= @repository %>
 
     rm -f cookbooks/*/metadata.json(N)
 
diff --git a/cookbooks/chef/templates/default/repository-backup.cron.erb b/cookbooks/chef/templates/default/repository-backup.cron.erb
deleted file mode 100644 (file)
index f82e7b2..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/sh
-
-T=$(mktemp -d -t -p /var/tmp chef-repository.XXXXXXXXXX)
-D=$(date +%Y-%m-%d)
-B=chef-repository-$D.tar.gz
-
-ln -s /var/lib/git/chef.git $T/chef-repository-$D
-
-export GZIP="--rsyncable -9"
-
-nice tar --create --gzip --dereference --directory=$T --file=$T/$B chef-repository-$D
-nice rsync --preallocate --fuzzy $T/$B backup::backup
-
-rm -rf $T
index 162e787..93d2e1e 100755 (executable)
@@ -14,7 +14,7 @@ cd /var/lib/dns
 
 if [ ! -d .git ]
 then
-  git clone /var/lib/git/dns.git /var/lib/dns
+  git clone /var/lib/git/public/dns.git /var/lib/dns
 fi
 
 git pull -q
index ebb2bd7..2d89a83 100644 (file)
@@ -1,3 +1,5 @@
 default[:git][:directory] = "/var/lib/git"
-default[:git][:user] = "git"
-default[:git][:group] = "git"
+default[:git][:public_user] = "git"
+default[:git][:public_group] = "git"
+default[:git][:private_user] = "git"
+default[:git][:private_group] = "git"
index 704f327..8cf7f9a 100644 (file)
@@ -6,6 +6,5 @@ description       "Installs and configures git"
 long_description  IO.read(File.join(File.dirname(__FILE__), "README.md"))
 version           "1.0.0"
 supports          "ubuntu"
-depends           "networking"
-depends           "xinetd"
 depends           "apache"
+depends           "networking"
index 1d308bf..81b1695 100644 (file)
 #
 
 include_recipe "networking"
-include_recipe "xinetd"
 
 git_directory = node[:git][:directory]
 
 directory git_directory do
-  owner node[:git][:user]
-  group node[:git][:group]
+  owner "root"
+  group "root"
+  mode 0o775
+end
+
+directory "#{git_directory}/public" do
+  owner node[:git][:public_user]
+  group node[:git][:public_group]
   mode 0o2775
 end
 
-if node[:git][:allowed_nodes]
-  search(:node, node[:git][:allowed_nodes]).sort_by { |n| n[:fqdn] }.each do |n|
-    n.interfaces(:role => :external).each do |interface|
-      firewall_rule "accept-git" do
-        action :accept
-        family interface[:family]
-        source "#{interface[:zone]}:#{interface[:address]}"
-        dest "fw"
-        proto "tcp:syn"
-        dest_ports "git"
-        source_ports "1024:"
-      end
-    end
-  end
-else
-  firewall_rule "accept-git" do
-    action :accept
-    source "net"
-    dest "fw"
-    proto "tcp:syn"
-    dest_ports "git"
-    source_ports "1024:"
-  end
+directory "#{git_directory}/private" do
+  owner node[:git][:private_user]
+  group node[:git][:private_group]
+  mode 0o2775
 end
 
-Dir.new(git_directory).select { |name| name =~ /\.git$/ }.each do |repository|
-  template "#{git_directory}/#{repository}/hooks/post-update" do
+Dir.glob("#{git_directory}/*/*.git").each do |repository|
+  template "#{repository}/hooks/post-update" do
     source "post-update.erb"
     owner "root"
     group node[:git][:group]
     mode 0o755
   end
-
-  next unless node[:recipes].include?("trac") && repository != "dns.git" && repository != "chef.git"
-
-  template "#{git_directory}/#{repository}/hooks/post-receive" do
-    source "post-receive.erb"
-    owner "root"
-    group node[:git][:group]
-    mode 0o755
-    variables :repository => "#{git_directory}/#{repository}"
-  end
 end
 
 template "/etc/cron.daily/git-backup" do
@@ -78,11 +54,3 @@ template "/etc/cron.daily/git-backup" do
   group "root"
   mode 0o755
 end
-
-template "/etc/xinetd.d/git" do
-  source "xinetd.erb"
-  owner "root"
-  group "root"
-  mode 0o644
-  notifies :reload, "service[xinetd]"
-end
index 0d840bb..65333ef 100644 (file)
@@ -23,7 +23,7 @@ package "gitweb"
 
 apache_module "rewrite"
 
-git_directory = node[:git][:directory]
+git_site = node[:git][:host]
 
 template "/etc/gitweb.conf" do
   source "gitweb.conf.erb"
@@ -32,20 +32,31 @@ template "/etc/gitweb.conf" do
   mode 0o644
 end
 
-ssl_certificate node[:git][:host] do
-  domains [node[:git][:host]] + Array(node[:git][:aliases])
-  notifies :reload, "service[apache2]"
-end
-
-apache_site node[:git][:host] do
-  template "apache.erb"
-  directory git_directory
-  variables :aliases => Array(node[:git][:aliases])
+directory "/srv/#{git_site}" do
+  owner "root"
+  group "root"
+  mode 0o755
 end
 
-template "#{git_directory}/robots.txt" do
+template "/srv/#{git_site}/robots.txt" do
   source "robots.txt.erb"
   owner "root"
   group "root"
   mode 0o644
 end
+
+ssl_certificate git_site do
+  domains [git_site] + Array(node[:git][:aliases])
+  notifies :reload, "service[apache2]"
+end
+
+private_allowed = search(:node, node[:git][:private_nodes]).collect do |n|
+  n.ipaddresses(:role => :external)
+end.flatten
+
+apache_site git_site do
+  template "apache.erb"
+  directory "/srv/#{git_site}"
+  variables :aliases => Array(node[:git][:aliases]),
+            :private_allowed => private_allowed
+end
index c7f85c8..374ec2c 100644 (file)
         CustomLog /var/log/apache2/<%= @name %>-access.log combined
         ErrorLog /var/log/apache2/<%= @name %>-error.log
 
-        DocumentRoot <%= @directory %>
-        HeaderName HEADER
+        SetEnv GIT_PROJECT_ROOT /var/lib/git
+        SetEnv GIT_HTTP_EXPORT_ALL
+
+        ScriptAlias /public /usr/lib/git-core/git-http-backend/public
+        ScriptAlias /private /usr/lib/git-core/git-http-backend/private
         Alias /gitweb /usr/share/gitweb
         Alias /git /var/cache/git
-        ScriptAlias /gitweb.cgi /usr/lib/cgi-bin/gitweb.cgi
+        ScriptAlias / /usr/lib/cgi-bin/gitweb.cgi/
+
+        <Location />
+                  Require all granted
+        </Location>
 
-        RewriteEngine On
-        RewriteRule ^/$ /gitweb.cgi%{REQUEST_URI} [L,PT]
-        RewriteRule ^/(.*\.git/(?!/?(HEAD|info|objects|refs)).*)?$ /gitweb.cgi%{REQUEST_URI} [L,PT]
+        <Location /private>
+                  Require ip <%= @private_allowed.sort.join(" ") %>
+        </Location>
 </VirtualHost>
 
-<Directory <%= @directory %>>
-        Require all granted
+<Directory /usr/lib/git-core>
+        Options ExecCGI
 </Directory>
index ac2167b..5a9d012 100644 (file)
@@ -4,7 +4,7 @@
 
 T=$(mktemp -d -t -p /var/tmp git.XXXXXXXXXX)
 D=$(date +%Y-%m-%d)
-B=<%= node[:git][:backup] %>-$D.tar.gz
+B=git-$D.tar.gz
 
 ln -s /var/lib/git $T/git-$D
 
index b98c15a..5d2eb74 100644 (file)
@@ -1,7 +1,7 @@
 # DO NOT EDIT - This file is being maintained by Chef
 
 # path to git projects (<project>.git)
-$projectroot = "<%= node[:git][:directory] %>";
+$projectroot = "<%= node[:git][:directory] %>/public";
 
 # directory to use for temp files
 $git_temp = "/tmp";
@@ -31,4 +31,4 @@ our $javascript = "/gitweb/static/gitweb.js";
 $feature{'pathinfo'}{'default'} = [1];
 
 # define roots for cloning
-@git_base_url_list = qw(git://<%= node[:git][:host] %>);
+@git_base_url_list = qw(https://<%= node[:git][:host] %>/public);
diff --git a/cookbooks/git/templates/default/post-receive.erb b/cookbooks/git/templates/default/post-receive.erb
deleted file mode 100644 (file)
index 30ade27..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/zsh
-
-# DO NOT EDIT - This file is being maintained by Chef
-
-while read oldrev newrev refname
-do
-  if [[ "$refname" = "refs/heads/master" ]]
-  then
-    for rev in $(git rev-list ${oldrev}..${newrev})
-    do
-      sudo -u trac /usr/bin/trac-admin /var/lib/trac changeset added "<%= @repository %>" "${rev}"
-    done
-  fi
-done
diff --git a/cookbooks/git/templates/default/xinetd.erb b/cookbooks/git/templates/default/xinetd.erb
deleted file mode 100644 (file)
index 403c792..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-# DO NOT EDIT - This file is being maintained by Chef
-
-service git
-{
-       disable         = no
-       socket_type     = stream
-       wait            = no
-       user            = nobody
-       server          = /usr/lib/git-core/git-daemon
-       server_args     = --base-path=<%= node[:git][:directory] %> --export-all --syslog --inetd --verbose
-       log_on_failure  += USERID
-       flags           = ipv6
-}
index d551353..5112914 100644 (file)
@@ -25,7 +25,8 @@ default_attributes(
     }
   },
   :chef => {
-    :repository => "/var/lib/git/chef.git"
+    :public_repository => "/var/lib/git/public/chef.git",
+    :private_repository => "/var/lib/git/private/chef.git"
   }
 )
 
index 7a5e5a4..25ac17f 100644 (file)
@@ -3,7 +3,7 @@ description "Role applied to DNS management servers"
 
 default_attributes(
   :dns => {
-    :repository => "/var/lib/git/dns.git"
+    :repository => "/var/lib/git/public/dns.git"
   }
 )
 
index 09b95cb..31ad540 100644 (file)
@@ -4,6 +4,10 @@ description "Role applied to all git servers"
 default_attributes(
   :accounts => {
     :users => {
+      :bretth => {
+        :status => :user,
+        :shell => "/usr/bin/git-shell"
+      },
       :lonvia => {
         :status => :user,
         :shell => "/usr/bin/git-shell"
@@ -20,8 +24,7 @@ default_attributes(
   },
   :git => {
     :host => "git.openstreetmap.org",
-    :aliases => ["git.osm.org"],
-    :backup => "git"
+    :aliases => ["git.osm.org"]
   }
 )
 
index ab7c52a..b535374 100644 (file)
@@ -3,10 +3,9 @@ description "Master role applied to sarel"
 
 default_attributes(
   :git => {
-    :allowed_nodes => "fqdn:*",
-    :user => "chefrepo",
-    :group => "chefrepo",
-    :backup => "chef-git"
+    :private_user => "chefrepo",
+    :private_group => "chefrepo",
+    :private_nodes => "fqdn:*"
   },
   :networking => {
     :interfaces => {
@@ -33,6 +32,7 @@ run_list(
   "role[chef-server]",
   "role[chef-repository]",
   "role[letsencrypt]",
-  "recipe[git::server]",
+  "role[git]",
+  "role[dns]",
   "recipe[serverinfo]"
 )
index 42d25d9..9009c08 100644 (file)
@@ -2,14 +2,6 @@ name "shenron"
 description "Master role applied to shenron"
 
 default_attributes(
-  :accounts => {
-    :users => {
-      :bretth => {
-        :status => :user,
-        :shell => "/usr/bin/git-shell"
-      }
-    }
-  },
   :apache => {
     :mpm => "event",
     :event => {
@@ -69,14 +61,11 @@ run_list(
   "role[bytemark]",
   "role[mail]",
   "role[lists]",
-  "role[git]",
   "role[subversion]",
   "role[trac]",
   "role[osqa]",
   "role[irc]",
-  "role[dns]",
   "role[geodns]",
-  "role[chef-repository]",
   "recipe[blogs]",
   "recipe[openvpn]"
 )