2 recipe = slapos.cookbook:slapconfiguration
3 computer = $${slap-connection:computer-id}
4 partition = $${slap-connection:partition-id}
5 url = $${slap-connection:server-url}
6 key = $${slap-connection:key-file}
7 cert = $${slap-connection:cert-file}
10 monitor-dir = $${monitor-directory:var}/monitor
11 result-dir = $${:monitor-dir}/bool
12 json-filename = monitor.json
13 json-path = $${:monitor-dir}/$${:json-filename}
14 rss-path = $${:public-cgi}/$${:rss-filename}
15 rss-filename = rssfeed.html
16 executable = $${monitor-directory:bin}/monitor.py
17 cgi-bin = $${monitor-directory:cgi-bin}
18 monitoring-cgi = $${monitor-directory:monitoring-cgi}
19 knowledge0-cgi = $${monitor-directory:knowledge0-cgi}
20 public-cgi = $${monitor-directory:public-cgi}
22 private-directory = $${monitor-directory:monitor-private-directory}
23 htaccess-file = $${monitor-htaccess:htaccess-path}
26 recipe = slapos.cookbook:mkdirectory
27 home = $${buildout:directory}
34 service = $${:etc}/service/
35 etc-run = $${:etc}/run/
37 promise = $${:etc}/promise
39 cron-entries = $${:etc}/cron.d
40 crontabs = $${:etc}/crontabs
41 cronstamps = $${:etc}/cronstamps
43 promises = $${:etc}/promise
45 cgi-bin = $${:var}/cgi-bin
46 monitoring-cgi = $${:cgi-bin}/monitoring
47 knowledge0-cgi = $${:cgi-bin}/zero-knowledge
48 cron-entries = $${:etc}/cron.d
49 crontabs = $${:etc}/crontabs
50 cronstamps = $${:etc}/cronstamps
52 monitor = $${:etc}/monitor
53 monitor-result = $${:var}/monitor
54 monitor-result-bool = $${:var}/monitor
55 promise = $${:etc}/promise
56 public-cgi = $${:cgi-bin}/public
58 service = $${:etc}/service/
61 monitor-private-directory = $${:srv}/monitor-private
64 recipe = cns.recipe.symlink
65 symlink = $${monitor-parameters:public-cgi} = $${monitor-directory:www}/public
69 recipe = slapos.cookbook:cron
70 dcrond-binary = ${dcron:location}/sbin/crond
71 cron-entries = $${monitor-directory:cron-entries}
72 crontabs = $${monitor-directory:crontabs}
73 cronstamps = $${monitor-directory:cronstamps}
74 catcher = $${cron-simplelogger:wrapper}
75 binary = $${monitor-directory:service}/crond
79 recipe = slapos.cookbook:simplelogger
80 wrapper = $${monitor-directory:bin}/cron_simplelogger
81 log = $${monitor-directory:log}/cron.log
85 recipe = slapos.cookbook:cron.d
87 frequency = */5 * * * *
88 command = $${monitor-parameters:executable} -a
92 recipe = slapos.cookbook:cron.d
94 frequency = */5 * * * *
95 command = $${make-rss:output}
98 recipe = hexagonit.recipe.download
99 url = ${download-static-files:destination}/${download-static-files:filename}
101 destination = $${monitor-directory:www}
102 ignore-existing = true
106 recipe = slapos.recipe.template:jinja2
107 template = ${index:location}/${index:filename}
108 rendered = $${monitor-directory:www}/$${:filename}
112 key cgi_directory monitor-parameters:cgi-bin
113 raw index_template $${deploy-index-template:location}/$${deploy-index-template:filename}
114 key password zero-parameters:monitor-password
115 raw extra_eggs_interpreter ${buildout:directory}/bin/${extra-eggs:interpreter}
116 raw default_page /welcome.html
118 [deploy-index-template]
119 recipe = hexagonit.recipe.download
120 url = ${index-template:location}/$${:filename}
121 destination = $${monitor-directory:www}
122 filename = ${index-template:filename}
127 recipe = slapos.recipe.template:jinja2
128 template = ${status-cgi:location}/${status-cgi:filename}
129 rendered = $${monitor-parameters:monitoring-cgi}/$${:filename}
130 filename = status.cgi
133 key json_file monitor-parameters:json-path
134 raw python_executable ${buildout:executable}
136 [deploy-settings-cgi]
137 recipe = slapos.recipe.template:jinja2
138 template = ${settings-cgi:location}/${settings-cgi:filename}
139 rendered = $${monitor-parameters:knowledge0-cgi}/$${:filename}
140 filename = settings.cgi
143 raw config_cfg $${buildout:directory}/knowledge0.cfg
144 raw timestamp $${buildout:directory}/.timestamp
145 raw python_executable ${buildout:executable}
146 key pwd monitor-parameters:knowledge0-cgi
147 key this_file :filename
149 [deploy-monitor-script]
150 recipe = slapos.recipe.template:jinja2
151 template = ${monitor-bin:location}/${monitor-bin:filename}
152 rendered = $${monitor-parameters:executable}
155 section directory monitor-directory
156 key monitoring_file_json monitor-parameters:json-path
157 key monitoring_folder_bool monitor-parameters:result-dir
158 raw python_executable ${buildout:executable}
161 recipe = hexagonit.recipe.download
162 url = ${rss-bin:destination}/${rss-bin:filename}
163 destination = $${monitor-directory:bin}
164 filename = ${rss-bin:filename}
169 recipe = slapos.recipe.template
170 url = ${make-rss-script:output}
171 output = $${monitor-directory:bin}/make-rss.sh
175 recipe = plone.recipe.command
177 htaccess-path = $${monitor-directory:monitor}/.htaccess
178 command = ${apache:location}/bin/htpasswd -cb $${:htaccess-path} admin $${zero-parameters:monitor-password}
180 [monitor-directory-access]
181 recipe = plone.recipe.command
182 command = ln -s $${:source} $${monitor-directory:monitor-private-directory}
186 recipe = slapos.cookbook:mkdirectory
187 requests = $${monitor-directory:ca-dir}/requests/
188 private = $${monitor-directory:ca-dir}/private/
189 certs = $${monitor-directory:ca-dir}/certs/
190 newcerts = $${monitor-directory:ca-dir}/newcerts/
191 crl = $${monitor-directory:ca-dir}/crl/
193 [certificate-authority]
194 recipe = slapos.cookbook:certificate_authority
195 openssl-binary = ${openssl:location}/bin/openssl
196 ca-dir = $${monitor-directory:ca-dir}
197 requests-directory = $${cadirectory:requests}
198 wrapper = $${monitor-directory:service}/certificate_authority
199 ca-private = $${cadirectory:private}
200 ca-certs = $${cadirectory:certs}
201 ca-newcerts = $${cadirectory:newcerts}
202 ca-crl = $${cadirectory:crl}
205 <= certificate-authority
206 recipe = slapos.cookbook:certificate_authority.request
207 key-file = $${cadirectory:certs}/httpd.key
208 cert-file = $${cadirectory:certs}/httpd.crt
209 executable = $${monitor-directory:bin}/cgi-httpd
210 wrapper = $${monitor-directory:service}/cgi-httpd
215 # Deploy a webserver running cgi scripts for monitoring
218 recipe = slapos.cookbook:zero-knowledge.write
219 filename = knowledge0.cfg
220 monitor-password = passwordtochange
223 recipe = slapos.cookbook:zero-knowledge.read
224 filename = $${public:filename}
226 # XXX could it be something lighter?
227 [cgi-httpd-configuration-file]
228 recipe = collective.recipe.template
230 PidFile "$${:pid-file}"
231 ServerName example.com
232 ServerAdmin someone@email
233 <IfDefine !MonitorPort>
234 Listen [$${:listening-ip}]:$${monitor-parameters:port}
237 DocumentRoot "$${:document-root}"
238 ErrorLog "$${:error-log}"
239 LoadModule unixd_module modules/mod_unixd.so
240 LoadModule access_compat_module modules/mod_access_compat.so
241 LoadModule authz_core_module modules/mod_authz_core.so
242 LoadModule authn_core_module modules/mod_authn_core.so
243 LoadModule authz_host_module modules/mod_authz_host.so
244 LoadModule mime_module modules/mod_mime.so
245 LoadModule cgid_module modules/mod_cgid.so
246 LoadModule dir_module modules/mod_dir.so
247 LoadModule ssl_module modules/mod_ssl.so
248 LoadModule alias_module modules/mod_alias.so
249 LoadModule autoindex_module modules/mod_autoindex.so
250 LoadModule auth_basic_module modules/mod_auth_basic.so
251 LoadModule authz_user_module modules/mod_authz_user.so
252 LoadModule authn_file_module modules/mod_authn_file.so
255 <IfDefine !SSLConfigured>
257 SSLCertificateFile $${ca-httpd:cert-file}
258 SSLCertificateKeyFile $${ca-httpd:key-file}
259 SSLRandomSeed startup builtin
260 SSLRandomSeed connect builtin
261 SSLRandomSeed startup /dev/urandom 256
262 SSLRandomSeed connect builtin
263 SSLProtocol -ALL +SSLv3 +TLSv1
264 SSLHonorCipherOrder On
265 SSLCipherSuite RC4-SHA:HIGH:!ADH
268 ScriptSock $${:cgid-pid-file}
269 <Directory $${:document-root}>
272 SSLOptions +StrictRequire
275 AddHandler cgi-script .cgi
276 DirectoryIndex $${deploy-index:filename}
278 Alias /private/ $${monitor-parameters:private-directory}/
279 <Directory $${monitor-parameters:private-directory}>
281 Deny from env=AUTHREQUIRED
287 AuthName "Private access"
288 AuthUserFile "$${monitor-parameters:htaccess-file}"
290 Options Indexes FollowSymLinks
293 output = $${monitor-directory:etc}/cgi-httpd.conf
294 listening-ip = $${slap-parameters:ipv6-random}
296 htdocs = $${monitor-directory:www}
297 pid-file = $${monitor-directory:run}/cgi-httpd.pid
298 cgid-pid-file = $${monitor-directory:run}/cgi-httpd-cgid.pid
299 document-root = $${monitor-directory:www}
300 error-log = $${monitor-directory:log}/cgi-httpd-error-log
303 recipe = slapos.cookbook:wrapper
304 apache-executable = ${apache:location}/bin/httpd
305 command-line = $${:apache-executable} -f $${cgi-httpd-configuration-file:output} -DFOREGROUND
306 wrapper-path = $${ca-httpd:executable}
308 [cgi-httpd-graceful-wrapper]
309 recipe = slapos.cookbook:wrapper
310 command-line = kill -USR1 $(cat $${cgi-httpd-configuration-file:pid-file})
311 wrapper-path = $${monitor-directory:etc-run}/cgi-httpd-graceful
314 recipe = slapos.cookbook:check_url_available
315 path = $${monitor-directory:promises}/monitor
316 url = https://[$${cgi-httpd-configuration-file:listening-ip}]:$${monitor-parameters:port}/$${deploy-index:filename}
318 dash_path = ${dash:location}/bin/dash
319 curl_path = ${curl:location}/bin/curl
321 [publish-connection-informations]
322 recipe = slapos.cookbook:publish
323 monitor_url = $${monitor-parameters:url}
324 IMPORTANT_monitor_info = Change the monitor_password as soon as possible ! Default is : $${public:monitor-password} . You can change it in the setting.cgi section of your monitorin interface