gitlab: Add helper for setting up promises
[slapos.git] / software / gitlab / instance-gitlab.cfg.in
1 # GitLab instance
2 # NOTE instance/software layout is inspired by gitlab omnibus
3 # NOTE all services are interconnected via unix sockets - because of easier
4 #      security and performance reasons (unix has 2x less latency and more
5 #      throughput compared to tcp over loopback).
6 [buildout]
7 parts =
8     directory
9
10     service-cron
11
12 # std stuff for slapos instance
13 eggs-directory = {{ eggs_directory }}
14 develop-eggs-directory = {{ develop_eggs_directory }}
15 offline = true
16
17
18 ##################################
19 #   GitLab instance parameters   #
20 ##################################
21
22 [instance-parameter]
23 # std stuff to fetch slapos instance parameters
24 recipe  = slapos.cookbook:slapconfiguration
25 computer= ${slap-connection:computer-id}
26 partition=${slap-connection:partition-id}
27 url     = ${slap-connection:server-url}
28 key     = ${slap-connection:key-file}
29 cert    = ${slap-connection:cert-file}
30
31
32
33 #############################
34 #   GitLab instance setup   #
35 #############################
36
37 # 1. directories
38 [directory]
39 recipe  = slapos.cookbook:mkdirectory
40 home    = ${buildout:directory}
41 bin     = ${:home}/bin
42 etc     = ${:home}/etc
43 var     = ${:home}/var
44 log     = ${:var}/log
45 run     = ${:var}/run
46 srv     = ${:home}/srv
47 # slapos startup/service/promise scripts live here:
48 startup = ${:etc}/run
49 service = ${:etc}/service
50 promise = ${:etc}/promise
51
52
53
54
55 # 2. services
56
57 # [promise-<something>] to generate promise wrapper <something>
58 [promise-wrapper]
59 recipe  = slapos.cookbook:wrapper
60 wrapper-path = !py! '${directory:promise}/' + '${:_buildout_section_name_}'[8:]
61
62
63 #############
64 #   cron    #
65 #############
66 [cron-dir]
67 recipe  = slapos.cookbook:mkdirectory
68 cron.d  = ${directory:etc}/cron.d
69 crontabs= ${directory:srv}/cron/crontabs
70 cronstamps = ${directory:var}/cron/cronstamps
71 log     = ${directory:log}/cron
72
73 [service-cron]
74 recipe  = slapos.cookbook:cron
75 binary  = ${directory:service}/crond
76 cron-entries    = ${cron-dir:cron.d}
77 crontabs        = ${cron-dir:crontabs}
78 cronstamps      = ${cron-dir:cronstamps}
79 catcher         = ${cron-simplelogger:wrapper}
80
81 dcrond-binary   = {{ dcron_bin }}
82
83 depends =
84     ${logrotate-entry-cron:recipe}
85
86 # "mailer" that cron uses to emit messages to logfile
87 [cron-simplelogger]
88 recipe  = slapos.cookbook:simplelogger
89 wrapper = ${directory:bin}/${:_buildout_section_name_}
90 log     = ${cron-dir:log}/cron.log
91
92
93 # base entry for clients who registers to cron
94 [cron-entry]
95 recipe  = slapos.cookbook:cron.d
96 # name  = <section-name>.strip_prefix('cron-entry-')
97 # XXX len() is not available in !py! - 11 hardcoded
98 name    = !py!'${:_buildout_section_name_}' [11:]
99 # NOTE _not_ ${service-cron:cron-entries}  - though the value is the same we do
100 # not want service-cron to be instantiated just if a cron-entry is registered.
101 cron-entries = ${cron-dir:cron.d}
102
103 # cron logs are also rotated
104 [logrotate-entry-cron]
105 <= logrotate-entry
106 log     = ${cron-dir:log}/*.log
107
108
109 #######################################
110 #   logrotate base for all services   #
111 #######################################
112 [logrotate-dir]
113 recipe  = slapos.cookbook:mkdirectory
114 srv     = ${directory:srv}/logrotate
115 entries = ${directory:etc}/logrotate.d
116
117 [logrotate]
118 recipe  = slapos.cookbook:logrotate
119 wrapper = ${directory:bin}/${:_buildout_section_name_}
120 conf    = ${directory:etc}/logrotate.conf
121 logrotate-entries   = ${logrotate-dir:entries}
122 state-file  = ${logrotate-dir:srv}/logrotate.status
123
124 logrotate-binary    = {{ logrotate_bin }}
125 gzip-binary     = {{ gzip_bin }}
126 gunzip-binary   = {{ gunzip_bin }}
127
128 depend  = ${cron-entry-logrotate:recipe}
129
130
131 # base entry for clients who registers to logrotate
132 [logrotate-entry]
133 recipe  = slapos.cookbook:logrotate.d
134 logrotate-entries   = ${logrotate:logrotate-entries}
135 # name  = <section-name>.strip_prefix('logrotate-entry-')
136 # XXX len is not available in !py! - 16 hardcoded
137 name    = !py!'${:_buildout_section_name_}'[16:]
138 # NOTE frequency is hardcoded to `daily` in slapos.cookbook:logrotate.d
139 # NOTE backup is also used to add custom logrotate options (hack)
140 backup  = ...
141 # TODO settle whether we need/want olddir or not
142     noolddir
143 # override create emitted by slapos.cookbook:logrotate.d
144     nocreate
145 # do not move log file and this way we do not need to signal its program to
146 # reopen the log. There are a lot of bugs when on such reopen / restart /
147 # graceful-restart something bad happens. Even if copytruncate is a bit racy
148 # and can loose some data, it is better to keep the system the stable way.
149     copytruncate
150
151
152 # hook logrotate into cron
153 [cron-entry-logrotate]
154 <= cron-entry
155 time    = daily
156 command = ${logrotate:wrapper}