/[adm]/puppet/modules/git/manifests/init.pp
ViewVC logotype

Contents of /puppet/modules/git/manifests/init.pp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 978 - (show annotations) (download)
Thu Feb 10 02:24:22 2011 UTC (13 years, 1 month ago) by misc
File size: 5098 byte(s)
add a post commit script to send mail
1 class git {
2 class common {
3 package { 'git-core':
4 }
5 }
6
7 class server inherits common {
8 # http://www.kernel.org/pub/software/scm/git/docs/everyday.html#Repository%20Administration
9 $git_base_path = '/git/'
10
11 xinetd::service { "git":
12 content => template('git/xinetd')
13 }
14
15 file { "$git_base_path":
16 ensure => directory
17 }
18
19 file { "/usr/local/bin/create_git_repo.sh":
20 ensure => present,
21 owner => root,
22 group => root,
23 mode => 755,
24 content => template('git/create_git_repo.sh')
25 }
26
27 file { "/usr/local/bin/apply_git_puppet_config.sh":
28 ensure => present,
29 owner => root,
30 group => root,
31 mode => 755,
32 content => template('git/apply_git_puppet_config.sh')
33 }
34
35
36 # TODO
37 # define common syntax check, see svn
38 # http://stackoverflow.com/questions/3719883/git-hook-syntax-check
39 # proper policy : fast-forward-only
40 # ( http://progit.org/book/ch7-4.html )
41 # no branch ?
42 # no binary
43 # no big file
44 # no empty commit message
45 # no commit from root
46 # see http://www.itk.org/Wiki/Git/Hooks
47 # 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
48 #
49 # how do we handle commit permission ?
50 # mail sending
51 #
52 }
53
54 define repository($description = '',
55 $group ) {
56
57 include git::server
58 # http://eagleas.livejournal.com/18907.html
59 # TODO group permission should be handled here too
60 exec { "/usr/local/bin/create_git_repo.sh $name":
61 user => root,
62 group => $group,
63 creates => $name,
64 }
65
66 file { "$name/git-daemon-export-ok":
67 ensure => present,
68 require => Exec["/usr/local/bin/create_git_repo.sh $name"]
69 }
70
71 file { "$name/description":
72 ensure => present,
73 content => $description,
74 require => File["$name/git-daemon-export-ok"]
75 }
76
77 file { "$name/hooks/post-receive":
78 ensure => present,
79 owner => root,
80 group => root,
81 mode => 755,
82 content => template('git/post-receive'),
83 require => File["$name/git-daemon-export-ok"]
84 }
85
86 file { "$name/config.puppet":
87 ensure => present,
88 require => File["$name/git-daemon-export-ok"],
89 notify => Exec['/usr/local/bin/apply_git_puppet_config.sh'],
90 content => template('git/config.puppet'),
91 }
92
93 exec { "/usr/local/bin/apply_git_puppet_config.sh":
94 cwd => $name,
95 user => "root",
96 refreshonly => true
97 }
98 }
99
100 define svn_repository($source,
101 $std_layout = true,
102 $refresh = '*/5') {
103 include git::svn
104 include git::server
105 # a cron job
106 # a exec
107 if $std_layout {
108 $options = "-s"
109 } else {
110 $options = " "
111 }
112
113 exec { "/usr/bin/git svn init $options $source $name":
114 alias => "git svn $name",
115 creates => $name,
116 }
117
118 file { "/usr/local/bin/update_git_svn.sh":
119 ensure => present,
120 owner => root,
121 group => root,
122 mode => 755,
123 source => 'puppet:///modules/git/update_git_svn.sh',
124 }
125
126 cron { "update $name":
127 # done in 2 times, so fetch can fill the repo after init
128 command => "/usr/local/bin/update_git_svn.sh $name" ,
129 minute => $refresh
130 }
131
132 file { "$name/.git/hooks/pre-receive":
133 ensure => present,
134 owner => root,
135 group => root,
136 mode => 755,
137 content => template('git/pre-receive'),
138 require => Exec["git svn $name"]
139 }
140 }
141
142 class client inherits common {
143
144
145 }
146
147 class svn inherits client {
148 package { "git-svn":
149 ensure => installed
150 }
151 }
152
153 define snapshot($source, $refresh ='*/5', $user = 'root') {
154 include git::client
155 #TODO
156 # should handle branch -> clone -n + branch + checkout
157 # create a script
158 # Idealy, should be handled by vcsrepo https://github.com/bruce/puppet-vcsrepo
159 # once it is merged in puppet
160 exec { "/usr/bin/git clone $source $name":
161 creates => $name,
162 user => $user
163 }
164
165 cron { "update $name":
166 # FIXME no -q ?
167 command => "cd $name && /usr/bin/git pull",
168 user => $user,
169 minute => $refresh
170 }
171 }
172 }
173
174
175

  ViewVC Help
Powered by ViewVC 1.1.30