OLD | NEW |
1 class rietveld( | 1 class rietveld( |
2 $domain, | 2 $domain, |
3 $certificate, | 3 $certificate, |
4 $private_key, | 4 $private_key, |
5 $is_default = false, | 5 $is_default = false, |
6 $secret_key = hiera('rietveld::secret_key', ''), | 6 $secret_key = hiera('rietveld::secret_key', ''), |
7 $fixtures = hiera('rietveld::fixtures', {}), | 7 $admins = hiera('rietveld::admins', []), |
| 8 $oauth2_client_id = hiera('rietveld::oauth2_client_id', ''), |
| 9 $oauth2_client_secret = hiera('rietveld::oauth2_client_secret', ''), |
8 $database = hiera('rietveld::database', { | 10 $database = hiera('rietveld::database', { |
9 'engine' => 'sqlite3', | 11 'engine' => 'sqlite3', |
10 'name' => 'dev.db', | 12 'name' => 'dev.db', |
11 }), | 13 }), |
12 ) { | 14 ) { |
13 | 15 |
14 include nginx | 16 include nginx |
15 $django_home = '/home/rietveld/django-gae2django' | 17 $rietveld_home = '/opt/rietveld' |
16 $rietveld_home = "${django_home}/examples/rietveld" | |
17 | 18 |
18 Exec { | 19 Exec { |
19 path => '/usr/bin:/usr/sbin:/bin:/usr/local/bin', | 20 path => '/usr/bin:/usr/sbin:/bin:/usr/local/bin', |
20 } | 21 } |
21 | 22 |
22 nginx::hostconfig {$domain: | 23 nginx::hostconfig {$domain: |
23 source => 'puppet:///modules/rietveld/site.conf', | 24 source => 'puppet:///modules/rietveld/site.conf', |
24 is_default => $is_default, | 25 is_default => $is_default, |
25 certificate => $certificate, | 26 certificate => $certificate, |
26 private_key => $private_key, | 27 private_key => $private_key, |
27 log => 'access_log_codereview' | 28 log => 'access_log_codereview' |
28 } | 29 } |
29 | 30 |
30 package {['python-django', 'make', 'patch', 'gunicorn']: ensure => present} | 31 package {['wget', 'unzip', 'git', 'make', 'patch', 'subversion']: ensure => pr
esent} |
31 | 32 |
32 user {'rietveld': | 33 user {'rietveld': |
33 ensure => present, | 34 ensure => present, |
34 comment => 'User of the rietveld installation', | 35 comment => 'User of the rietveld installation', |
35 home => '/home/rietveld', | 36 home => '/home/rietveld', |
36 managehome => true | 37 managehome => true |
37 } | 38 } |
38 | 39 |
39 exec {'get_rietveld': | 40 exec {'download_appengine': |
40 command => "hg clone https://hg.adblockplus.org/gae2django/ ${django_home}/"
, | 41 # TODO: We cannot rely on this URL to stay fixed |
41 require => Package['mercurial'], | 42 command => 'wget -O /home/rietveld/google_appengine.zip https://storage.goog
leapis.com/appengine-sdks/featured/google_appengine_1.9.21.zip', |
42 user => rietveld, | 43 user => 'root', |
43 onlyif => "test ! -d ${django_home}", | 44 creates => '/home/rietveld/google_appengine.zip', |
| 45 require => [User['rietveld'], Package['wget']], |
44 } | 46 } |
45 | 47 |
46 file {"${rietveld_home}/Makefile": | 48 exec {'install_appengine': |
47 ensure => file, | 49 command => 'unzip /home/rietveld/google_appengine.zip -d /opt', |
48 owner => rietveld, | 50 user => 'root', |
49 require => Exec['get_rietveld'], | 51 creates => '/opt/google_appengine', |
50 source => 'puppet:///modules/rietveld/Makefile', | 52 require => [Exec['download_appengine'], Package['unzip']], |
51 } | 53 } |
52 | 54 |
53 file {"${rietveld_home}/settings.py": | 55 exec {'get_rietveld': |
54 ensure => file, | 56 command => "git clone https://github.com/rietveld-codereview/rietveld.git $r
ietveld_home && cd $rietveld_home && git reset --HARD 87257f5", |
55 owner => rietveld, | 57 user => 'root', |
56 require => Exec['get_rietveld'], | 58 require => Package['git'], |
57 content => template('rietveld/settings.py.erb'), | 59 creates => $rietveld_home, |
58 } | 60 } |
59 | 61 |
60 exec {'install_rietveld': | 62 exec {'setup_rietveld': |
61 command => "make all", | 63 command => 'make update_revision mapreduce', |
62 cwd => "${rietveld_home}", | 64 cwd => $rietveld_home, |
63 user => rietveld, | 65 user => root, |
64 require => [ | 66 require => [Exec['get_rietveld'], Package['make', 'patch', 'subversion']], |
65 File["${rietveld_home}/Makefile"], | 67 creates => "${rietveld_home}/mapreduce", |
66 File["${rietveld_home}/settings.py"]], | |
67 onlyif => "test ! -e ${$rietveld_home}/gae2django", | |
68 } | 68 } |
69 | 69 |
70 file {'/etc/init/rietveld.conf': | 70 file {'/opt/wrappers': |
| 71 ensure => directory, |
| 72 owner => 'root', |
| 73 } |
| 74 |
| 75 file {'wrapper.py': |
| 76 path => '/opt/wrappers/wrapper.py', |
71 ensure => file, | 77 ensure => file, |
72 owner => root, | 78 owner => 'root', |
73 source => 'puppet:///modules/rietveld/rietveld.conf', | 79 mode => '0755', |
| 80 source => 'puppet:///modules/rietveld/wrapper.py', |
74 notify => Service['rietveld'], | 81 notify => Service['rietveld'], |
75 } | 82 } |
76 | 83 |
77 file {'/etc/init.d/rietveld': | 84 file {'dev_appserver.py': |
| 85 path => '/opt/wrappers/dev_appserver.py', |
78 ensure => link, | 86 ensure => link, |
79 target => '/lib/init/upstart-job', | 87 require => File['wrapper.py'], |
80 require => [File['/etc/init/rietveld.conf'], Exec['install_rietveld']] | 88 target => '/opt/wrappers/wrapper.py', |
81 } | 89 } |
82 | 90 |
83 service {'rietveld': | 91 file {'_python_runtime.py': |
84 ensure => running, | 92 path => '/opt/wrappers/_python_runtime.py', |
85 hasstatus => false, | 93 ensure => link, |
86 require => [Package['gunicorn'], File['/etc/init.d/rietveld']] | 94 require => File['wrapper.py'], |
| 95 target => '/opt/wrappers/wrapper.py', |
87 } | 96 } |
88 | 97 |
89 file {"${rietveld_home}/fixtures": | 98 file {'/var/lib/rietveld': |
90 ensure => directory, | 99 ensure => directory, |
91 owner => 'rietveld', | 100 owner => 'rietveld', |
92 mode => 0750, | |
93 require => Exec['install_rietveld'], | |
94 } | 101 } |
95 | 102 |
96 define fixture( | 103 file {'config.ini': |
97 $ensure = present, | 104 path => '/var/lib/rietveld/config.ini', |
98 $source = undef, | 105 ensure => file, |
99 $content = undef, | 106 owner => 'root', |
100 ) { | 107 content => template('rietveld/config.ini.erb'), |
101 | 108 notify => Service['rietveld'], |
102 # Note that $script will return EXIT_SUCCESS when the .type is | |
103 # not recognized - although no action is done then. Thus we enforce | |
104 # JSON here, which is the default for command "dumpdata" anyway: | |
105 $script = "${rietveld::rietveld_home}/manage.py" | |
106 $destination = "${rietveld::rietveld_home}/fixtures/$name.json" | |
107 | |
108 exec {$destination: | |
109 command => shellquote($script, 'loaddata', $destination), | |
110 cwd => $rietveld::rietveld_home, | |
111 refreshonly => true, | |
112 user => 'rietveld', | |
113 } | |
114 | |
115 file {$destination: | |
116 ensure => $ensure, | |
117 content => $content, | |
118 source => $source, | |
119 owner => 'rietveld', | |
120 mode => 0640, | |
121 notify => $ensure ? { | |
122 present => Exec[$destination], | |
123 default => [], | |
124 } | |
125 } | |
126 } | 109 } |
127 | 110 |
128 create_resources(rietveld::fixture, $fixtures) | 111 customservice {'rietveld': |
| 112 command => "/opt/wrappers/dev_appserver.py \ |
| 113 --skip_sdk_update_check --port 8080 ${rietveld_home}", |
| 114 user => 'rietveld', |
| 115 require => [ |
| 116 Exec['install_appengine', 'setup_rietveld'], |
| 117 File['dev_appserver.py', '_python_runtime.py', 'config.ini'], |
| 118 ], |
| 119 } |
129 } | 120 } |
OLD | NEW |