instance-runner.cfg 11.7 KB
Newer Older
1 2
[buildout]
parts =
3 4
  nginx_conf
  nginx-launcher
5
  cloud9
6 7
  certificate-authority
  ca-nginx
8
  ca-node-frontend
9
  slaprunner
10
  test-runner
11
  sshkeys-dropbear-runner
12
  dropbear-server-add-authorized-key
13
  sshkeys-authority
14
  publish-connection-informations
15 16 17
  slaprunner-promise
  slaprunner-frontend-promise
  cloud9-promise
18
  cloud9-frontend-promise
19
  dropbear-promise
20
  symlinks
21 22 23
  request-cloud9-frontend
  node-frontend-promise
  nginx-promise
24 25 26 27 28

eggs-directory = ${buildout:eggs-directory}
develop-eggs-directory = ${buildout:develop-eggs-directory}
offline = true

29 30

# Create all needed directories
31
[directory]
32 33 34 35 36
recipe = slapos.cookbook:mkdirectory
etc = $${buildout:directory}/etc/
var = $${buildout:directory}/var/
srv = $${buildout:directory}/srv/
bin = $${buildout:directory}/bin/
37
tmp = $${buildout:directory}/tmp/
38

39 40 41 42 43 44 45 46 47
sshkeys = $${:srv}/sshkeys
services = $${:etc}/service/
scripts = $${:etc}/run/
ssh = $${:etc}/ssh/
log = $${:var}/log/
run = $${:var}/run/
backup = $${:srv}/backup/
promises = $${:etc}/promise/
test = $${:etc}/test/
48
nginx-data = $${directory:srv}/nginx
49 50
ca-dir = $${:srv}/ssl

51 52 53

[runnerdirectory]
recipe = slapos.cookbook:mkdirectory
54 55
home = $${directory:srv}/runner/
test = $${directory:srv}/test/
56 57 58
project = $${:home}/project
software-root = $${:home}/software
instance-root = $${:home}/instance
59 60 61
project-test = $${:test}/project
software-test = $${:test}/software
instance-test = $${:test}/instance
62
sessions = $${buildout:directory}/.sessions
63

64 65
#Create password recovery code for slaprunner
[recovery-code]
66
recipe = slapos.cookbook:generate.password
67
storage-path = $${directory:etc}/.rcode
68 69
bytes = 4

70 71 72
# Deploy cloud9 and slaprunner
[cloud9]
recipe = slapos.cookbook:cloud9
73
ip = $${slap-network-information:local-ipv4}
74
port = 4443
75
wrapper = $${directory:services}/cloud9
76 77
working-directory = $${runnerdirectory:home}
git-binary = ${git:location}/bin/git
Cédric de Saint Martin's avatar
Cédric de Saint Martin committed
78
node-binary = ${nodejs:location}/bin/node
79
cloud9 = ${cloud9:executable}
80 81 82

[slaprunner]
recipe = slapos.cookbook:slaprunner
83 84 85 86 87
slaprunner = ${buildout:directory}/bin/slaprunner
slapgrid_sr = ${buildout:directory}/bin/slapgrid-sr
slapgrid_cp = ${buildout:directory}/bin/slapgrid-cp
slapproxy = ${buildout:directory}/bin/slapproxy
supervisor = ${buildout:directory}/bin/slapgrid-supervisorctl
88
git-binary = ${git:location}/bin/git
89
slapos.cfg = $${directory:etc}/slapos.cfg
90 91 92 93
working-directory = $${runnerdirectory:home}
project-directory = $${runnerdirectory:project}
software-directory = $${runnerdirectory:software-root}
instance-directory = $${runnerdirectory:instance-root}
94 95 96
etc_dir = $${directory:etc}
log_dir =  $${directory:log}
run_dir = $${directory:run}
97 98 99
ssh_client = $${sshkeys-dropbear-runner:wrapper}
public_key = $${sshkeys-dropbear-runner:public-key}
private_key = $${sshkeys-dropbear-runner:private-key}
100 101
ipv4 = $${slap-network-information:local-ipv4}
ipv6 = $${slap-network-information:global-ipv6}
Jean-Baptiste Petre's avatar
Jean-Baptiste Petre committed
102
proxy_port = 50000
103
runner_port = 50005
104
partition-amount = $${slap-parameter:instance-amount}
105
cloud9-url = $${cloud9:access-url}
106
wrapper = $${directory:services}/slaprunner
107
debug = $${slap-parameter:debug}
108

