/[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 1628 - (show annotations) (download)
Mon May 23 10:21:51 2011 UTC (12 years, 11 months ago) by misc
File size: 5196 byte(s)
fix problem found by pterjan when deploying more than 1 git repository

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

  ViewVC Help
Powered by ViewVC 1.1.30