]> WPIA git - infra.git/blob - environments/production/manifests/root.pp
db84e8d9653c8b7d3e0d6f55623fe2ede60ce051
[infra.git] / environments / production / manifests / root.pp
1 class my_fw::post {
2   package { 'iptables-persistent':
3     ensure => 'installed'
4   }
5   resources { 'firewall':
6       purge => true,
7   }
8   Package['iptables-persistent'] ->
9   firewall { '80 dnat':
10     proto  => 'tcp',
11     dport  => '80',
12     jump => 'DNAT',
13     todest => "${$ips[front-nginx]}:80",
14     iniface => $internet_iface,
15     table    => 'nat',
16     chain    => 'PREROUTING',
17   } ->
18   firewall { '80 dnat-https':
19     proto  => 'tcp',
20     dport  => '443',
21     jump => 'DNAT',
22     todest => "${$ips[front-nginx]}:443",
23     iniface => $internet_iface,
24     table    => 'nat',
25     chain    => 'PREROUTING',
26   } ->
27   firewall { '80 dnat-git':
28     proto  => 'tcp',
29     dport  => '9418',
30     jump => 'DNAT',
31     todest => "${$ips[gitweb]}:9418",
32     iniface => $internet_iface,
33     table    => 'nat',
34     chain    => 'PREROUTING',
35   } ->
36   firewall { '80 dnat-htop-ssh':
37     proto  => 'tcp',
38     dport  => '2222',
39     jump => 'DNAT',
40     todest => "${$ips[hop]}:22",
41     iniface => $internet_iface,
42     table    => 'nat',
43     chain    => 'PREROUTING',
44   } ->
45   firewall { '80 MASQ':
46     chain => 'POSTROUTING',
47     table => 'nat',
48     jump => 'MASQUERADE',
49     proto => 'all',
50     outiface => $internet_iface,
51     source => '10.0.3.0/24',
52   }
53 }
54
55
56 node host01 {
57     include my_fw::post
58     include lxc
59     package {'bridge-utils':
60         ensure => 'installed'
61     } -> file {'/etc/network/interfaces.d/lxcbr0':
62         source => 'puppet:///modules/lxc/lxcbr0'
63     } -> exec {'ifup lxcbr0':
64       command => '/sbin/ifdown lxcbr0; /sbin/ifup lxcbr0',
65       refreshonly => true,
66       subscribe => File['/etc/network/interfaces.d/lxcbr0']
67     } -> exec { "enable forwarding on $hostname":
68       user    => "root",
69       command => "/bin/echo 1 > /proc/sys/net/ipv4/ip_forward",
70       unless  => "/bin/grep -q 1 /proc/sys/net/ipv4/ip_forward";
71     }->
72       file_line {"root-resolv1":
73       path   => "/etc/resolv.conf",
74       ensure => 'absent',
75       match_for_absence => "true",
76       match  => '^domain ',
77       line   => ''
78     }->
79       file_line {"root-resolv2":
80       path   => "/etc/resolv.conf",
81       ensure => 'absent',
82       match_for_absence => "true",
83       match  => '^search ',
84       line   => ''
85     }
86 if $signerLocation == 'self' {
87     exec {"create cassiopeia-comm-keys":
88       command => '/etc/puppet/code/modules/cassiopeia/mkcassiopeia',
89       creates => '/etc/puppet/code/modules/cassiopeia/files/signer_client.crt'
90     }
91 } else {
92     exec {"create cassiopeia-comm-keys":
93       command => '/bin/false',
94       creates => '/etc/puppet/code/modules/cassiopeia/files/signer_client.crt'
95     }
96 }
97     exec {"gigi keystore.pkcs12":
98       command => '/bin/bash -c \'keystorepw=$(/usr/bin/head -c 15 /dev/urandom | base64); /usr/bin/openssl pkcs12 -export -name "mail" -in /etc/puppet/code/modules/gigi/files/client.crt -inkey /etc/puppet/code/modules/gigi/client.key -CAfile /etc/puppet/codemodules/nre/files/config/ca/root.crt -password file:<(echo $keystorepw) > /etc/puppet/code/modules/gigi/files/keystore.pkcs12; /usr/bin/printf "%s" "$keystorepw" > /etc/puppet/code/modules/gigi/files/keystorepw\'',
99       unless => '/usr/bin/[  /etc/puppet/code/modules/gigi/files/keystore.pkcs12 -nt /etc/puppet/code/modules/gigi/files/client.crt ] || ! /usr/bin/[ -f /etc/puppet/code/modules/gigi/files/client.crt ]'
100     }
101     lxc::container { 'front-nginx':
102         contname => 'front-nginx',
103         ip => $ips[front-nginx],
104         dir => ["/data", "/data-crl", '/data-crl-gigi', '/gitweb-socket', '/git-smart-http-socket', '/srv/git'],
105         bind => {
106           "/data/nginx" => {target => "data", option => ",ro"},
107           "/data/crl" => {target => "data-crl", option => ",ro"},
108           "/data/gigi-crl" => {target => "data-crl-gigi", option => ",ro"},
109           "/run/gitweb-socket" => {target => 'gitweb-socket'},
110           "/run/git-smart-http-socket" => {target => 'git-smart-http-socket'},
111           "/data/git" => { 'target' => "srv/git", option => ",ro"}
112         },
113         require => File['/data/nginx', '/data/crl/htdocs', '/data/gigi-crl']
114     }
115     file { '/data':
116        ensure => 'directory',
117     }
118     file { '/data/nginx':
119       ensure => 'directory',
120     }
121     file { '/data/crl':
122       ensure => 'directory',
123       owner => $administrativeUser
124     }
125     file { '/data/git':
126       ensure => 'directory',
127       owner => $administrativeUser,
128     }
129     file { '/data/gigi-crl':
130       ensure => 'directory',
131       owner => $administrativeUser
132     }
133     file { '/data/crl/htdocs':
134       ensure => 'directory',
135       owner => $administrativeUser
136     }
137     file { '/data/postgres/conf':
138       ensure => 'directory',
139     }
140     file { '/data/postgres/data':
141       ensure => 'directory',
142     }
143     file { '/data/postgres':
144       ensure => 'directory',
145     }
146     file { '/data/gigi':
147       ensure => 'directory',
148     }
149     lxc::container { 'postgres-primary':
150         contname => 'postgres-primary',
151         ip => $ips[postgres],
152         dir => ["/var/lib/postgresql", "/etc/postgresql"],
153         bind => {
154           "/data/postgres/data" => { target => "var/lib/postgresql"},
155           "/data/postgres/conf" => { target => "etc/postgresql"}
156         },
157         require => File['/data/postgres']
158     }
159     $gigi_serial_conf= $signerLocation ? {
160       'self'          => [],
161       '/dev/ttyS0'    => ["lxc.cgroup.devices.allow = c 4:64 rwm"]
162     }
163
164     lxc::container { 'gigi':
165         contname => 'gigi',
166         ip => $ips[gigi],
167         dir => ["/var/lib/wpia-gigi", "/var/lib/wpia-gigi/keys", '/var/lib/cassiopeia', '/var/lib/cassiopeia/ca'],
168         bind => {
169           "/data/gigi" => { target => "var/lib/wpia-gigi/keys"},
170           "/data/gigi-crl" => { target => "var/lib/cassiopeia/ca"}
171         },
172         confline => $gigi_serial_conf,
173         require => File['/data/gigi', '/data/gigi-crl']
174     }
175     if $signerLocation == 'self' {
176       lxc::container { 'cassiopeia':
177         contname => 'cassiopeia',
178         ip => $ips[cassiopeia]
179       }
180     }
181     lxc::container { 'exim':
182         contname => 'exim',
183         ip => $ips[exim]
184     }
185     lxc::container { 'hop':
186         contname => 'hop',
187         ip => $ips[hop]
188     }
189     lxc::container { 'quiz':
190         contname => 'quiz',
191         ip => $ips[quiz]
192     }
193     file{'/run/gitweb-socket':
194         ensure => 'directory'
195     }
196     file{'/run/git-smart-http-socket':
197         ensure => 'directory'
198     }
199     lxc::container { 'gitweb':
200         require => File['/data/git', '/run/gitweb-socket', '/run/git-smart-http-socket'],
201         contname => 'gitweb',
202         dir => ['/gitweb-socket', '/git-smart-http-socket', '/srv/git'],
203         bind => {
204           "/run/gitweb-socket" => { 'target' => "gitweb-socket"},
205           "/run/git-smart-http-socket" => { 'target' => "git-smart-http-socket"},
206           "/data/git" => { 'target' => "srv/git", option => ",ro"}
207         },
208         ip => $ips[gitweb]
209     }
210     # Required for bootstrap-user
211     package {'acl':
212         ensure => 'installed'
213     }
214 }
215