Mercurial > code > home > repos > infra
annotate sync.py @ 289:65e28d2e0cd8
move static templates to files/ ; use inventory tags for selecting hosts+features ; other refactors
author | drewp@bigasterisk.com |
---|---|
date | Sun, 21 Apr 2024 17:07:23 -0700 |
parents | 3af02e24eaf9 |
children | 5f3e053ba888 |
rev | line source |
---|---|
152 | 1 from pathlib import Path |
2 | |
14 | 3 from pyinfra import host |
152 | 4 from pyinfra.facts.server import Command |
5 from pyinfra.operations import apt, files, server, systemd | |
6 | |
7 | |
8 def host_running_version(user: str, v: str): | |
9 # if this command fails, we go in to error state and run nothing else #bugreport | |
10 out = host.get_fact(Command, f"runuser -u {user} syncthing serve --version || exit 0") | |
11 if out is None: | |
12 return False | |
13 _, sv, *_ = out.split() | |
14 return sv == v | |
15 | |
16 | |
17 def install_syncthing(user, version, os='linux', arch='amd64'): | |
18 tmpdir = Path('/tmp/syncthing_install') | |
19 dl_name = f'syncthing-{os}-{arch}-{version}' | |
20 url = f'https://github.com/syncthing/syncthing/releases/download/{version}/{dl_name}.tar.gz' | |
288 | 21 files.directory(path=tmpdir) |
22 files.download(src=url, dest=str(tmpdir / f'{dl_name}.tgz')) # bugreport | |
23 server.shell(commands=[f'cd {tmpdir}; aunpack {dl_name}.tgz']) | |
152 | 24 |
25 systemd.service(service=f'syncthing@{user}', running=False) | |
26 | |
27 user_svc_template = '/lib/systemd/system/syncthing@.service' | |
288 | 28 server.shell(commands=[ |
152 | 29 f'cp -a {tmpdir}/{dl_name}/{s} {d}' for s, d in [ |
30 ('syncthing', '/usr/bin'), | |
31 ('etc/linux-systemd/system/syncthing@.service', user_svc_template), | |
32 ('etc/linux-systemd/system/syncthing-resume.service', '/etc/systemd/system/syncthing-resume.service'), | |
33 ] | |
34 ]) | |
288 | 35 files.link(path=f'/etc/systemd/system/multi-user.target.wants/syncthing@{user}.service', target=user_svc_template) |
152 | 36 systemd.service(service=f'syncthing@{user}', enabled=True, restarted=True, daemon_reload=True) |
37 | |
38 | |
39 # also see /my/serv/filesync/syncthing/deploy.yaml for the container one | |
238 | 40 version = 'v1.26.1' |
14 | 41 |
92
a915000bad75
bang has a local (drewp) syncthing now
drewp@bigasterisk.com
parents:
23
diff
changeset
|
42 # primary instance is in k8s (/my/serv/filesync/syncthing); the rest are run with systemd. |
14 | 43 # Configs are in ~/.config/syncthing/ on each box |
289
65e28d2e0cd8
move static templates to files/ ; use inventory tags for selecting hosts+features ; other refactors
drewp@bigasterisk.com
parents:
288
diff
changeset
|
44 if host.data.get('syncthing'): |
152 | 45 apt.packages(packages=['syncthing'], present=False) |
46 user = 'ari' if host.name == 'dot' else 'drewp' | |
14 | 47 |
152 | 48 if not host_running_version(user, version): |
49 install_syncthing(user, version) | |
14 | 50 |
152 | 51 # something above has broken devnull #bugreport |
288 | 52 server.shell(commands=['chmod a+w /dev/null']) |
145 | 53 |
54 # also consider https://github.com/Martchus/syncthingtray tray status viewer on dtops |