109 110 111 112
[test-runner]
<= slaprunner
recipe = slapos.cookbook:slaprunner.test
slaprunnertest = ${buildout:directory}/bin/slaprunnertest
113
slapos.cfg = $${directory:etc}/slapos-test.cfg
114 115 116 117
working-directory = $${runnerdirectory:test}
project-directory = $${runnerdirectory:project-test}
software-directory = $${runnerdirectory:software-test}
instance-directory = $${runnerdirectory:instance-test}
118
proxy_port = 8602
119 120 121 122 123 124 125 126 127
wrapper = $${directory:bin}/runTestSuite
etc_dir = $${directory:test}


# Deploy dropbear (minimalist SSH server)
[sshkeys-directory]
recipe = slapos.cookbook:mkdirectory
requests = $${directory:sshkeys}/requests/
keys = $${directory:sshkeys}/keys/
128

129 130 131 132
[sshkeys-authority]
recipe = slapos.cookbook:sshkeys_authority
request-directory = $${sshkeys-directory:requests}
keys-directory = $${sshkeys-directory:keys}
133
wrapper = $${directory:services}/sshkeys_authority
134 135
keygen-binary = ${dropbear:location}/bin/dropbearkey

136
[dropbear-runner-server]
137 138
recipe = slapos.cookbook:dropbear
host = $${slap-network-information:global-ipv6}
139
port = 22222
140
home = $${directory:ssh}
141 142
wrapper = $${directory:bin}/runner_sshd
shell = ${bash:location}/bin/bash
143 144 145
rsa-keyfile = $${directory:ssh}/server_key.rsa
dropbear-binary = ${dropbear:location}/sbin/dropbear

146
[sshkeys-dropbear-runner]
147 148 149 150
<= sshkeys-authority
recipe = slapos.cookbook:sshkeys_authority.request
name = dropbear
type = rsa
151 152 153 154
executable = $${dropbear-runner-server:wrapper}
public-key = $${dropbear-runner-server:rsa-keyfile}.pub
private-key = $${dropbear-runner-server:rsa-keyfile}
wrapper = $${directory:services}/runner_sshd
155 156

[dropbear-server-add-authorized-key]
157
<= dropbear-runner-server
158 159 160
recipe = slapos.cookbook:dropbear.add_authorized_key
key = $${slap-parameter:authorized-key}

161 162 163 164 165 166 167 168 169
#---------------------
#--
#-- Set node frontend

[node-frontend]
launcher = $${directory:bin}/node-frontend
ip = $${slap-network-information:global-ipv6}
port = $${cloud9:port}
access-url = https://[$${:ip}]:$${:port}
170

171 172 173 174 175 176 177 178 179 180
[node-frontend-launcher]
recipe = slapos.recipe.template:jinja2
template = ${node-frontend-template:location}/${node-frontend-template:filename}
rendered = $${node-frontend:launcher}
mode = 700
context =
	key ip node-frontend:ip
	key port node-frontend:port
	key key ca-node-frontend:key-file
	key certificate ca-node-frontend:cert-file
181
	key backend_ip nginx-frontend:local-ip
182 183 184 185 186 187 188
	key backend_port nginx-frontend:port
	raw shell_path ${bash:location}/bin/bash
	raw node_env ${buildout:parts-directory}:${npm-modules:location}/node_modules
	raw node_path ${nodejs:location}/bin/node
	raw conf_path ${simple-proxy:location}/${simple-proxy:filename}

#---------------------------
189
#--
190 191
#-- Set nginx frontend

