instance-pull-backup.cfg.in 7.62 KB
Newer Older
1 2 3
[buildout]

parts =
4
  publish-connection-information
5 6 7 8 9 10
  pbs
  logrotate
  cron
  cron-entry-logrotate
  sshkeys-authority
  sshkeys-dropbear
11 12


13
## Monitor for pbs
14
  monitor-base
15
  monitor-check-resilient-feed-file
16

17
extends = ${monitor2-template:rendered}
18 19 20 21
eggs-directory = ${buildout:eggs-directory}
develop-eggs-directory = ${buildout:develop-eggs-directory}
offline = true

22

23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
#----------------
#--
#-- Creation of all needed directories.

[rootdirectory]
recipe = slapos.cookbook:mkdirectory
etc = $${buildout:directory}/etc
home = $${buildout:directory}/home
srv = $${buildout:directory}/srv
bin = $${buildout:directory}/bin
tmp = $${buildout:directory}/tmp
var = $${buildout:directory}/var

[basedirectory]
recipe = slapos.cookbook:mkdirectory
log = $${rootdirectory:var}/log
39
services = $${rootdirectory:etc}/service
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
run = $${rootdirectory:var}/run
backup = $${rootdirectory:srv}/backup
promises = $${rootdirectory:etc}/promise
ssh-home = $${rootdirectory:home}/ssh
notifier = $${rootdirectory:etc}/notifier

[directory]
recipe = slapos.cookbook:mkdirectory
logrotate-entries = $${rootdirectory:etc}/logrotate.d
logrotate-backup = $${basedirectory:backup}/logrotate
cronstamps = $${rootdirectory:etc}/cronstamps
cron-entries = $${rootdirectory:etc}/cron.d
crontabs = $${rootdirectory:etc}/crontabs
cronoutput = $${basedirectory:log}/cron-ouput
pbs-backup = $${basedirectory:backup}/pbs
sshkeys = $${rootdirectory:srv}/sshkeys
pbs-wrappers = $${rootdirectory:bin}/pbs
dot-ssh = $${basedirectory:ssh-home}/.ssh
notifier-feeds = $${basedirectory:notifier}/feeds
notifier-callbacks = $${basedirectory:notifier}/callbacks



#----------------
#--
#-- Set up the equeue and notifier.
66

67 68 69
[equeue]
recipe = slapos.cookbook:equeue
socket = $${basedirectory:run}/equeue.sock
70
lockfile = $${basedirectory:run}/equeue.lock
71 72 73 74 75
log = $${basedirectory:log}/equeue.log
database = $${rootdirectory:srv}/equeue.db
wrapper = $${basedirectory:services}/equeue
equeue-binary = ${buildout:bin-directory}/equeue

76 77
# notifier.notify adds the [exporter, notifier] to the execution queue
# notifier.notify.callback sets up a callback
78
[notifier]
79 80 81 82 83 84
recipe = slapos.recipe.template:jinja2
template = ${template-wrapper:output}
rendered = $${:wrapper}
wrapper = $${basedirectory:services}/notifier
mode = 0700
command = ${buildout:bin-directory}/pubsubserver --callbacks $${directory:notifier-callbacks} --feeds $${directory:notifier-feeds} --equeue-socket $${equeue:socket} --logfile $${basedirectory:log}/notifier.log $${:host} $${:port}
85
host = $${slap-network-information:global-ipv6}
86
port = 8088
87 88 89
context =
  key content notifier:command

90

91 92 93 94 95 96 97
[logrotate-entry-equeue]
<= logrotate
recipe = slapos.cookbook:logrotate.d
name = equeue
log = $${equeue:log}
frequency = daily
rotate-num = 30
98

99

100 101 102 103
#----------------
#--
#-- The pull-backup-server contains every backup (incremental)
#-- to prevent a corrupt dump from destroying everything.
104

105 106 107
[pbs]
<= notifier
recipe = slapos.cookbook:pbs
108
client = true
109 110 111 112
feeds = $${directory:notifier-feeds}
callbacks = $${directory:notifier-callbacks}
equeue-socket = $${equeue:socket}
notifier-binary = ${buildout:bin-directory}/pubsubnotifier
113 114 115 116
rdiffbackup-binary = ${buildout:bin-directory}/rdiff-backup
sshclient-binary = $${dropbear-client:wrapper}
known-hosts = $${directory:dot-ssh}/known_hosts
promises-directory = $${basedirectory:promises}
117
directory = $${directory:pbs-backup}
118 119
cron-entries = $${cron:cron-entries}
wrappers-directory = $${directory:pbs-wrappers}
120
run-directory = $${basedirectory:run}
121 122
# XXX: this should be named "notifier-host"
notifier-url = http://[$${notifier:host}]:$${notifier:port}
123
slave-instance-list = $${slap-parameter:slave_instance_list}
124
ignore-known-hosts-file = $${slap-parameter:ignore-known-hosts-file}
125

126

127 128 129
#----------------
#--
#-- Deploy cron.
130 131 132 133 134 135 136 137 138 139

