From bb97ef6499e5ec31064e260645a1a01abc73d886 Mon Sep 17 00:00:00 2001 From: Michael Scherer Date: Thu, 15 Mar 2012 22:55:12 +0000 Subject: clean git module, and some partial splitting --- modules/git/manifests/common.pp | 3 + modules/git/manifests/init.pp | 132 +++++++----------------------------- modules/git/manifests/repository.pp | 40 +++++++++++ modules/git/manifests/server.pp | 41 +++++++++++ 4 files changed, 107 insertions(+), 109 deletions(-) create mode 100644 modules/git/manifests/common.pp create mode 100644 modules/git/manifests/repository.pp create mode 100644 modules/git/manifests/server.pp diff --git a/modules/git/manifests/common.pp b/modules/git/manifests/common.pp new file mode 100644 index 00000000..ed8ebbdf --- /dev/null +++ b/modules/git/manifests/common.pp @@ -0,0 +1,3 @@ +class git::common { + package { 'git-core': } +} diff --git a/modules/git/manifests/init.pp b/modules/git/manifests/init.pp index 5b1ef9ed..50aa8d72 100644 --- a/modules/git/manifests/init.pp +++ b/modules/git/manifests/init.pp @@ -1,107 +1,21 @@ class git { - class common { - package { 'git-core': } - } - - class server inherits common { - # http://www.kernel.org/pub/software/scm/git/docs/everyday.html#Repository%20Administration - $git_base_path = '/git/' - - xinetd::service { "git": - content => template('git/xinetd') - } - - file { "$git_base_path": - ensure => directory - } - - file { "/usr/local/bin/create_git_repo.sh": - mode => 755, - source => 'puppet:///modules/git/create_git_repo.sh', - } - - file { "/usr/local/bin/apply_git_puppet_config.sh": - mode => 755, - source => 'puppet:///modules/git/apply_git_puppet_config.sh', - } - - - # TODO - # define common syntax check, see svn - # http://stackoverflow.com/questions/3719883/git-hook-syntax-check - # proper policy : fast-forward-only - # ( http://progit.org/book/ch7-4.html ) - # no branch ? - # no binary - # no big file - # no empty commit message - # no commit from root - # see http://www.itk.org/Wiki/Git/Hooks - # automated push to another git repo ( see http://noone.org/blog/English/Computer/VCS/Thoughts%20on%20Gitorious%20and%20GitHub%20plus%20a%20useful%20git%20hook.futile - # - # how do we handle commit permission ? - # mail sending - # - } - - define repository($description = '', - $group ) { - - include git::server - # http://eagleas.livejournal.com/18907.html - # TODO group permission should be handled here too - exec { "/usr/local/bin/create_git_repo.sh $name": - user => root, - group => $group, - creates => $name, - } - - file { "$name/git-daemon-export-ok": - require => Exec["/usr/local/bin/create_git_repo.sh $name"] - } - - file { "$name/description": - content => $description, - require => File["$name/git-daemon-export-ok"] - } - - file { "$name/hooks/post-receive": - mode => 755, - content => template('git/post-receive'), - require => File["$name/git-daemon-export-ok"] - } - - file { "$name/config.puppet": - require => File["$name/git-daemon-export-ok"], - notify => Exec["/usr/local/bin/apply_git_puppet_config.sh $name"], - content => template('git/config.puppet'), - } - - # $name is not really used, but this prevent duplicate declaration error - exec { "/usr/local/bin/apply_git_puppet_config.sh $name": - cwd => $name, - user => "root", - refreshonly => true - } - } - define mirror($source, $description, $refresh = '*/5') { exec { "/usr/bin/git clone --bare $source $name": - alias => "git mirror $name", + alias => "git mirror $name", creates => $name, - before => File["$name/description"], + before => File["$name/description"], } - + file { "$name/description": content => $description, } cron { "update $name": command => "cd $name ; /usr/bin/git fetch -q", - minute => $refresh + minute => $refresh } } @@ -113,30 +27,30 @@ class git { # a cron job # a exec if $std_layout { - $options = "-s" + $options = '-s' } else { - $options = " " + $options = '' } exec { "/usr/bin/git svn init $options $source $name": - alias => "git svn $name", + alias => "git svn $name", creates => $name, } - - file { "/usr/local/bin/update_git_svn.sh": - mode => 755, - source => 'puppet:///modules/git/update_git_svn.sh', + + file { '/usr/local/bin/update_git_svn.sh': + mode => '0755', + source => 'puppet:///modules/git/update_git_svn.sh', } cron { "update $name": # done in 2 times, so fetch can fill the repo after init command => "/usr/local/bin/update_git_svn.sh $name" , - minute => $refresh + minute => $refresh } file { "$name/.git/hooks/pre-receive": - mode => 755, - content => template('git/pre-receive'), + mode => '0755', + content => template('git/pre-receive'), require => Exec["git svn $name"] } } @@ -147,26 +61,26 @@ class git { } class svn inherits client { - package { "git-svn": } + package { 'git-svn': } } define snapshot($source, $refresh ='*/5', $user = 'root') { include git::client #TODO - # should handle branch -> clone -n + branch + checkout - # create a script - # Idealy, should be handled by vcsrepo https://github.com/bruce/puppet-vcsrepo - # once it is merged in puppet + # should handle branch -> clone -n + branch + checkout + # create a script + # Idealy, should be handled by vcsrepo https://github.com/bruce/puppet-vcsrepo + # once it is merged in puppet exec { "/usr/bin/git clone $source $name": creates => $name, - user => $user + user => $user } - + cron { "update $name": # FIXME no -q ? command => "cd $name && /usr/bin/git pull", - user => $user, - minute => $refresh + user => $user, + minute => $refresh } } } diff --git a/modules/git/manifests/repository.pp b/modules/git/manifests/repository.pp new file mode 100644 index 00000000..286ff45e --- /dev/null +++ b/modules/git/manifests/repository.pp @@ -0,0 +1,40 @@ +class git::repository($group, + $description = '') { + + include git::server + # http://eagleas.livejournal.com/18907.html + # TODO group permission should be handled here too + exec { "/usr/local/bin/create_git_repo.sh $name": + user => 'root', + group => $group, + creates => $name, + } + + file { "$name/git-daemon-export-ok": + require => Exec["/usr/local/bin/create_git_repo.sh $name"] + } + + file { "$name/description": + content => $description, + require => File["$name/git-daemon-export-ok"] + } + + file { "$name/hooks/post-receive": + mode => '0755', + content => template('git/post-receive'), + require => File["$name/git-daemon-export-ok"] + } + + file { "$name/config.puppet": + require => File["$name/git-daemon-export-ok"], + notify => Exec["/usr/local/bin/apply_git_puppet_config.sh $name"], + content => template('git/config.puppet'), + } + + # $name is not really used, but this prevent duplicate declaration error + exec { "/usr/local/bin/apply_git_puppet_config.sh $name": + cwd => $name, + user => 'root', + refreshonly => true, + } +} diff --git a/modules/git/manifests/server.pp b/modules/git/manifests/server.pp new file mode 100644 index 00000000..155cd9ae --- /dev/null +++ b/modules/git/manifests/server.pp @@ -0,0 +1,41 @@ +class git::server { + include git::common + + $git_base_path = '/git/' + + xinetd::service { 'git': + content => template('git/xinetd') + } + + file { $git_base_path: + ensure => directory + } + + file { '/usr/local/bin/create_git_repo.sh': + mode => '0755', + source => 'puppet:///modules/git/create_git_repo.sh', + } + + file { '/usr/local/bin/apply_git_puppet_config.sh': + mode => '0755', + source => 'puppet:///modules/git/apply_git_puppet_config.sh', + } + + + # TODO + # define common syntax check, see svn + # http://stackoverflow.com/questions/3719883/git-hook-syntax-check + # proper policy : fast-forward-only + # ( http://progit.org/book/ch7-4.html ) + # no branch ? + # no binary + # no big file + # no empty commit message + # no commit from root + # see http://www.itk.org/Wiki/Git/Hooks + # automated push to another git repo ( see http://noone.org/blog/English/Computer/VCS/Thoughts%20on%20Gitorious%20and%20GitHub%20plus%20a%20useful%20git%20hook.futile + # + # how do we handle commit permission ? + # mail sending + # +} -- cgit v1.2.1