192 193 194 195 196 197 198 199 200 201 202 203
[tempdirectory]
recipe = slapos.cookbook:mkdirectory
client_body_temp_path = $${directory:tmp}/client_body_temp_path
proxy_temp_path = $${directory:tmp}/proxy_temp_path
fastcgi_temp_path = $${directory:tmp}/fastcgi_temp_path
uwsgi_temp_path = $${directory:tmp}/uwsgi_temp_path
scgi_temp_path = $${directory:tmp}/scgi_temp_path

[nginx-frontend]
# Options
nb_workers = 2
# Network
204
local-ip = $${slap-network-information:local-ipv4}
205
port = 30001
206 207
global-ip = $${slap-network-information:global-ipv6}
global-port = $${slaprunner:runner_port}
208
# Backend
209 210 211 212
cloud9-ip = $${cloud9:ip}
cloud9-port = $${cloud9:port}
runner-ip = $${slaprunner:ipv4}
runner-port = $${slaprunner:runner_port}
213 214 215 216 217 218 219 220 221 222 223 224 225
# SSL
ssl-certificate = $${ca-nginx:cert-file}
ssl-key = $${ca-nginx:key-file}
# Log
path_pid = $${directory:run}/nginx.pid
path_log = $${directory:log}/nginx.log
path_access_log = $${directory:log}/nginx.access.log
path_error_log = $${directory:log}/nginx.error.log
path_tmp = $${buildout:directory}/tmp
# Config files
path_nginx_conf = $${directory:etc}/nginx.conf
# Executables
bin_nginx = ${nginx:location}/sbin/nginx
226
bin_launcher = $${directory:bin}/launcher
227 228
# Utils
path_shell = ${dash:location}/bin/dash
229 230
# Misc.
etc_dir = $${directory:etc}
231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248


[nginx_conf]
recipe = slapos.recipe.template:jinja2
template = ${template_nginx_conf:location}/${template_nginx_conf:filename}
rendered = $${nginx-frontend:path_nginx_conf}
context =
    section param_nginx_frontend nginx-frontend
    section param_tempdir tempdirectory

[nginx-launcher]
recipe = slapos.recipe.template:jinja2
template = ${template_launcher:location}/${template_launcher:filename}
rendered = $${nginx-frontend:bin_launcher}
mode = 700
context =
    section param_nginx_frontend nginx-frontend

249
#--------------------
250
#--
251
#-- ssl certificates
252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276

[certificate-authority]
recipe = slapos.cookbook:certificate_authority
openssl-binary = ${openssl:location}/bin/openssl
ca-dir = $${directory:ca-dir}
requests-directory = $${cadirectory:requests}
wrapper = $${directory:services}/certificate_authority
ca-private = $${cadirectory:private}
ca-certs = $${cadirectory:certs}
ca-newcerts = $${cadirectory:newcerts}
ca-crl = $${cadirectory:crl}

[cadirectory]
recipe = slapos.cookbook:mkdirectory
requests = $${directory:ca-dir}/requests/
private = $${directory:ca-dir}/private/
certs = $${directory:ca-dir}/certs/
newcerts = $${directory:ca-dir}/newcerts/
crl = $${directory:ca-dir}/crl/

[ca-nginx]
<= certificate-authority
recipe = slapos.cookbook:certificate_authority.request
key-file = $${cadirectory:certs}/nginx_frontend.key
cert-file = $${cadirectory:certs}/nginx_frontend.crt
277 278
executable = $${nginx-launcher:rendered}
wrapper = $${directory:services}/nginx-frontend
279 280 281
# Put domain name
name = example.com

282 283 284 285 286 287 288 289 290
[ca-node-frontend]
<= certificate-authority
recipe = slapos.cookbook:certificate_authority.request
key-file = $${cadirectory:certs}/nodejs.key
cert-file = $${cadirectory:certs}/nodejs.crt
executable = $${node-frontend-launcher:rendered}
wrapper = $${directory:services}/node-frontend
# Put domain name
name = example.com
291

292
#--------------------
293 294
#--
#-- Request frontend
295

