/[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 1866 - (show annotations) (download)
Tue Jul 19 23:35:45 2011 UTC (12 years, 9 months ago) by misc
File size: 5679 byte(s)
add a parameter for the description

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 source => 'puppet:///modules/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 source => 'puppet:///modules/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 $name"],
90 content => template('git/config.puppet'),
91 }
92
93 # $name is not really used, but this prevent duplicate declaration error
94 exec { "/usr/local/bin/apply_git_puppet_config.sh $name":
95 cwd => $name,
96 user => "root",
97 refreshonly => true
98 }
99 }
100
101 define mirror($source,
102 $description,
103 $refresh = '*/5') {
104
105 exec { "/usr/bin/git clone $source $name":
106 alias => "git mirror $name",
107 creates => $name,
108 }
109
110 file { "$name/description":
111 ensure => present,
112 content => $description,
113 }
114
115 cron { "update $name":
116 command => "/usr/bin/git pull $name" ,
117 minute => $refresh
118 }
119 }
120
121 define svn_repository($source,
122 $std_layout = true,
123 $refresh = '*/5') {
124 include git::svn
125 include git::server
126 # a cron job
127 # a exec
128 if $std_layout {
129 $options = "-s"
130 } else {
131 $options = " "
132 }
133
134 exec { "/usr/bin/git svn init $options $source $name":
135 alias => "git svn $name",
136 creates => $name,
137 }
138
139 file { "/usr/local/bin/update_git_svn.sh":
140 ensure => present,
141 owner => root,
142 group => root,
143 mode => 755,
144 source => 'puppet:///modules/git/update_git_svn.sh',
145 }
146
147 cron { "update $name":
148 # done in 2 times, so fetch can fill the repo after init
149 command => "/usr/local/bin/update_git_svn.sh $name" ,
150 minute => $refresh
151 }
152
153 file { "$name/.git/hooks/pre-receive":
154 ensure => present,
155 owner => root,
156 group => root,
157 mode => 755,
158 content => template('git/pre-receive'),
159 require => Exec["git svn $name"]
160 }
161 }
162
163 class client inherits common {
164
165
166 }
167
168 class svn inherits client {
169 package { "git-svn":
170 ensure => installed
171 }
172 }
173
174 define snapshot($source, $refresh ='*/5', $user = 'root') {
175 include git::client
176 #TODO
177 # should handle branch -> clone -n + branch + checkout
178 # create a script
179 # Idealy, should be handled by vcsrepo https://github.com/bruce/puppet-vcsrepo
180 # once it is merged in puppet
181 exec { "/usr/bin/git clone $source $name":
182 creates => $name,
183 user => $user
184 }
185
186 cron { "update $name":
187 # FIXME no -q ?
188 command => "cd $name && /usr/bin/git pull",
189 user => $user,
190 minute => $refresh
191 }
192 }
193 }
194
195
196

  ViewVC Help
Powered by ViewVC 1.1.30