This commit is contained in:
Tobias Manske 2022-07-14 00:19:54 +02:00
parent f1b8f21704
commit bb9c2d5eef
Signed by: tobias
GPG Key ID: E83C743C1FC2F79A
4 changed files with 243 additions and 191 deletions

View File

@ -14,9 +14,14 @@
extensions:
- 'yml'
- 'yaml'
- file:
state: absent
dest: '{{ render_path }}'
changed_when: false
- file:
state: directory
dest: '{{ render_path }}/{{ item.path }}'
changed_when: false
with_filetree: './compose'
when: item.state == 'directory'
- name: Template Compose structure
@ -24,6 +29,7 @@
src: "{{ item.src }}"
dest: "{{ render_path }}/{{ item.path }}"
force: true
changed_when: false
with_filetree: './compose'
when: item.state == 'file' and item.path not in render_blacklist
- name: Copy blacklisted files
@ -31,69 +37,14 @@
src: "{{ item.src }}"
dest: "{{ render_path }}/{{ item.path }}"
force: true
changed_when: false
with_filetree: './compose'
when: item.state == 'file' and item.path in render_blacklist
- name: Provision Volumes from Snapshots
hosts: unprovisioned
# hosts: all
gather_facts: true
tasks:
- block:
- name: Gather file names
delegate_to: 127.0.0.1
find:
paths: ./backups
file_type: file
register: snapshot_files
- name: Filter names
set_fact:
volumes_to_provision: "{{ snapshot_files.files | selectattr('path', 'regex', '^.*-latest.tar.gz') | map(attribute='path') | map('regex_replace', '^backups/([a-zA-Z0-9_]+)-.*$', '\\1') }}"
- name: Print
ansible.builtin.debug:
var: volumes_to_provision
verbosity: 0
- ansible.builtin.file:
path: /home/core/backups
owner: core
state: directory
mode: '0755'
- name: Copy backups to host
copy:
src: "./backups/{{ item }}-latest.tar.gz"
dest: "/home/core/backups/{{ item }}-latest.tar.gz"
with_items: "{{ volumes_to_provision }}"
- name: Initialize Volumes
community.docker.docker_volume:
name: "{{ item }}"
state: present
with_items: "{{ volumes_to_provision }}"
- name: Provision Volume using alpine
community.docker.docker_container:
name: "restore-{{ item }}"
image: "alpine:latest"
state: started
volumes:
- "{{ item }}:/backup/{{ item }}"
- "/home/core/backups/{{ item }}-latest.tar.gz:/restore.tar.gz:ro,z"
auto_remove: true
entrypoint:
- tar
- -C
- /
- -xvf
- /restore.tar.gz
with_items: "{{ volumes_to_provision }}"
- set_fact:
provisioned: true
cacheable: true
when: ansible_facts['provisioned'] is undefined
- name: Backup
hosts: all
become: true
become_user: root
tasks:
- name: Read Variables
include_vars:
@ -118,6 +69,45 @@
dest: /root/.ssh/storagebox
mode: '0600'
owner: root
- name: Add Known Hosts entries
ansible.builtin.known_hosts:
path: "/root/.ssh/known_hosts"
name: "{{ backup.known_hosts.name }}"
key: "{{ backup.known_hosts.key }}"
- name: Restore from Backup
hosts: unprovisioned
become: true
become_user: root
gather_facts: true
tasks:
- block:
- name: Read Variables
include_vars:
dir: vars
extensions:
- 'yml'
- 'yaml'
- name: Install backup script
ansible.builtin.template:
src: restore.sh.j2
dest: /root/restore.sh
mode: '0700'
owner: root
- name: Restore from Borg
become: true
become_user: root
ansible.builtin.command:
chdir: /
cmd: bash /root/restore.sh
- name: Remove script from host
ansible.builtin.file:
path: /root/restore.sh
state: absent
- set_fact:
provisioned: true
cacheable: true
when: ansible_facts.provisioned is undefined
- name: Setup Registry credentials
hosts: all

View File

@ -29,7 +29,7 @@ borg create \
--compression none \
--exclude-caches \
--one-file-system \
--exclude "re:^/var/lib/docker/volumes/[a-z0-9]{64}/" \
--exclude "re:^/var/lib/docker/volumes/[a-z0-9]{64}/.*" \
::'{hostname}-{now}' \
/var/lib/docker/volumes