296 297
[request-frontend]
<= slap-connection
298
recipe = slapos.cookbook:requestoptional
299
name = SlapRunner Frontend
300 301 302
# XXX We have hardcoded SR URL here.
software-url = http://git.erp5.org/gitweb/slapos.git/blob_plain/HEAD:/software/apache-frontend/software.cfg
slave = true
303 304 305
config = url domain
config-url = $${node-frontend:access-url}
config-domain = $${slap-parameter:frontend-domain}
306
return = site_url domain
307

308 309 310 311 312 313
[request-cloud9-frontend]
<= slap-connection
recipe = slapos.cookbook:requestoptional
name = Cloud9 Frontend
software-url = http://git.erp5.org/gitweb/slapos.git/blob_plain/HEAD:/software/apache-frontend/software.cfg
slave = true
314
config = url domain
315
config-url = $${node-frontend:access-url}
316
config-domain = $${slap-parameter:cloud9-frontend-domain}
317
return = site_url domain
318

319
#--------------------------------------
320 321
#--
#-- Send informations to SlapOS Master
322

323 324
[publish-connection-informations]
recipe = slapos.cookbook:publish
325
1_info = Set your passord in slaprunner in order to access cloud9
326
backend_url = $${slaprunner:access-url}
327
url =  https://$${request-frontend:connection-domain}
328 329
cloud9_backend_url = $${node-frontend:access-url}
cloud9_url = https://$${request-cloud9-frontend:connection-domain}
330
ssh_command = ssh $${dropbear-runner-server:host} -p $${dropbear-runner-server:port}
331
password_recovery_code = $${recovery-code:passwd}
332

333 334 335
#---------------------------
#--
#-- Deploy promises scripts
Jean-Baptiste Petre's avatar
Jean-Baptiste Petre committed
336

337 338
[slaprunner-promise]
recipe = slapos.cookbook:check_port_listening
339
path = $${directory:promises}/slaprunner
340 341
hostname = $${slaprunner:ipv6}
port = $${slaprunner:runner_port}
Jean-Baptiste Petre's avatar
Jean-Baptiste Petre committed
342

343
[slaprunner-frontend-promise]
Jean-Baptiste Petre's avatar
Jean-Baptiste Petre committed
344
recipe = slapos.cookbook:check_url_available
345
path = $${directory:promises}/slaprunner_frontend
346
url = https://$${request-frontend:connection-domain}
Jean-Baptiste Petre's avatar
Jean-Baptiste Petre committed
347 348 349
dash_path = ${dash:location}/bin/dash
curl_path = ${curl:location}/bin/curl

350 351
[cloud9-promise]
recipe = slapos.cookbook:check_url_available
352
path = $${directory:promises}/cloud9
353
url = http://$${cloud9:ip}:$${cloud9:port}
354 355 356
dash_path = ${dash:location}/bin/dash
curl_path = ${curl:location}/bin/curl

357 358 359 360 361 362 363 364
[cloud9-frontend-promise]
recipe = slapos.cookbook:check_url_available
path = $${directory:promises}/cloud9-frontend-promise
url = $${publish-connection-informations:cloud9_url}
check-secure = 1
dash_path = ${dash:location}/bin/dash
curl_path = ${curl:location}/bin/curl

365 366 367 368 369 370 371 372 373
[node-frontend-promise]
recipe = slapos.cookbook:check_port_listening
path = $${directory:promises}/node-frontend
hostname = $${node-frontend:ip}
port = $${node-frontend:port}

[nginx-promise]
recipe = slapos.cookbook:check_port_listening
path = $${directory:promises}/nginx
374
hostname = $${nginx-frontend:local-ip}
375 376
port = $${nginx-frontend:port}

377 378
[dropbear-promise]
recipe = slapos.cookbook:check_port_listening
379
path = $${directory:promises}/dropbear
380 381
hostname = $${dropbear-runner-server:host}
port = $${dropbear-runner-server:port}
382

383 384
[symlinks]
recipe = cns.recipe.symlink
385
symlink_target = $${directory:bin}
386
symlink_base = ${buildout:directory}/bin
387 388 389 390

[slap-parameter]
# Default value if no ssh key is specified
authorized-key =
391
# Default value of instances number in slaprunner
392
instance-amount = 10
393 394 395 396
debug = false
cloud9-frontend-domain =
frontend-domain =