diff options
29 files changed, 834 insertions, 0 deletions
| diff --git a/puppet/modules/git/.gitrepo b/puppet/modules/git/.gitrepo new file mode 100644 index 00000000..5b10e73e --- /dev/null +++ b/puppet/modules/git/.gitrepo @@ -0,0 +1,11 @@ +; DO NOT EDIT (unless you know what you are doing) +; +; This subdirectory is a git "subrepo", and this file is maintained by the +; git-subrepo command. See https://github.com/git-commands/git-subrepo#readme +; +[subrepo] +	remote = https://leap.se/git/puppet_git +	branch = master +	commit = ba5dd8d5c8e09d521ff49f1ebc753601e449f828 +	parent = 984375bab6546a7ef1e716402468a2f4cb6e1925 +	cmdver = 0.3.0 diff --git a/puppet/modules/git/files/config/CentOS/git-daemon b/puppet/modules/git/files/config/CentOS/git-daemon new file mode 100644 index 00000000..a9b208c2 --- /dev/null +++ b/puppet/modules/git/files/config/CentOS/git-daemon @@ -0,0 +1,26 @@ +# git-daemon config file + +# location of the lockfile +#LOCKFILE=/var/lock/subsys/git-daemon + +# which directory to server +#GITDIR=/srv/git + +# do we serve vhosts? +# setting this to yes assumes that you  +# have in $GITDIR per vhost to serve +# a subdirectory containing their repos. +# for example: +# - /srv/git/git.example.com +# - /srv/git/git.example.org +#GITVHOST=no + +# the user git-daemon should run with +#GITUSER=nobody + +# options for the daemon +#OPTIONS="--reuseaddr --verbose --detach" + +# location of the daemon +#GITDAEMON=/usr/bin/git-daemon + diff --git a/puppet/modules/git/files/config/CentOS/git-daemon.vhosts b/puppet/modules/git/files/config/CentOS/git-daemon.vhosts new file mode 100644 index 00000000..62bb9d4b --- /dev/null +++ b/puppet/modules/git/files/config/CentOS/git-daemon.vhosts @@ -0,0 +1,27 @@ +# git-daemon config file + +# location of the lockfile +#LOCKFILE=/var/lock/subsys/git-daemon + +# which directory to server +#GITDIR=/srv/git + +# do we serve vhosts? +# setting this to yes assumes that you  +# have in $GITDIR per vhost to serve +# a subdirectory containing their repos. +# for example: +# - /srv/git/git.example.com +# - /srv/git/git.example.org +#GITVHOST=no +GITVHOST=yes + +# the user git-daemon should run with +#GITUSER=nobody + +# options for the daemon +#OPTIONS="--reuseaddr --verbose --detach" + +# location of the daemon +#GITDAEMON=/usr/bin/git-daemon + diff --git a/puppet/modules/git/files/config/Debian/git-daemon b/puppet/modules/git/files/config/Debian/git-daemon new file mode 100644 index 00000000..b25e1e7f --- /dev/null +++ b/puppet/modules/git/files/config/Debian/git-daemon @@ -0,0 +1,22 @@ +# Defaults for the git-daemon initscript + +# Set to yes to start git-daemon +RUN=yes + +# Set to the user and group git-daemon should run as +USER=nobody +GROUP=nogroup + +# Set the base path and the directory where the repositories are. +REPOSITORIES="/srv/git" + +# Provide a way to have custom setup. +# +# Note, when ADVANCED_OPTS is defined the REPOSITORIES setting is ignored, +# so take good care to specify exactly what git-daemon have to do. +# +# Here is an example from the man page: +#ADVANCED_OPTS="--verbose --export-all \ +#               --interpolated-path=/pub/%IP/%D \ +#               /pub/192.168.1.200/software \ +#               /pub/10.10.220.23/software" diff --git a/puppet/modules/git/files/init.d/CentOS/git-daemon b/puppet/modules/git/files/init.d/CentOS/git-daemon new file mode 100644 index 00000000..aed20756 --- /dev/null +++ b/puppet/modules/git/files/init.d/CentOS/git-daemon @@ -0,0 +1,75 @@ +#!/bin/bash +# puppet        Init script for running the git-daemon +# +# Author:       Marcel Haerry <mh+rpms(at)immerda.ch> +# +# chkconfig: - 98 02 +# +# description: Enables the git-daemon to serve various directories. By default it serves /srv/git +# processname: git-daemon +# config: /etc/sysconfig/git-daemon + +PATH=/usr/bin:/sbin:/bin:/usr/sbin +export PATH + +[ -f /etc/sysconfig/git-daemon ] && . /etc/sysconfig/git-daemon +lockfile=${LOCKFILE-/var/lock/subsys/git-daemon} +gitdir=${GITDIR-/srv/git} +gitvhost=${GITVHOST-no} +user=${GITUSER-nobody} +options=${OPTIONS-"--reuseaddr --verbose --detach"} +gitdaemon=${GITDAEMON-/usr/bin/git-daemon} +RETVAL=0 + +gitoptions="--user=${user} ${options}" +if [ $gitvhost = yes ]; then +	gitoptions="${gitoptions} --interpolated-path=${gitdir}/%H/%D" +else +	gitoptions="${gitoptions} --base-path=${gitdir}" +fi + +# Source function library. +. /etc/rc.d/init.d/functions + +start() { +    echo -n $"Starting git-daemon: " +    daemon $gitdaemon $gitoptions +    RETVAL=$? +    echo +    [ $RETVAL = 0 ] && touch ${lockfile} +    return $RETVAL +} + +stop() { +    echo -n $"Stopping git-daemon: " +    killproc $gitdaemon +    RETVAL=$? +    echo +    [ $RETVAL = 0 ] && rm -f ${lockfile} +} + +restart() { +    stop +    start +} + +case "$1" in +  start) +    start +    ;; +  stop)  +    stop +    ;; +  restart) +    restart +    ;; +  status) +    status $gitdaemon +    RETVAL=$? +    ;; +  *) +    echo $"Usage: $0 {start|stop|status|restart}" +    exit 1 +esac + +exit $RETVAL diff --git a/puppet/modules/git/files/init.d/Debian/git-daemon b/puppet/modules/git/files/init.d/Debian/git-daemon new file mode 100644 index 00000000..ab57c4a1 --- /dev/null +++ b/puppet/modules/git/files/init.d/Debian/git-daemon @@ -0,0 +1,151 @@ +#! /bin/sh +### BEGIN INIT INFO +# Provides:          git-daemon +# Required-Start:    $network $remote_fs $syslog +# Required-Stop:     $network $remote_fs $syslog +# Default-Start:     2 3 4 5 +# Default-Stop:      0 1 6 +# Short-Description: git-daemon service +# Description:       git-daemon makes git repositories available via the git +#                    protocol. +### END INIT INFO + +# Author: Antonio Ospite <ospite@studenti.unina.it> +# +# Please remove the "Author" lines above and replace them +# with your own name if you copy and modify this script. + +# Do NOT "set -e" + +# PATH should only include /usr/* if it runs after the mountnfs.sh script +PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/lib/git-core +DESC="git-daemon service" +NAME=git-daemon +DAEMON=/usr/lib/git-core/$NAME +PIDFILE=/var/run/$NAME.pid +SCRIPTNAME=/etc/init.d/$NAME + +# Exit if the package is not installed +[ -x "$DAEMON" ] || exit 0 + +# Fallback options values, we use these when +# the /etc/default/git-daemon file does not exist +RUN=no +USER=git +GROUP=git +REPOSITORIES="/srv/git/" + +# Read configuration variable file if it is present +[ -r /etc/default/$NAME ] && . /etc/default/$NAME + +# If ADVANCED_OPTS is empty, use a default setting +if [ "x$ADVANCED_OPTS" == "x" ]; +then +  ADVANCED_OPTS="--base-path=$REPOSITORIES $REPOSITORIES" +fi + +DAEMON_ARGS="--syslog --reuseaddr \ +             --user=$USER --group=$GROUP \ +             $ADVANCED_OPTS" + + +# Load the VERBOSE setting and other rcS variables +. /lib/init/vars.sh + +# Define LSB log_* functions. +# Depend on lsb-base (>= 3.0-6) to ensure that this file is present. +. /lib/lsb/init-functions + +# +# Function that starts the daemon/service +# +do_start() +{ +	# Return +	#   0 if daemon has been started +	#   1 if daemon was already running +	#   2 if daemon could not be started +	start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ +		|| return 1 +	start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --background --make-pidfile -- \ +		$DAEMON_ARGS \ +		|| return 2 + +  return 0 +} + +# +# Function that stops the daemon/service +# +do_stop() +{ +	# Return +	#   0 if daemon has been stopped +	#   1 if daemon was already stopped +	#   2 if daemon could not be stopped +	#   other if a failure occurred +	start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME +	RETVAL="$?" +	[ "$RETVAL" = 2 ] && return 2 +	# Wait for children to finish too if this is a daemon that forks +	# and if the daemon is only ever run from this initscript. +	# If the above conditions are not satisfied then add some other code +	# that waits for the process to drop all resources that could be +	# needed by services started subsequently.  A last resort is to +	# sleep for some time. +	start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON +	[ "$?" = 2 ] && return 2 +	# Many daemons don't delete their pidfiles when they exit. +	rm -f $PIDFILE +	return "$RETVAL" +} + +case "$1" in +  start) +	[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" +	do_start +	case "$?" in +		0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; +		2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; +	esac +	;; +  stop) +	[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" +	do_stop +	case "$?" in +		0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; +		2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; +	esac +	;; +  status) +       status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? +       ;; +  restart|force-reload) +	# +	# If the "reload" option is implemented then remove the +	# 'force-reload' alias +	# +	log_daemon_msg "Restarting $DESC" "$NAME" +	do_stop +	case "$?" in +	  0|1) +		do_start +		case "$?" in +			0) log_end_msg 0 ;; +			1) log_end_msg 1 ;; # Old process is still running +			*) log_end_msg 1 ;; # Failed to start +		esac +		;; +	  *) +	  	# Failed to stop +		log_end_msg 1 +		;; +	esac +	;; +  *) +	echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 +	exit 3 +	;; +esac + +: diff --git a/puppet/modules/git/files/web/gitweb.conf b/puppet/modules/git/files/web/gitweb.conf new file mode 100644 index 00000000..88226aaa --- /dev/null +++ b/puppet/modules/git/files/web/gitweb.conf @@ -0,0 +1,53 @@ +# The gitweb config file is a fragment of perl code. You can set variables +# using "our $variable = value"; text from "#" character until the end of a +# line is ignored. See perlsyn(1) man page for details. +# +# See /usr/share/doc/gitweb-*/README and /usr/share/doc/gitweb-*/INSTALL for +# more details and available configuration variables. + +# Set the path to git projects.  This is an absolute filesystem path which will +# be prepended to the project path. +#our $projectroot = "/var/lib/git"; + +# Set the list of git base URLs used for URL to where fetch project from, i.e. +# the full URL is "$git_base_url/$project". By default this is empty +#our @git_base_url_list = qw(git://git.example.com +#                            ssh://git.example.com/var/lib/git); + +# Enable the 'blame' blob view, showing the last commit that modified +# each line in the file. This can be very CPU-intensive. Disabled by default +#$feature{'blame'}{'default'} = [1]; +# +# Allow projects to override the default setting via git config file. +# Example: gitweb.blame = 0|1; +#$feature{'blame'}{'override'} = 1; + +# Disable the 'snapshot' link, providing a compressed archive of any tree. This +# can potentially generate high traffic if you have large project. Enabled for +# .tar.gz snapshots by default. +# +# Value is a list of formats defined in %known_snapshot_formats that you wish +# to offer. +#$feature{'snapshot'}{'default'} = []; +# +# Allow projects to override the default setting via git config file. +# Example: gitweb.snapshot = tbz2,zip; (use "none" to disable) +#$feature{'snapshot'}{'override'} = 1; + +# Disable grep search, which will list the files in currently selected tree +# containing the given string. This can be potentially CPU-intensive, of +# course. Enabled by default. +#$feature{'grep'}{'default'} = [0]; +# +# Allow projects to override the default setting via git config file. +# Example: gitweb.grep = 0|1; +#$feature{'grep'}{'override'} = 1; + +# Disable the pickaxe search, which will list the commits that modified a given +# string in a file. This can be practical and quite faster alternative to +# 'blame', but still potentially CPU-intensive. Enabled by default. +#$feature{'pickaxe'}{'default'} = [0]; +# +# Allow projects to override the default setting via git config file. +# Example: gitweb.pickaxe = 0|1; +#$feature{'pickaxe'}{'override'} = 1; diff --git a/puppet/modules/git/files/xinetd.d/git b/puppet/modules/git/files/xinetd.d/git new file mode 100644 index 00000000..64c53e8b --- /dev/null +++ b/puppet/modules/git/files/xinetd.d/git @@ -0,0 +1,16 @@ +# default: off +# description: The git dæmon allows git repositories to be exported using +#	the git:// protocol. + +service git +{ +        disable		= no +        socket_type     = stream +        wait            = no +        user            = nobody +        server          = /usr/bin/git-daemon +        server_args     = --base-path=/srv/git --export-all --user-path=public_git --syslog --inetd --verbose +        log_on_failure  += USERID +# xinetd doesn't do this by default. bug #195265 +        flags		= IPv6 +} diff --git a/puppet/modules/git/files/xinetd.d/git.disabled b/puppet/modules/git/files/xinetd.d/git.disabled new file mode 100644 index 00000000..dcfae918 --- /dev/null +++ b/puppet/modules/git/files/xinetd.d/git.disabled @@ -0,0 +1,16 @@ +# default: off +# description: The git dæmon allows git repositories to be exported using +#	the git:// protocol. + +service git +{ +        disable		= yes +        socket_type     = stream +        wait            = no +        user            = nobody +        server          = /usr/bin/git-daemon +        server_args     = --base-path=/srv/git --export-all --user-path=public_git --syslog --inetd --verbose +        log_on_failure  += USERID +# xinetd doesn't do this by default. bug #195265 +        flags		= IPv6 +} diff --git a/puppet/modules/git/files/xinetd.d/git.vhosts b/puppet/modules/git/files/xinetd.d/git.vhosts new file mode 100644 index 00000000..98938206 --- /dev/null +++ b/puppet/modules/git/files/xinetd.d/git.vhosts @@ -0,0 +1,16 @@ +# default: off +# description: The git dæmon allows git repositories to be exported using +#	the git:// protocol. + +service git +{ +        disable		= no +        socket_type     = stream +        wait            = no +        user            = nobody +        server          = /usr/bin/git-daemon +        server_args     = --interpolated-path=/srv/git/%H/%D --syslog --inetd --verbose +        log_on_failure  += USERID +# xinetd doesn't do this by default. bug #195265 +        flags		= IPv6 +} diff --git a/puppet/modules/git/manifests/base.pp b/puppet/modules/git/manifests/base.pp new file mode 100644 index 00000000..e6188390 --- /dev/null +++ b/puppet/modules/git/manifests/base.pp @@ -0,0 +1,7 @@ +class git::base { + +  package { 'git': +    ensure => present, +    alias => 'git', +  } +} diff --git a/puppet/modules/git/manifests/centos.pp b/puppet/modules/git/manifests/centos.pp new file mode 100644 index 00000000..96344756 --- /dev/null +++ b/puppet/modules/git/manifests/centos.pp @@ -0,0 +1,2 @@ +class git::centos inherits git::base { +} diff --git a/puppet/modules/git/manifests/changes.pp b/puppet/modules/git/manifests/changes.pp new file mode 100644 index 00000000..71112051 --- /dev/null +++ b/puppet/modules/git/manifests/changes.pp @@ -0,0 +1,33 @@ +# Usage +# git::changes { name: +#   cwd    =>  "/path/to/git/" +#   user   =>  "me", +#   ensure =>  {*assume-unchanged*, tracked} +# } +# + +define git::changes ( $cwd, $user, $ensure='assume-unchanged' ) { + +  case $ensure { +    default: { err ( "unknown ensure value '${ensure}'" ) } + +    assume-unchanged: { +      exec { "assume-unchanged ${name}": +        command => "/usr/bin/git update-index --assume-unchanged ${name}", +        cwd     => $cwd, +        user    => $user, +        unless  => "/usr/bin/git ls-files -v | grep '^[ch] ${name}'", +      } +    } + +    tracked: { +      exec { "track changes ${name}": +        command => "/usr/bin/git update-index --no-assume-unchanged ${name}", +        cwd     => $cwd, +        user    => $user, +        onlyif  => "/usr/bin/git ls-files -v | grep '^[ch] ${name}'", +      } +    } +  } +} + diff --git a/puppet/modules/git/manifests/clone.pp b/puppet/modules/git/manifests/clone.pp new file mode 100644 index 00000000..29f0b2b3 --- /dev/null +++ b/puppet/modules/git/manifests/clone.pp @@ -0,0 +1,60 @@ +# submodules: Whether we should initialize and update +#             submodules as well +#             Default: false +# clone_before: before which resources a cloning should +#               happen. This is releveant in combination +#               with submodules as the exec of submodules +#               requires the `cwd` and you might get a +#               dependency cycle if you manage $projectroot +#               somewhere else. +define git::clone( +  $ensure = present, +  $git_repo, +  $projectroot, +  $submodules = false, +  $clone_before = 'absent', +  $cloneddir_user='root', +  $cloneddir_group='0', +  $cloneddir_restrict_mode=true +){ +  case $ensure { +    absent: { +      exec{"rm -rf $projectroot": +        onlyif => "test -d  $projectroot", +      } +    } +    default: { +      require ::git +      exec {"git-clone_${name}": +        command => "git clone --no-hardlinks ${git_repo} ${projectroot}", +        creates => "${projectroot}/.git", +        user => root, +        notify => Exec["git-clone-chown_${name}"], +      } +      if $clone_before != 'absent' { +        Exec["git-clone_${name}"]{ +          before => $clone_before, +        } +      } +      if $submodules { +        exec{"git-submodules_${name}": +          command => "git submodule init && git submodule update", +          cwd => $projectroot, +          refreshonly => true, +          subscribe => Exec["git-clone_${name}"], +        } +      } +      exec {"git-clone-chown_${name}": +        command => "chown -R ${cloneddir_user}:${cloneddir_group} ${projectroot};chmod -R og-rwx ${projectroot}/.git", +        refreshonly => true +      } +      if $cloneddir_restrict_mode { +        exec {"git-clone-chmod_${name}": +          command => "chmod -R o-rwx ${projectroot}", +          refreshonly => true, +          subscribe => Exec["git-clone_${name}"], +        } +      } +    } +  } +} diff --git a/puppet/modules/git/manifests/daemon.pp b/puppet/modules/git/manifests/daemon.pp new file mode 100644 index 00000000..1e85ff84 --- /dev/null +++ b/puppet/modules/git/manifests/daemon.pp @@ -0,0 +1,17 @@ +class git::daemon { + +  include git + +  case $operatingsystem { +    centos: { include git::daemon::centos } +    debian: { include git::daemon::base } +  } + +  if $use_shorewall { +    include shorewall::rules::gitdaemon +  } + +  if $use_nagios { +    nagios::service { "git-daemon": check_command => "check_git!${fqdn}"; } +  } +} diff --git a/puppet/modules/git/manifests/daemon/base.pp b/puppet/modules/git/manifests/daemon/base.pp new file mode 100644 index 00000000..6a03d4fd --- /dev/null +++ b/puppet/modules/git/manifests/daemon/base.pp @@ -0,0 +1,31 @@ +class git::daemon::base inherits git::base { + +  file { 'git-daemon_initscript': +    source => [ "puppet://$server/modules/site_git/init.d/${fqdn}/git-daemon", +                "puppet://$server/modules/site_git/init.d/${operatingsystem}/git-daemon", +                "puppet://$server/modules/site_git/init.d/git-daemon", +                "puppet://$server/modules/git/init.d/${operatingsystem}/git-daemon", +                "puppet://$server/modules/git/init.d/git-daemon" ], +    require => Package['git'], +    path => "/etc/init.d/git-daemon", +    owner => root, group => 0, mode => 0755; +  } +   +  file { 'git-daemon_config': +    source => [ "puppet://$server/modules/site_git/config/${fqdn}/git-daemon", +                "puppet://$server/modules/site_git/config/${operatingsystem}/git-daemon", +                "puppet://$server/modules/site_git/config/git-daemon", +                "puppet://$server/modules/git/config/${operatingsystem}/git-daemon", +                "puppet://$server/modules/git/config/git-daemon" ], +    require => Package['git'], +    path => "/etc/default/git-daemon", +    owner => root, group => 0, mode => 0644; +  } +   +  service { 'git-daemon': +    ensure => running, +    enable => true, +    hasstatus => true, +    require => [ File['git-daemon_initscript'], File['git-daemon_config'] ], +  } +} diff --git a/puppet/modules/git/manifests/daemon/centos.pp b/puppet/modules/git/manifests/daemon/centos.pp new file mode 100644 index 00000000..e276259d --- /dev/null +++ b/puppet/modules/git/manifests/daemon/centos.pp @@ -0,0 +1,19 @@ +class git::daemon::centos inherits git::daemon::base { + +  package { 'git-daemon': +    ensure => installed, +    require => Package['git'], +    alias => 'git-daemon', +  } +   +  File['git-daemon_initscript'] { +    path => '/etc/init.d/git-daemon', +    require +> Package['git-daemon'], +  } + +  File['git-daemon_config'] { +    path => '/etc/init.d/git-daemon', +    require +> Package['git-daemon'], +  } + +} diff --git a/puppet/modules/git/manifests/daemon/disable.pp b/puppet/modules/git/manifests/daemon/disable.pp new file mode 100644 index 00000000..c044e962 --- /dev/null +++ b/puppet/modules/git/manifests/daemon/disable.pp @@ -0,0 +1,33 @@ +class git::daemon::disable inherits git::daemon::base { + +  if defined(Package['git-daemon']) { +    Package['git-daemon'] { +      ensure => absent, +    } +  } + +  File['git-daemon_initscript'] {  +    ensure => absent, +  } +   +  File['git-daemon_config'] { +    ensure => absent, +  } +   +  Service['git-daemon'] { +    ensure => stopped, +    enable => false, +    require => undef, +    before => File['git-daemon_initscript'], +  } + +  if $use_shorewall { +    include shorewall::rules::gitdaemon::absent +  } + +  if $use_nagios { +    nagios::service { "git-daemon": check_command => "check_git!${fqdn}", ensure => absent; } +  } +} + + diff --git a/puppet/modules/git/manifests/daemon/vhosts.pp b/puppet/modules/git/manifests/daemon/vhosts.pp new file mode 100644 index 00000000..9591330f --- /dev/null +++ b/puppet/modules/git/manifests/daemon/vhosts.pp @@ -0,0 +1,10 @@ +class git::daemon::vhosts inherits git::daemon { + +  File['git-daemon_config']{ +    source => [ "puppet://$server/modules/site_git/config/${fqdn}/git-daemon.vhosts", +                "puppet://$server/modules/site_git/config/${operatingsystem}/git-daemon.vhosts", +                "puppet://$server/modules/site_git/config/git-daemon.vhosts", +                "puppet://$server/modules/git/config/${operatingsystem}/git-daemon.vhosts", +                "puppet://$server/modules/git/config/git-daemon.vhosts" ], +  } +} diff --git a/puppet/modules/git/manifests/debian.pp b/puppet/modules/git/manifests/debian.pp new file mode 100644 index 00000000..2e63d692 --- /dev/null +++ b/puppet/modules/git/manifests/debian.pp @@ -0,0 +1,6 @@ +class git::debian inherits git::base { + +  Package['git'] { +    name => 'git-core', +  } +} diff --git a/puppet/modules/git/manifests/init.pp b/puppet/modules/git/manifests/init.pp new file mode 100644 index 00000000..4693af75 --- /dev/null +++ b/puppet/modules/git/manifests/init.pp @@ -0,0 +1,25 @@ +# +# git module +# +# Copyright 2008, Puzzle ITC +# Marcel Härry haerry+puppet(at)puzzle.ch +# Simon Josi josi+puppet(at)puzzle.ch +# +# This program is free software; you can redistribute  +# it and/or modify it under the terms of the GNU  +# General Public License version 3 as published by  +# the Free Software Foundation. +# + +class git { + +  case $operatingsystem { +    debian: { include git::debian } +    centos: { include git::centos } +  } + +  if $use_shorewall { +    include shorewall::rules::out::git +  } + +} diff --git a/puppet/modules/git/manifests/svn.pp b/puppet/modules/git/manifests/svn.pp new file mode 100644 index 00000000..ea934749 --- /dev/null +++ b/puppet/modules/git/manifests/svn.pp @@ -0,0 +1,10 @@ +# manifests/svn.pp + +class git::svn { +  include ::git +  include subversion + +  package { 'git-svn': +    require => [ Package['git'], Package['subversion'] ], +  } +} diff --git a/puppet/modules/git/manifests/web.pp b/puppet/modules/git/manifests/web.pp new file mode 100644 index 00000000..3cf5139e --- /dev/null +++ b/puppet/modules/git/manifests/web.pp @@ -0,0 +1,20 @@ +class git::web { +  include git + +  package { 'gitweb': +    ensure => present, +    require => Package['git'], +  } + +  file { '/etc/gitweb.d': +    ensure => directory, +    owner => root, group => 0, mode => 0755; +  } +  file { '/etc/gitweb.conf': +    source => [ "puppet:///modules/site_git/web/${fqdn}/gitweb.conf", +                "puppet:///modules/site_git/web/gitweb.conf", +                "puppet:///modules/git/web/gitweb.conf" ], +    require => Package['gitweb'], +    owner => root, group => 0, mode => 0644; +  } +} diff --git a/puppet/modules/git/manifests/web/absent.pp b/puppet/modules/git/manifests/web/absent.pp new file mode 100644 index 00000000..4d0dba33 --- /dev/null +++ b/puppet/modules/git/manifests/web/absent.pp @@ -0,0 +1,17 @@ +class git::web::absent { + +  package { 'gitweb': +    ensure => absent, +  }  + +  file { '/etc/gitweb.d': +    ensure => absent, +    purge => true, +    force => true, +    recurse => true, +  }  +  file { '/etc/gitweb.conf': +    ensure => absent, +  }  +} + diff --git a/puppet/modules/git/manifests/web/lighttpd.pp b/puppet/modules/git/manifests/web/lighttpd.pp new file mode 100644 index 00000000..980e23c0 --- /dev/null +++ b/puppet/modules/git/manifests/web/lighttpd.pp @@ -0,0 +1,7 @@ +class git::web::lighttpd { +  include ::lighttpd  + +  lighttpd::config::file{'lighttpd-gitweb': +    content => 'global { server.modules += ("mod_rewrite", "mod_redirect", "mod_alias", "mod_setenv", "mod_cgi" ) }', +  } +} diff --git a/puppet/modules/git/manifests/web/repo.pp b/puppet/modules/git/manifests/web/repo.pp new file mode 100644 index 00000000..da6f74f0 --- /dev/null +++ b/puppet/modules/git/manifests/web/repo.pp @@ -0,0 +1,56 @@ +# domain: the domain under which this repo will be avaiable +# projectroot: where the git repos are listened +# projects_list: which repos to export +# +# logmode: +#   - default: Do normal logging including ips +#   - anonym: Don't log ips +define git::web::repo( +  $ensure = 'present', +  $projectroot = 'absent', +  $projects_list = 'absent', +  $logmode = 'default', +  $sitename = 'absent' +){ +  if ($ensure == 'present') and (($projects_list == 'absent') or ($projectroot == 'absent')){ +    fail("You have to pass \$project_list and \$projectroot for ${name} if it should be present!") +  } +  if $ensure == 'present' { include git::web } +  $gitweb_url = $name +  case $gitweb_sitename { +    'absent': { $gitweb_sitename = "${name} git repository" } +    default: { $gitweb_sitename = $sitename } +  } +  $gitweb_config = "/etc/gitweb.d/${name}.conf" +  file{"${gitweb_config}": } +  if $ensure == 'present' { +    File["${gitweb_config}"]{ +      content => template("git/web/config") +    } +  } else { +    File["${gitweb_config}"]{ +      ensure => absent, +    } +  } +  case $gitweb_webserver { +    'lighttpd': { +      git::web::repo::lighttpd{$name: +        ensure => $ensure, +        logmode => $logmode, +        gitweb_url => $gitweb_url, +        gitweb_config => $gitweb_config, +      } +    } +    'apache': { +      apache::vhost::gitweb{$gitweb_url: +        logmode => $logmode, +        ensure => $ensure, +      } +    } +    default: { +      if ($ensure == 'present') { +        fail("no supported \$gitweb_webserver defined on ${fqdn}, so can't do git::web::repo: ${name}") +      } +    } +  } +} diff --git a/puppet/modules/git/manifests/web/repo/lighttpd.pp b/puppet/modules/git/manifests/web/repo/lighttpd.pp new file mode 100644 index 00000000..11cee4ce --- /dev/null +++ b/puppet/modules/git/manifests/web/repo/lighttpd.pp @@ -0,0 +1,16 @@ +# logmode: +#   - default: Do normal logging including ips +#   - anonym: Don't log ips +define git::web::repo::lighttpd( +  $ensure = 'present', +  $gitweb_url, +  $logmode = 'default', +  $gitweb_config +){ +  if $ensure == 'present' { include git::web::lighttpd } + +  lighttpd::vhost::file{$name: +     ensure => $ensure, +     content => template('git/web/lighttpd'); +  } +} diff --git a/puppet/modules/git/templates/web/config b/puppet/modules/git/templates/web/config new file mode 100644 index 00000000..5286f6a6 --- /dev/null +++ b/puppet/modules/git/templates/web/config @@ -0,0 +1,31 @@ +# Include the global configuration, if found. +do "/etc/gitweb.conf" if -e "/etc/gitweb.conf"; + +# Point to projects.list file generated by gitosis. +# Here gitosis manages the user "git", who has a +# home directory of /srv/example.com/git +$projects_list = "<%= projects_list %>"; + +# Where the actual repositories are located. +$projectroot = "<%= projectroot %>"; + +# By default, gitweb will happily let people browse any repository +# they guess the name of. This may or may not be what you wanted.  I +# choose to allow gitweb to show only repositories that git-daemon +# is already sharing anonymously. +$export_ok = "git-daemon-export-ok"; + +# Alternatively, you could set these, to allow exactly the things in +# projects.list, which in this case is the repos with gitweb=yes +# in gitosis.conf. This means you don't need daemon=yes, but you +# can't have repositories hidden but browsable if you know the name. +# And note gitweb already allows downloading the full repository, +# so you might as well serve git-daemon too. +# $export_ok = ""; +# $strict_export = "true"; + +# A list of base urls where all the repositories can be cloned from. +# Easier than having per-repository cloneurl files. +@git_base_url_list = ('git://<%= gitweb_url %>'); + +$GITWEB_SITENAME = "<%= gitweb_sitename %>" diff --git a/puppet/modules/git/templates/web/lighttpd b/puppet/modules/git/templates/web/lighttpd new file mode 100644 index 00000000..cf244691 --- /dev/null +++ b/puppet/modules/git/templates/web/lighttpd @@ -0,0 +1,21 @@ +$HTTP["host"] == "<%= gitweb_url %>" { +    url.redirect += ( +      "^$" => "/", +    ) + +    <%- if logmode.to_s == 'anonym' -%> +    accesslog.format = "127.0.0.1 %V %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" +    <%- end -%> + +    alias.url += ( +      "/static/gitweb.css" => "/var/www/git/static/gitweb.css", +      "/static/git-logo.png" => "/var/www/git/static/git-logo.png", +      "/static/git-favicon.png" => "/var/www/git/static/git-favicon.png", +      "/" => "/var/www/git/gitweb.cgi", +    ) + +    setenv.add-environment = ( +      "GITWEB_CONFIG" => "<%= gitweb_config %>" +    ) +    cgi.assign = ( ".cgi" => "" ) +} | 