53
templates/restore.sh.j2 Executable file
View File

@ -0,0 +1,53 @@
#!/bin/sh
# Setting this, so the repo does not need to be given on the commandline:
# See the section "Passphrase notes" for more infos.
export BORG_PASSPHRASE='{{ backup.password }}'
export BORG_REPO=ssh://{{ backup.remote.user }}@{{ backup.remote.url }}
export BORG_RSH='ssh -i /root/.ssh/storagebox'
{% if provision.from_backup.name is defined %}
RESTORE_FROM={{ provision.from_backup.name }}
{% else %}
RESTORE_FROM=$(borg list --short --sort-by timestamp --last 1)
{% endif %}
{% raw %}
# some helpers and error handling:
info() { printf "\n%s %s\n\n" "$( date )" "$*" >&2; }
trap 'echo $( date ) Backup interrupted >&2; exit 2' INT TERM
# Backup the most important directories into an archive named after
# the machine this script is currently running on:
# Starting restore
info "Starting Restore from backup"
cd /
borg extract \
--list \
--exclude "re:^/var/lib/docker/volumes/[a-z0-9]{64}/.*" \
"::${RESTORE_FROM}"
restore_exit=$?
# use highest exit code as global exit code
global_exit=$restore_exit
if [ ${global_exit} -eq 0 ]; then
info "Restore finished successfully"
elif [ ${global_exit} -eq 1 ]; then
info "Restore finished with warnings"
else
info "Restore finished with errors"
fi
exit ${global_exit}
{% endraw %}

View File