[cron]
recipe = slapos.cookbook:cron
dcrond-binary = ${dcron:location}/sbin/crond
cron-entries = $${directory:cron-entries}
crontabs = $${directory:crontabs}
cronstamps = $${directory:cronstamps}
catcher = $${cron-simplelogger:wrapper}
binary = $${basedirectory:services}/crond

140 141 142 143 144 145 146 147 148 149
[cron-simplelogger]
recipe = slapos.cookbook:simplelogger
wrapper = $${rootdirectory:bin}/cron_simplelogger
log = $${basedirectory:log}/crond.log


#----------------
#--
#-- Deploy logrotate.

150 151 152 153 154 155 156 157 158 159
[cron-entry-logrotate]
<= cron
recipe = slapos.cookbook:cron.d
name = logrotate
frequency = 0 0 * * *
command = $${logrotate:wrapper}

[logrotate]
recipe = slapos.cookbook:logrotate
# Binaries
160
logrotate-binary = ${logrotate:location}/usr/sbin/logrotate
161 162 163 164 165 166 167 168 169
gzip-binary = ${gzip:location}/bin/gzip
gunzip-binary = ${gzip:location}/bin/gunzip
# Directories
wrapper = $${rootdirectory:bin}/logrotate
conf = $${rootdirectory:etc}/logrotate.conf
logrotate-entries = $${directory:logrotate-entries}
backup = $${directory:logrotate-backup}
state-file = $${rootdirectory:srv}/logrotate.status

170
[logrotate-entry-cron]
171 172 173 174 175 176 177 178
<= logrotate
recipe = slapos.cookbook:logrotate.d
name = cron
log = $${cron-simplelogger:log}
frequency = daily
rotate-num = 30


179 180 181
#----------------
#--
#-- sshkeys
182

183
[sshkeys-directory]
184
recipe = slapos.cookbook:mkdirectory
185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203
requests = $${directory:sshkeys}/requests
keys = $${directory:sshkeys}/keys

[sshkeys-authority]
recipe = slapos.cookbook:sshkeys_authority
request-directory = $${sshkeys-directory:requests}
keys-directory = $${sshkeys-directory:keys}
wrapper = $${basedirectory:services}/sshkeys_authority
keygen-binary = ${dropbear:location}/bin/dropbearkey

[sshkeys-dropbear]
<= sshkeys-authority
recipe = slapos.cookbook:sshkeys_authority.request
name = pbs
type = rsa
executable = $${dropbear-client:wrapper}
public-key = $${dropbear-client:identity-file}.pub
private-key = $${dropbear-client:identity-file}
wrapper = $${rootdirectory:bin}/do_backup
204 205


206 207 208 209 210 211 212 213 214 215 216 217 218 219 220
#----------------
#--
#-- Dropbear.

[dropbear-client]
recipe = slapos.cookbook:dropbear.client
dbclient-binary = ${dropbear:location}/bin/dbclient
wrapper = $${rootdirectory:bin}/ssh
home = $${basedirectory:ssh-home}
identity-file = $${basedirectory:ssh-home}/id_rsa


#----------------
#--
#-- Slave instance list (empty default).
221 222 223 224 225
[htpasswd]
recipe = slapos.cookbook:generate.password
storage-path = $${directory:etc}/.monitor_user
bytes = 8
username = admin
226 227 228

[slap-parameter]
slave_instance_list = []
229
ignore-known-hosts-file = false
230 231 232 233 234
monitor-cors-domains = 
monitor-httpd-port = 8070
monitor-title = PBS Instance
monitor-password = $${htpasswd:passwd}
monitor-username = $${htpasswd:username}
235 236 237 238 239 240


#----------------
#--
#-- Publish instance parameters.

241
[publish-connection-information]
242 243 244 245
recipe = slapos.cookbook:publish
ssh-key = $${sshkeys-dropbear:public-key-value}
notification-url = http://[$${notifier:host}]:$${notifier:port}/notify
feeds-url = http://[$${notifier:host}]:$${notifier:port}/get/
246 247 248 249
monitor-base-url = $${publish:monitor-base-url}
monitor-url = $${publish:monitor-url}
monitor-user = $${publish:monitor-user}
monitor-password = $${publish:monitor-password}
250 251 252 253 254

#----------------
#--
#-- Monitor

255 256 257 258 259 260
[monitor-instance-parameter]
monitor-httpd-port = $${slap-parameter:monitor-httpd-port}
monitor-title = $${slap-parameter:monitor-title}
cors-domains = $${slap-parameter:monitor-cors-domains}
username = $${slap-parameter:monitor-username}
password = $${slap-parameter:monitor-password}
261

262 263 264 265
[monitor-conf-parameters]
private-path-list += 
  $${directory:logrotate-backup}
  $${basedirectory:log}
266 267 268 269

[monitor-check-resilient-feed-file]
recipe = slapos.recipe.template:jinja2
template = ${template-monitor-check-resilient-feed:location}/${template-monitor-check-resilient-feed:filename}
270
rendered = $${monitor-directory:reports}/check-create-resilient-feed-files
271 272 273
mode = 700
context =
  key input_feed_directory directory:notifier-feeds
274
  key monitor_feed_directory monitor-directory:public
275
  key base_url publish-connection-information:feeds-url
276
  raw python_executable ${buildout:executable}