@ -1,134 +1,143 @@
$ANSIBLE_VAULT;1.2;AES256;secrets
62396637613636636133303630393965343966633264303038373937353963333361333336343537
6139333063623931343137383233636338373437373366350a633539303166643930346637616365
63666164313137386332323766346435653965323438386165656330343264376139323361326162
3631393035393462390a623963306230623763613533653431343262326434303532613138666334
32373331656237656632333731363435343733353438393362363261396130643166666530643466
33613036343639393865626438356430373132343531383639363461346533323835643166376435
65343464376432633836656364623430373061323431333835353233633032313630613463353330
31323234396435363133306538656161643731396364346131666436366464383965336131363465
30613261346532383539306237373661336466623631316566376432383765646361363537646235
64633265396464366365393666323237646165616661336337303064323733386435316331306364
39393939613836636635653135326236626633636665386231616137636361663564363030666331
30353337333434653335666466633131383662366635623963343037666330303436316561613961
63613966346337646466613737353865646434376637326235313938633032656635646233646661
62643732303065613730396631393561353763633236333037353764303161613162613333323032
36326330323766323136373331353262313735323336646564333538383266343564376537336433
66616264626631373039616265346532633537306430326538303237306334363038646234613063
65383832313061343337303361363634323664343961623535633662323637393830306334353830
62643835643934363262366664646335303936376461316262616366626639633162343266336231
63326136633036316635386438356231623236623236386464633831303833323561643965336430
34643633613933396530346464326232626434393964373763326539353238326534396261663935
66306664623565626364323864363338656632626533303264346662663966643961626632303231
63396437373538343038396337396234653633396636613536386462393331643866383135636636
63343265623662326261356332303535616435303330313730373139333533626639303538336433
39626462313630333338333564313031323034643932623035306435303265616465353437636532
30336430613664373934333231613961386535656135636437613031363162613264326136623734
35643862343636653363343230396335376236323062386236623632666166353863313634306463
32373162353832623531626332363264363733306361386634383631623734336332373130366336
31626435356664646461333936376439623436353764616361396639343039633134353338323334
63623038323164623538613363613863383062383034653435653435346138633264616631396235
31326635616531363233393466656530633936366333333133363131303536353764353539623733
32333134383232616235326538313562336663613165346136393465616436613133653332306239
61343037396534303031656534363862366534313263643438623131663363306265643233336563
35623439656163666438653738306538646538336138613865323663626434306461313064323766
64623938663531346364636637306630633162306636313638346334653931383239633933666335
30346564656531313631346462316634313433326264636663323331353366396437656666346230
63363564633736633338316230616438323932643430323839396261393061363630386236353137
37393364646336313661663239623165363962626438363065323034623965343138653835616235
63643765633663646361373138646463343435313732623737626663646261613032653039623333
62353236346539633035653466663163396664623363303431393937663030323538383061343563
39323736663665623265336665353562366662616661313136656337643665366539393566346334
31356262383439306563396535343638346532363038313932323437616135373533383731353163
62616461333033386135383261353136356533613461643865396566373831653635306637313430
32386161353336353533326264643636333861336335363362316364383538313666333465363435
33336235386534616363343038656362663334386236303764323765373632353737333933393939
30303038316164636538623963346531396661343765383963303264666239396264636635633163
32366266366664396637616237396531346236613332356166366137343036633437623462303830
35343262616333393338373539613362623832326464626633326666376561613738303863313665
32336239376463376232623961396164333538653561643739313430626137326132376266383239
30343230383239616337303834306136636463303938363132393431653136666234303134666435
34316433626139356334346331633066663333636235636165613830626433396331356134643331
62613765636561616164623765643662633233383361366332333233633831353738643431323761
61636662613130663430383264343666303265616534323533326263356564326434323166303136
62666331393034633661333634623162333561343635666232623831373766616331333663393032
30313363613938373230626161353732663634616338663962393363353830393265663130326330
33626664663364333434363033623366653132636433326232363639326561663233343634303939
33626532623230306633383139373861663736613233636139616231366361346462336463656539
31623334333930643662323661383539333738346464363036666439343866323336396135306261
37353636653839356637343563306663376333663030323461363737386266613061363866643332
35376439343665623537643839363664643963303562663235653365653866616331623663343632
39353236626433303935653430626236333932663461613538633130306165626439393431333838
34303965386462306663306331383665396664343265366464396263643461383730386265616139
35313138313962373565303133663735303333323132333161353264653031323261636132306231
37343161333465653932343030633862393231616331393063623733343164393530363234366162
31383531656634663264653438663430316334616437333132653139396264393266366538393863
32373037323936636332316162323763656362326439616535376432646130663232393462653863
39363535373566396133303964636135653336383231626536333063646336613866363961363434
36646464303231326264323934653837636164303534376366353631346639633161386637623865
37643665653333626534303932366638323364636364306137643166623939386462393532376265
39663637366561363030383435313239303962363561313765663661353936353637333933353266
36643464316233303337643437653639666633313530356432313235383264643861396237366136
64613366376361323435306164656234346132303133363735343832376564616264366435313730
62666365383239353662626439353163396630393136663639396332656439663466326336386339
36363134336430633138333038343837376532383866316564386235643731303836323433313233
35383432623261623763353138303039396236613735363234613034643937343030616261326531
64353530653338633237333534666537343538613762333830306365613339643931353137373939
65643762623131323034323739303838313662626331376463643564363639623363666463663164
61306539666538386139363430663233316139383836353162396631323664393133623431386639
34353361616336646463373063323233316237656661376262623965663563333833323234396634
64623837326230356531303837396434333862363631353030323735656231313234636161646637
65363264313432303631333438373166623066356434356163376165376631316131623663633132
36336664383036386633326530626433626565333038356337343061613332336237353436336336
33353334393437633464306135343766396464386666343937393136653466303764363962343736
62373432616663663338323432633864623462616238326139616132343034666237386631333931
62366339626633336630363461333439373430646462396439346136333833663665663837353833
63353864646365396132306565303666366235636462626534313865663330366337613231313766
34373166316234366438343932656663353938333563393533626532323963643032316161333438
31636637306436376134303739646562366466353766333538303837313463646364656633376635
64376663623366633766616133363661333635383762613339396261343135623961373663643630
30666166636538633365333362323936343362396338636432303666333232633339613737323031
64616365643534653736393038333739393232343935666137383238346239653438636465393730
63656137643731626663656563336163363736316264316265313134663539386339303332663033
30313731343539653038343533353261386366316336643530656239666539326262646134373932
31353464636462356362393639613833623331353865646436343963303039646263613034303837
34396265666437393864343230663962306163376233663735373236666336316564366162306230
38313530386162623331356638343661646636333962613563346262663139623964346666306662
66386265663431373963366161623637363162353137333037363461333038386363383062643035
34373064363236363337613666303134366666323636336336393734613935656339633333313637
30366462616235356534663130336332326335613733613039626461323630326265646637316239
61343535323538613138373263313130353965326239323031356462323334383466353139306566
32623430636636386139336635386136316164353337656436323432383230383634386438653861
62623565343232633332386338653138633630363862346664383931343965373466653037336130
37316533646164386363333761636563396332393039396136333562613162636638363533346663
33306132353263646233336433323432356465623538303634363865353161656338643539306235
38633638643737633764373964346166613730646663633537366637393863623436343261316433
62363030633637386536313435613936303966306562633034383833323766633936646566333061
65323937386439303634386633303737653230363462666438333634653139393432323266663361
63646233356630656462303937386164653931393431623866646563356462366236626562303561
62646335363465626563323538356535363666656162336265303163313337663061336135306435
32653331616634646132373837636362646262626666613265363364633136353535376538303963
64363636383563663639303366396230363261396335396266373865613435326438376534643466
66646366396330336434623266386235373434313835623262333030343834383033333761653961
61306466653366326535376462663730373239356462323261626139653236306536633563356432
30343162366537316234333563616565363030366339313730363963663736383162636333343066
34656535393735366165386462383237393430666461383062613366633239383134393865643765
37343830363333303336373731623165393539613830343361366635356233613135303833633133
36343761663535303938663431356463353339313565656364366365366537626364633563383530
61336164663565363133316561333464616133393665386364383939663633636439663837636338
62663838383333333664313262373162356339353731353332363861376638656639373335316533
64363261643263336661366237613534666435313661633630653161623634323263306336396539
31333132306130653364313663323639396662646236383166386137663131396632626261323231
32616137646165633336306565353037623963336231343863383431663665303162653764343837
32666365313731613639666333396361616639323862393333393139303337656631356138326662
36353435333736663137383737353738336664613665323533383265663931376235343035393265
63613366323330656436313137366139303862346163656238373833346164316137663338646266
62633662633831363137323637336234343164326665633963353564323563333265663330663830
62316363353066646365616432323661653834643165623337613265613034663663633539656532
37633438616236653933656437613461636366646431333164313566306261323466613162333066
66653465346462363932386335613731353834343630373831323564663961376230383832656362
34353432623131306363353630383036303531333032386630313831613862643461333931313130
38623963633063326439613962633462653536623939366562633161353930323661383062383665
36366238356536333135656635626630323736353866366263393762323262656438373361653431
31333531353834373831616261313031656334326164313764306636376335376262623330646364
31353861636436636232393239303266323731333635653131333262383138626266
36393338343065303033326166633764353465633263386536386164343634316334653239663135
6339323462303631316266316565613265316433366166620a663163616435323161633835663164
35666630366263393538333032313962613635376566613261386464636533636133316132396462
3138633037366339330a373738616233366431386164316664313031383538396138386535323764
30303234643638666361623236393034386665633239653234343066613935343063636462326330
36336635373533376237623730653638343237613138666139356536353735396633396533323734
34383735623632333132346163303738646132633865313666393962613866656536343861376137
30336363383239646236623734623264366136373164653731633665323735373966323939373762
33346632306230306561333838363038396333316637613138646562653837336231633137376234
35613830343931386237316536633564666634373434383732646665323963653030616665353236
35386539633732653232383432383630323539376230363936336231646161656635663539326633
64366138363363623164623539333135393963623237376335653736356132396138636535373032
62616430653234333938666663346537353965663536333932636161313634373064363336626131
62636332323237613063343765316166306232353165373336643539306630663437373862383264
34616661313732653862303065666162623462316265313936363236653231646632663636373833
37353463633062323965306461353962343132643832626162643564613161666462343963346237
66616237333063666631313630663933353533366535663534343032653031356638633766333639
30343231633262373130666638396432386437353034633165306235636238666266356632333139
61363032623630643631626631306365633731616565663665343530383962393466323433383962
64663564343861303263323164373832636135643631383164346430363632663362383630326434
39393730346530363933643239373832313566323736393934323532303436313539333731363539
63323766653038346133373262376137373633613836643936333734343435356631333062303761
39373837656531363132393239323339666665666364633634323233366662316535626637306137
30653732336634623830643630313034386239356236353632653764653238343137303035326666
61656132383436313763653366363665623238326338613834363164333434306133326630623563
61303961373161396237353761393766616436336663386636663937343732313436353439313337
30333036316261613461326564336364376432353930323239643435386164313831323930323464
66616337663634633937303636616531316536366162316339343831653035633835313235636664
35663636313863633736623965333535303935643632396437656162313565363435386338363765
62636266653866393661313839643961633031363735376536663762386265623832323336396533
39393835393434633539343939343936353031303031306164313066623234363337326136656631
33376435346663643661376362383065613038386233363338373538373130306634313335306562
39646362323432376132396465393437356463343936633361353163613963613634623034303138
66383933646533333665646632303465313563653031623165633334643338396530663263653239
66333530316462363062613233373039663134393733383363616239626131383964353133616239
39623961316237653765623136386634396534386663663633343961353065353665393338343438
66353066396531653639363838323865383539636232346135366236633738383566363663626461
61303666306336316530326638396339613132343161333030383838386464643535383236313132
32376238636639323030636135373034346336613636656439666137363333373035633330666436
34313661643331373536623034653163656664353231316435366464343565643865303866616533
32323437333934363963666462653530643233333066653831636434376436383332636461336365
62396266353763663264303462373337383839323730663764363162333437363032323663383539
34313131616333336131346231633432363035363364633138613366383064303665353964666432
64656630393564396133383735666132373537643738623435613134663066333139666361373664
64633565356264343866636362336262666635366630316430393137633433643965623166636262
66316165306434626331666166653431353633396161623333623035626131316465333862323061
30663237323131353731666230333830396137373163356438633536393939366562396334373065
33383435306532303338613462326461656435346163326539306433373733366630373837653035
31333332306430383432663165363432306335663064363666396364666164343637343632366231
34656263326334633533623033303239306264643534376433376335656232336439663833613862
61653432663936336633326532663162653137343336653164326265633732653861313737373939
64393463656664613663383362653661393161326263363132656365323161613533356231343365
35326564626233643039623838383061366164376639346161626237636366373262353737643034
30633066356364663038303665656563303535636364373962366333356238376333663231376461
32393464616631303038626165326637626662643436386263626636326534303265303232343831
31313131346462313437663834366532333037353565653538626638363934366135633837613235
30636239306131316164353433663735336537303064613132386630636333663431646362313639
32303166653938396433393631613834303661653137363239343739306265663961363561646462
62666539643831383032363836616433393136653263353263303266376533653936656532646564
32386338333261613835333866303431663733333032663661353630346365333931363063313065
33363733343739313330323963386432326632313439646336336231666663653532646365366139
65333234393937343139393132666165343536383765623866363665346139626464623631666436
35323163333234663534316530643363366566353661623061313437313462623066326261633937
64316636353361646465633139626661313863636137623536616630396338663734396138623665
36363866313533643530363361343139663739663739376432626637643637313039326261653233
61373466373031356337346561613239303364643835363863396265376665633436393735383566
34613265636662643134646133623539366639663332333832306663316139386665663466623530
39666236643964333333613433383031336663326336386366633230616662613866643166383437
63653164313430333761653666613935323266366362383833333335303561323135373262613164
64623232666564623963366266363861383439376638366235323838346639393863613834326337
66323561636536613166303963633063353237333636353762343962323330366133666337636232
34376434393161643336663234326663613035343934613035346666666331373537343038623037
34643731346362346139303463353662386336366363656161333834383764346562303761623830
39366337366336356539636133393538386163313734656238373963326230303062656335643465
33386438386465363937343239643333616564343134653438636139363538643439633066376261
64346431636565343638616338663362393834656537643639383864333066633332383864336530
31376361376164643136666437616634366438353436633663646366323337313166626231613765
33653335663866333137366431326638623264323034396330326362376239656366336264323633
62653237313165363235306534316630653537636535303064333731366538663733623435653438
37653862373231623664393966353436346665623736643435343931623963343866323633333365
63653565313132343632393531623661366536386634333331623236336236373139656562646333
34316461376132643737623565633465393162396136393061363565363833666336386264326537
64386363613734376338363066333838613637393630326661346533643837616166373366303534
37313835623662626164346662353132343766383536326435323538343432643737653239313363
33393263616332646238623339663665343132656163633336393037356335626164316261613163
63336365376162326131323033653266383532396436613931383131373330343438316237343531
64656162353738616438316130323334613363303135663331366338663563616464326361643737
62356537343433623339613137616434373736393366363632373063373736376530313264333666
61346234396130646633613862636239396536383336623066646136626564386136396166383437
65653839303665616462316437383430646163306436646534626366313034333932646630306161
30613766653039623861306539613137376562373761326364306164613634653331363536663830
64646165333839343137656164313666343030643737323934316164323739393566326463623365
39343961623262653133343066353133316238393937383234386438366466353934326238393637
34326461666337653661396432356262663239333132396436346666656534306138643064356163
35636336656134626131643830393230623362626464376131326436313439313966376662316262
36396234356362343538393266643037643664326661356434623635356162336531373833316532
33333265363937346433386164383863613834313434386366396435663731353636336366323064
63306339326135306564336665306261363634316663656562653137306533353435363566376437
63356231383862393635346136613164616131326434663664613830636163326238663931653031
34356664306433376633303866666539346133356532643330656139373731316134653733656265
61356231623263633361373339326265313139663332396533383231306234636230343230343962
65636565646236623465393337333261626636616366333961313039313866353436653865333539
34633830313836353265653833373036323365303132613530353730373733316666626332373663
38616337306238353766303166626236663462646134366663393365336365313363353539326366
39333261326566656266363262616537613463663266393362363531616337623965633935653737
39396464353537623533663865303365376137303762326637376638656166363539376361393166
30343736363964356666363738376537393937633338366562326132323264663066646362353935
64393164396361373762303438366438666435383137636564643932383737333035333166666533
32613563613566323963346662313739353132313632616535393666643161343961323634363463
66313562663231353130333566663565633634663462313762316538333430643834386338346166
65303935303765656431663364613133396466376466346561643166663761363762383235623135
61666365646239306133393035653731336163303964643838333231333839656331336366633163
64376366613937366430626139613333653064303430316563376266303032366639646234306135
30346339653164353937333131613935383865393634313165643230353139633661356637353562
34396237653363653233663937643035303362376334663766346535656361303431396639306232
63366335343736333866643766643835373036643366343330653834353230353932336232323365
64333833326261663435323133633434383865343562353737663332383031343761623032663135
62316432323234356134393037643735383134366237616161643261336530663830323035383765
35356162336666326330626237336261353235633564313536356339346333343832303964373036
36643964323763613039386230383466396466653461306563333135343132366532313533613435
32636438313530616466363230363032653566353562366364343536363665643231333831366364
65646331336439663666663565623362343430353462376334313334326661613134636335626437
66633335343234383031353165633065653164323034343865393565633038373736326364646136
39373138373437323465376535346438353962623738643830323835313263316339333331316364
38656430613631643130316334666532663530383562643534313537653465643535303338346466
62396339623534626563366135646266666331323733313634633734646162383363343964376463
32343563386131323135663531306536326661633739316439316238616562383164653464393166
32346365353436383263366434666563343136633861313233623262316134396163353837373862
62626634393135623334643565653962323136663864616331353530306532353930356430353064
32316630356531326338316161313166343037306539366131396266616133646361373731663961
65613963653761393932383931383631363739663864343066383836366433353066313932663662
61323939323831633065393061393166393431363966643137633439623963653432646236643737
65616431616636376438383837353661303461303931613234363065386332363663353235633230
65353532353036636366653238323662346362326132646263373137666564336666646435653262
32343665373637323462383864343565626363306533636239353431663833613865636238373761
31643931303134623866613761656232383962633534653937373330356636666666383638366136
37393030353139313165316633613232343362333738346130323135393366353464633437376532
64373162306534326637353039643963633338313862316630656136323934636138333563346364
31333266336466306336356363303361356237373465656263623465636565613464643266626166
62616364303337363063626339303637346239363732373130393132393633333635616435366334
35643735343863383432366464353664353039643832376638386236633931646163663237326133
6437646666363736393734383037663335363261333730646539