Compare commits
20 commits
miniserver
...
main
Author | SHA1 | Date | |
---|---|---|---|
128a61706e | |||
8e23747400 | |||
3b608d95ec | |||
3a5db80843 | |||
a9b16c18ad | |||
8f705fc8e3 | |||
b3070a8b8b | |||
6a203085b9 | |||
669b28f6ed | |||
9884b703cd | |||
fa63ad72d5 | |||
3a56995ab1 | |||
50b71bc8b8 | |||
fcd097599d | |||
563ba266ff | |||
209dedccf9 | |||
e51c24f837 | |||
72638e0856 | |||
2c83a5c4fc | |||
ec49c8d3ff |
20 changed files with 134 additions and 106 deletions
|
@ -129,11 +129,14 @@ def notify_per_ntfy():
|
||||||
data=message_text,
|
data=message_text,
|
||||||
headers=headers,
|
headers=headers,
|
||||||
auth=(CONFIG['ntfy']['user'], CONFIG['ntfy']['password']),
|
auth=(CONFIG['ntfy']['user'], CONFIG['ntfy']['password']),
|
||||||
|
timeout=10,
|
||||||
)
|
)
|
||||||
|
|
||||||
r.raise_for_status()
|
r.raise_for_status()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
log_to_syslog('Sending a Notification failed: {}'.format(repr(e)))
|
log_to_syslog('Sending a Notification failed: {}'.format(repr(e)))
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
def notify_per_mail():
|
def notify_per_mail():
|
||||||
|
@ -199,7 +202,8 @@ if __name__ == '__main__':
|
||||||
notify_per_mail()
|
notify_per_mail()
|
||||||
|
|
||||||
if args.sms:
|
if args.sms:
|
||||||
if not args.service_name:
|
ntfy_worked = False
|
||||||
notify_per_sms()
|
|
||||||
if CONFIG['ntfy']['user']:
|
if CONFIG['ntfy']['user']:
|
||||||
notify_per_ntfy()
|
ntfy_worked = notify_per_ntfy()
|
||||||
|
if not args.service_name or not ntfy_worked:
|
||||||
|
notify_per_sms()
|
||||||
|
|
|
@ -17,7 +17,6 @@ defaults = {
|
||||||
'icinga2': {},
|
'icinga2': {},
|
||||||
'icinga2-ido-pgsql': {},
|
'icinga2-ido-pgsql': {},
|
||||||
'icingaweb2': {},
|
'icingaweb2': {},
|
||||||
'icingaweb2-module-monitoring': {},
|
|
||||||
'python3-easysnmp': {},
|
'python3-easysnmp': {},
|
||||||
'python3-flask': {},
|
'python3-flask': {},
|
||||||
'snmp': {},
|
'snmp': {},
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
from datetime import datetime, timezone
|
from datetime import datetime
|
||||||
from json import dumps
|
from json import dumps
|
||||||
from time import sleep
|
from time import sleep
|
||||||
|
from zoneinfo import ZoneInfo
|
||||||
|
|
||||||
import paho.mqtt.client as mqtt
|
import paho.mqtt.client as mqtt
|
||||||
from requests import RequestException, get
|
from requests import RequestException, get
|
||||||
|
@ -24,7 +25,8 @@ logging.basicConfig(
|
||||||
)
|
)
|
||||||
|
|
||||||
LOG = logging.getLogger("main")
|
LOG = logging.getLogger("main")
|
||||||
MLOG = logging.getLogger("mqtt")
|
TZ = ZoneInfo("Europe/Berlin")
|
||||||
|
DUMP_TIME = "0900"
|
||||||
|
|
||||||
state = None
|
state = None
|
||||||
|
|
||||||
|
@ -61,14 +63,14 @@ def mqtt_dump_state(device):
|
||||||
out.append("Location: {}".format(device["location"]))
|
out.append("Location: {}".format(device["location"]))
|
||||||
out.append("Setup: {} ({})".format(device["setup"]["name"], device["setup"]["id"]))
|
out.append("Setup: {} ({})".format(device["setup"]["name"], device["setup"]["id"]))
|
||||||
out.append("Resolution: {}".format(device["run"].get("resolution", "unknown")))
|
out.append("Resolution: {}".format(device["run"].get("resolution", "unknown")))
|
||||||
if not device["is_synced"]:
|
|
||||||
out.append("syncing ...")
|
|
||||||
|
|
||||||
mqtt_out(
|
mqtt_out(
|
||||||
" - ".join(out),
|
" - ".join(out),
|
||||||
device=device,
|
device=device,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def is_dump_time():
|
||||||
|
return datetime.now(TZ).strftime("%H%M") == DUMP_TIME
|
||||||
|
|
||||||
mqtt_out("Monitor starting up")
|
mqtt_out("Monitor starting up")
|
||||||
while True:
|
while True:
|
||||||
|
@ -81,14 +83,13 @@ while True:
|
||||||
r.raise_for_status()
|
r.raise_for_status()
|
||||||
ib_state = r.json()["devices"]
|
ib_state = r.json()["devices"]
|
||||||
except RequestException as e:
|
except RequestException as e:
|
||||||
LOG.exception("Could not get data from info-beamer")
|
LOG.exception("Could not get device data from info-beamer")
|
||||||
mqtt_out(
|
mqtt_out(
|
||||||
f"Could not get data from info-beamer: {e!r}",
|
f"Could not get device data from info-beamer: {e!r}",
|
||||||
level="WARN",
|
level="WARN",
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
new_state = {}
|
new_state = {}
|
||||||
online_devices = set()
|
|
||||||
for device in ib_state:
|
for device in ib_state:
|
||||||
did = str(device["id"])
|
did = str(device["id"])
|
||||||
|
|
||||||
|
@ -97,7 +98,8 @@ while True:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
new_state[did] = device
|
new_state[did] = device
|
||||||
must_dump_state = False
|
# force information output for every online device at 09:00 CE(S)T
|
||||||
|
must_dump_state = is_dump_time()
|
||||||
|
|
||||||
if state is not None:
|
if state is not None:
|
||||||
if did not in state:
|
if did not in state:
|
||||||
|
@ -140,16 +142,15 @@ while True:
|
||||||
if device["is_online"]:
|
if device["is_online"]:
|
||||||
if device["maintenance"]:
|
if device["maintenance"]:
|
||||||
mqtt_out(
|
mqtt_out(
|
||||||
"maintenance required: {}".format(' '.join(
|
"maintenance required: {}".format(
|
||||||
sorted(device["maintenance"])
|
" ".join(sorted(device["maintenance"]))
|
||||||
)),
|
),
|
||||||
level="WARN",
|
level="WARN",
|
||||||
device=device,
|
device=device,
|
||||||
)
|
)
|
||||||
|
|
||||||
if (
|
if (
|
||||||
device["is_synced"] != state[did]["is_synced"]
|
device["location"] != state[did]["location"]
|
||||||
or device["location"] != state[did]["location"]
|
|
||||||
or device["setup"]["id"] != state[did]["setup"]["id"]
|
or device["setup"]["id"] != state[did]["setup"]["id"]
|
||||||
or device["run"].get("resolution")
|
or device["run"].get("resolution")
|
||||||
!= state[did]["run"].get("resolution")
|
!= state[did]["run"].get("resolution")
|
||||||
|
@ -161,23 +162,52 @@ while True:
|
||||||
else:
|
else:
|
||||||
LOG.info("adding device {} to empty state".format(device["id"]))
|
LOG.info("adding device {} to empty state".format(device["id"]))
|
||||||
|
|
||||||
if device["is_online"]:
|
|
||||||
online_devices.add(
|
|
||||||
"{} ({})".format(
|
|
||||||
device["id"],
|
|
||||||
device["description"],
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
state = new_state
|
state = new_state
|
||||||
|
|
||||||
if (
|
try:
|
||||||
datetime.now(timezone.utc).strftime("%H%M") == "1312"
|
r = get(
|
||||||
and online_devices
|
"https://info-beamer.com/api/v1/account",
|
||||||
and int(datetime.now(timezone.utc).strftime("%S")) < 30
|
auth=("", CONFIG["api_key"]),
|
||||||
):
|
)
|
||||||
mqtt_out("Online Devices: {}".format(", ".join(sorted(online_devices))))
|
r.raise_for_status()
|
||||||
sleep(30)
|
ib_account = r.json()
|
||||||
|
except RequestException as e:
|
||||||
|
LOG.exception("Could not get account data from info-beamer")
|
||||||
|
mqtt_out(
|
||||||
|
f"Could not get account data from info-beamer: {e!r}",
|
||||||
|
level="WARN",
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
available_credits = ib_account["balance"]
|
||||||
|
if is_dump_time():
|
||||||
|
mqtt_out(f"Available Credits: {available_credits}")
|
||||||
|
|
||||||
|
if available_credits < 50:
|
||||||
|
mqtt_out(
|
||||||
|
f"balance has dropped below 50 credits! (available: {available_credits})",
|
||||||
|
level="ERROR",
|
||||||
|
)
|
||||||
|
elif available_credits < 100:
|
||||||
|
mqtt_out(
|
||||||
|
f"balance has dropped below 100 credits! (available: {available_credits})",
|
||||||
|
level="WARN",
|
||||||
|
)
|
||||||
|
|
||||||
|
for quota_name, quota_config in sorted(ib_account["quotas"].items()):
|
||||||
|
value = quota_config["count"]["value"]
|
||||||
|
limit = quota_config["count"]["limit"]
|
||||||
|
if value > limit * 0.9:
|
||||||
|
mqtt_out(
|
||||||
|
f"quota {quota_name} is over 90% (limit {limit}, value {value})",
|
||||||
|
level="ERROR",
|
||||||
|
)
|
||||||
|
elif value > limit * 0.8:
|
||||||
|
mqtt_out(
|
||||||
|
f"quota {quota_name} is over 80% (limit {limit}, value {value})",
|
||||||
|
level="WARN",
|
||||||
|
)
|
||||||
|
|
||||||
|
sleep(60)
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
break
|
break
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,6 @@ inet_interfaces = 127.0.0.1
|
||||||
% endif
|
% endif
|
||||||
|
|
||||||
<%text>
|
<%text>
|
||||||
smtp_use_tls = yes
|
|
||||||
smtp_tls_loglevel = 1
|
smtp_tls_loglevel = 1
|
||||||
smtp_tls_note_starttls_offer = yes
|
smtp_tls_note_starttls_offer = yes
|
||||||
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
|
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
|
||||||
|
|
|
@ -3,6 +3,8 @@ from os import listdir
|
||||||
from os.path import isfile, join
|
from os.path import isfile, join
|
||||||
from subprocess import check_output
|
from subprocess import check_output
|
||||||
|
|
||||||
|
from bundlewrap.utils.ui import io
|
||||||
|
|
||||||
zone_path = join(repo.path, 'data', 'powerdns', 'files', 'bind-zones')
|
zone_path = join(repo.path, 'data', 'powerdns', 'files', 'bind-zones')
|
||||||
|
|
||||||
nameservers = set()
|
nameservers = set()
|
||||||
|
@ -79,9 +81,10 @@ if node.metadata.get('powerdns/features/bind', False):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
try:
|
try:
|
||||||
output = check_output(['git', 'log', '-1', '--pretty=%ci', join(zone_path, zone)]).decode('utf-8').strip()
|
output = check_output(['git', 'log', '-1', '--pretty=%ci']).decode('utf-8').strip()
|
||||||
serial = datetime.strptime(output, '%Y-%m-%d %H:%M:%S %z').strftime('%y%m%d%H%M')
|
serial = datetime.strptime(output, '%Y-%m-%d %H:%M:%S %z').strftime('%y%m%d%H%M')
|
||||||
except:
|
except Exception as e:
|
||||||
|
io.stderr(f"Error while parsing commit time for {zone} serial: {e!r}")
|
||||||
serial = datetime.now().strftime('%y%m%d0000')
|
serial = datetime.now().strftime('%y%m%d0000')
|
||||||
|
|
||||||
primary_zones.add(zone)
|
primary_zones.add(zone)
|
||||||
|
|
|
@ -7,7 +7,6 @@ from subprocess import check_output
|
||||||
|
|
||||||
from requests import get
|
from requests import get
|
||||||
|
|
||||||
|
|
||||||
UPDATE_URL = '${url}'
|
UPDATE_URL = '${url}'
|
||||||
USERNAME = '${username}'
|
USERNAME = '${username}'
|
||||||
PASSWORD = '${password}'
|
PASSWORD = '${password}'
|
||||||
|
|
|
@ -5,7 +5,6 @@ from ipaddress import ip_address
|
||||||
from json import loads
|
from json import loads
|
||||||
from subprocess import check_output, run
|
from subprocess import check_output, run
|
||||||
|
|
||||||
|
|
||||||
DOMAIN = '${domain}'
|
DOMAIN = '${domain}'
|
||||||
|
|
||||||
# <%text>
|
# <%text>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
assert node.has_bundle('redis'), f'{node.name}: pretalx needs redis'
|
assert node.has_bundle('redis'), f'{node.name}: pretalx needs redis'
|
||||||
assert node.has_bundle('nodejs'), f'{node.name}: pretalx needs nodejs for rebuild and regenerate_css step'
|
assert node.has_bundle('nodejs'), f'{node.name}: pretalx needs nodejs for rebuild step'
|
||||||
|
|
||||||
actions = {
|
actions = {
|
||||||
'pretalx_create_virtualenv': {
|
'pretalx_create_virtualenv': {
|
||||||
|
@ -53,17 +53,6 @@ actions = {
|
||||||
},
|
},
|
||||||
'triggered': True,
|
'triggered': True,
|
||||||
},
|
},
|
||||||
'pretalx_regenerate-css': {
|
|
||||||
'command': 'sudo -u pretalx PRETALX_CONFIG_FILE=/opt/pretalx/pretalx.cfg /opt/pretalx/venv/bin/python -m pretalx regenerate_css',
|
|
||||||
'needs': {
|
|
||||||
'action:pretalx_migrate',
|
|
||||||
'directory:/opt/pretalx/data',
|
|
||||||
'directory:/opt/pretalx/static',
|
|
||||||
'file:/opt/pretalx/pretalx.cfg',
|
|
||||||
'bundle:nodejs',
|
|
||||||
},
|
|
||||||
'triggered': True,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
users = {
|
users = {
|
||||||
|
@ -90,7 +79,6 @@ git_deploy = {
|
||||||
'action:pretalx_install',
|
'action:pretalx_install',
|
||||||
'action:pretalx_migrate',
|
'action:pretalx_migrate',
|
||||||
'action:pretalx_rebuild',
|
'action:pretalx_rebuild',
|
||||||
'action:pretalx_regenerate-css',
|
|
||||||
'svc_systemd:pretalx-web:restart',
|
'svc_systemd:pretalx-web:restart',
|
||||||
'svc_systemd:pretalx-worker:restart',
|
'svc_systemd:pretalx-worker:restart',
|
||||||
},
|
},
|
||||||
|
@ -121,7 +109,6 @@ svc_systemd = {
|
||||||
'action:pretalx_install',
|
'action:pretalx_install',
|
||||||
'action:pretalx_migrate',
|
'action:pretalx_migrate',
|
||||||
'action:pretalx_rebuild',
|
'action:pretalx_rebuild',
|
||||||
'action:pretalx_regenerate-css',
|
|
||||||
'file:/etc/systemd/system/pretalx-web.service',
|
'file:/etc/systemd/system/pretalx-web.service',
|
||||||
'file:/opt/pretalx/pretalx.cfg',
|
'file:/opt/pretalx/pretalx.cfg',
|
||||||
},
|
},
|
||||||
|
@ -129,7 +116,8 @@ svc_systemd = {
|
||||||
'pretalx-worker': {
|
'pretalx-worker': {
|
||||||
'needs': {
|
'needs': {
|
||||||
'action:pretalx_install',
|
'action:pretalx_install',
|
||||||
'action:pretalx_migrate',
|
'action:pretalx_migrate',,
|
||||||
|
'action:pretalx_rebuild',
|
||||||
'file:/etc/systemd/system/pretalx-worker.service',
|
'file:/etc/systemd/system/pretalx-worker.service',
|
||||||
'file:/opt/pretalx/pretalx.cfg',
|
'file:/opt/pretalx/pretalx.cfg',
|
||||||
},
|
},
|
||||||
|
@ -204,7 +192,6 @@ for plugin_name, plugin_config in node.metadata.get('pretalx/plugins', {}).items
|
||||||
'triggers': {
|
'triggers': {
|
||||||
'action:pretalx_migrate',
|
'action:pretalx_migrate',
|
||||||
'action:pretalx_rebuild',
|
'action:pretalx_rebuild',
|
||||||
'action:pretalx_regenerate-css',
|
|
||||||
'svc_systemd:pretalx-web:restart',
|
'svc_systemd:pretalx-web:restart',
|
||||||
'svc_systemd:pretalx-worker:restart',
|
'svc_systemd:pretalx-worker:restart',
|
||||||
},
|
},
|
||||||
|
|
|
@ -2,7 +2,6 @@ import re
|
||||||
from json import load
|
from json import load
|
||||||
from os.path import join
|
from os.path import join
|
||||||
|
|
||||||
|
|
||||||
with open(join(repo.path, 'configs', 'netbox', f'{node.name}.json')) as f:
|
with open(join(repo.path, 'configs', 'netbox', f'{node.name}.json')) as f:
|
||||||
netbox = load(f)
|
netbox = load(f)
|
||||||
|
|
||||||
|
|
|
@ -1,30 +1,29 @@
|
||||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
Version: GnuPG v2.0.19 (GNU/Linux)
|
|
||||||
|
|
||||||
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
|
ifY/dQmUP37n5XgMADRc
|
||||||
=icbY
|
=O0zm
|
||||||
-----END PGP PUBLIC KEY BLOCK-----
|
-----END PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import bwpass
|
import bwpass
|
||||||
|
|
||||||
|
|
||||||
def demagify(something, vault):
|
def demagify(something, vault):
|
||||||
if isinstance(something, str):
|
if isinstance(something, str):
|
||||||
if something.startswith('!bwpass:'):
|
if something.startswith('!bwpass:'):
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
from bundlewrap.utils.ui import io
|
|
||||||
from bundlewrap.utils.scm import get_rev
|
from bundlewrap.utils.scm import get_rev
|
||||||
from bundlewrap.utils.text import red, bold
|
from bundlewrap.utils.text import bold, red
|
||||||
|
from bundlewrap.utils.ui import io
|
||||||
|
|
||||||
|
|
||||||
@node_attribute
|
@node_attribute
|
||||||
def needs_apply(node):
|
def needs_apply(node):
|
||||||
|
|
|
@ -40,7 +40,7 @@ imap_pass = "!bwpass_attr:t-online.de/franzi.kunsmann@t-online.de:imap"
|
||||||
|
|
||||||
[metadata.element-web]
|
[metadata.element-web]
|
||||||
url = "chat.franzi.business"
|
url = "chat.franzi.business"
|
||||||
version = "v1.11.82"
|
version = "v1.11.85"
|
||||||
[metadata.element-web.config]
|
[metadata.element-web.config]
|
||||||
default_server_config.'m.homeserver'.base_url = "https://matrix.franzi.business"
|
default_server_config.'m.homeserver'.base_url = "https://matrix.franzi.business"
|
||||||
default_server_config.'m.homeserver'.server_name = "franzi.business"
|
default_server_config.'m.homeserver'.server_name = "franzi.business"
|
||||||
|
@ -49,8 +49,8 @@ defaultCountryCode = "DE"
|
||||||
jitsi.preferredDomain = "meet.ffmuc.net"
|
jitsi.preferredDomain = "meet.ffmuc.net"
|
||||||
|
|
||||||
[metadata.forgejo]
|
[metadata.forgejo]
|
||||||
version = "9.0.1"
|
version = "9.0.2"
|
||||||
sha1 = "060d9f00aaf595875eaf1897cbb24e760ef54d64"
|
sha1 = "5aecc64f93e8ef05c6d6f83d4b647bdb2c831d9f"
|
||||||
domain = "git.franzi.business"
|
domain = "git.franzi.business"
|
||||||
enable_git_hooks = true
|
enable_git_hooks = true
|
||||||
install_ssh_key = true
|
install_ssh_key = true
|
||||||
|
@ -114,8 +114,8 @@ provisioning.shared_secret = "!decrypt:encrypt$gAAAAABfVKflEMAi07C_QGP8cy97hF-4g
|
||||||
"'@kunsi:franzi.business'" = "admin"
|
"'@kunsi:franzi.business'" = "admin"
|
||||||
|
|
||||||
[metadata.mautrix-whatsapp]
|
[metadata.mautrix-whatsapp]
|
||||||
version = "v0.11.0"
|
version = "v0.11.1"
|
||||||
sha1 = "997c794eb246e6cc67ac050c106d54f88531f213"
|
sha1 = "ada2dc6acfd5cb15fae341266b383d3f6e8b42bd"
|
||||||
permissions."'@kunsi:franzi.business'" = "admin"
|
permissions."'@kunsi:franzi.business'" = "admin"
|
||||||
[metadata.mautrix-whatsapp.homeserver]
|
[metadata.mautrix-whatsapp.homeserver]
|
||||||
domain = "franzi.business"
|
domain = "franzi.business"
|
||||||
|
@ -126,7 +126,7 @@ domain = "rss.franzi.business"
|
||||||
|
|
||||||
[metadata.netbox]
|
[metadata.netbox]
|
||||||
domain = "netbox.franzi.business"
|
domain = "netbox.franzi.business"
|
||||||
version = "v4.1.4"
|
version = "v4.1.6"
|
||||||
admins.kunsi = "hostmaster@kunbox.net"
|
admins.kunsi = "hostmaster@kunbox.net"
|
||||||
|
|
||||||
[metadata.nextcloud]
|
[metadata.nextcloud]
|
||||||
|
|
|
@ -24,12 +24,6 @@ ram = 2
|
||||||
domain = 'hass.home.kunbox.net'
|
domain = 'hass.home.kunbox.net'
|
||||||
api_secret = '!decrypt:encrypt$gAAAAABm9lNg_mNhyzb4S6WRtVRDmQFBnPpoCwyqMnilRrAFUXc-EDvv-nYXPbSIbjTf7ZReTPtqr8k3WrGPqiuqhJ60LVv4A5DMqT5c6hTVr4WbhP4DPEIPgfd5aq6U9_-H9WDyQYHKjnunLJEYtEREzmhTq3XsYeQ05DyE7hfnQ-zVoBb0CsAK7GdhihRTdvhXv2N9M04_rigyBP-roRcUgCqwyHuWJc0IPAyn3R4Mr43ZqgR2fn6dNV_YUVKn9c0nWxIwRnYy6Ff_Te9NoGVmXxkiNUX-90bBLKFiCzrRAtizxrTiQb2SRipaWbgOlV6wbMy2KNux'
|
api_secret = '!decrypt:encrypt$gAAAAABm9lNg_mNhyzb4S6WRtVRDmQFBnPpoCwyqMnilRrAFUXc-EDvv-nYXPbSIbjTf7ZReTPtqr8k3WrGPqiuqhJ60LVv4A5DMqT5c6hTVr4WbhP4DPEIPgfd5aq6U9_-H9WDyQYHKjnunLJEYtEREzmhTq3XsYeQ05DyE7hfnQ-zVoBb0CsAK7GdhihRTdvhXv2N9M04_rigyBP-roRcUgCqwyHuWJc0IPAyn3R4Mr43ZqgR2fn6dNV_YUVKn9c0nWxIwRnYy6Ff_Te9NoGVmXxkiNUX-90bBLKFiCzrRAtizxrTiQb2SRipaWbgOlV6wbMy2KNux'
|
||||||
|
|
||||||
[metadata.nginx]
|
|
||||||
restrict-to = [
|
|
||||||
'172.19.136.0/25',
|
|
||||||
'172.19.138.0/24',
|
|
||||||
]
|
|
||||||
|
|
||||||
[metadata.pyenv]
|
[metadata.pyenv]
|
||||||
version = 'v2.3.36'
|
version = 'v2.3.36'
|
||||||
python_versions = ["3.12.2"]
|
python_versions = ["3.12.2"]
|
||||||
|
|
9
nodes/home.mixer96.toml
Normal file
9
nodes/home.mixer96.toml
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
dummy = true
|
||||||
|
|
||||||
|
[metadata.interfaces.default]
|
||||||
|
ips = ["172.19.138.98"]
|
||||||
|
dhcp = true
|
||||||
|
mac = "54:e1:ad:a6:0d:1f"
|
||||||
|
|
||||||
|
[metadata.icinga_options]
|
||||||
|
exclude_from_monitoring = true
|
|
@ -181,6 +181,10 @@ nodes['home.nas'] = {
|
||||||
'path': '/storage/nas/Musik',
|
'path': '/storage/nas/Musik',
|
||||||
'force_group': 'nas',
|
'force_group': 'nas',
|
||||||
},
|
},
|
||||||
|
'music_videos': {
|
||||||
|
'path': '/storage/nas/Musikvideos',
|
||||||
|
'force_group': 'nas',
|
||||||
|
},
|
||||||
},
|
},
|
||||||
'restrict-to': {
|
'restrict-to': {
|
||||||
'172.19.138.0/24',
|
'172.19.138.0/24',
|
||||||
|
|
|
@ -48,7 +48,7 @@ nodes['home.paperless'] = {
|
||||||
},
|
},
|
||||||
'paperless': {
|
'paperless': {
|
||||||
'domain': 'paperless.home.kunbox.net',
|
'domain': 'paperless.home.kunbox.net',
|
||||||
'version': 'v2.13.0',
|
'version': 'v2.13.5',
|
||||||
'timezone': 'Europe/Berlin',
|
'timezone': 'Europe/Berlin',
|
||||||
},
|
},
|
||||||
'postgresql': {
|
'postgresql': {
|
||||||
|
|
|
@ -25,8 +25,8 @@ nodes['voc.infobeamer-cms'] = {
|
||||||
},
|
},
|
||||||
'infobeamer-cms': {
|
'infobeamer-cms': {
|
||||||
'domain': 'infobeamer.c3voc.de',
|
'domain': 'infobeamer.c3voc.de',
|
||||||
'event_start_date': '2024-10-03',
|
'event_start_date': '2024-12-26',
|
||||||
'event_duration_days': 4,
|
'event_duration_days': 5,
|
||||||
'config': {
|
'config': {
|
||||||
'ADMIN_USERS': [
|
'ADMIN_USERS': [
|
||||||
'hexchen',
|
'hexchen',
|
||||||
|
@ -39,7 +39,7 @@ nodes['voc.infobeamer-cms'] = {
|
||||||
'GITHUB_CLIENT_ID': vault.decrypt('encrypt$gAAAAABiNwHfIu9PYFfJrF7qirn_9vdvvUlEhJnadoNSS5XlCDbI_aMyj21_ZYQxaCkc6_eVX6Cj1jEHZ7Vs6wM-XyQdW0nUOahtqG4uvnYCiM3GFKHW_wQ='),
|
'GITHUB_CLIENT_ID': vault.decrypt('encrypt$gAAAAABiNwHfIu9PYFfJrF7qirn_9vdvvUlEhJnadoNSS5XlCDbI_aMyj21_ZYQxaCkc6_eVX6Cj1jEHZ7Vs6wM-XyQdW0nUOahtqG4uvnYCiM3GFKHW_wQ='),
|
||||||
'GITHUB_CLIENT_SECRET': vault.decrypt('encrypt$gAAAAABiNwHtdZC2XQ8IjosL7vsmrxZMwDIM6AD5dUlLo996tJs4qV7KJETHgYYZil2aMzClwhcE6JmxdhARRp7IJQ4rQQibelTNmyYSzj_V4puVpvma7SU0UZkTIG95SdPpoHY--Zba'),
|
'GITHUB_CLIENT_SECRET': vault.decrypt('encrypt$gAAAAABiNwHtdZC2XQ8IjosL7vsmrxZMwDIM6AD5dUlLo996tJs4qV7KJETHgYYZil2aMzClwhcE6JmxdhARRp7IJQ4rQQibelTNmyYSzj_V4puVpvma7SU0UZkTIG95SdPpoHY--Zba'),
|
||||||
'HOSTED_API_KEY': vault.decrypt('encrypt$gAAAAABhxJPH2sIGMAibU2Us1HoCVlNfF0SQQnVl0eiod48Zu8webL_-xk3wDw3yXw1Hkglj-2usl-D3Yd095yTSq0vZMCv2fh-JWwSPdJewQ45x9Ai4vXVD4CNz5vuJBESKS9xQWXTc'),
|
'HOSTED_API_KEY': vault.decrypt('encrypt$gAAAAABhxJPH2sIGMAibU2Us1HoCVlNfF0SQQnVl0eiod48Zu8webL_-xk3wDw3yXw1Hkglj-2usl-D3Yd095yTSq0vZMCv2fh-JWwSPdJewQ45x9Ai4vXVD4CNz5vuJBESKS9xQWXTc'),
|
||||||
'INTERRUPT_KEY': vault.human_password_for('infobeamer-cms interrupt key'),
|
'INTERRUPT_KEY': vault.human_password_for('infobeamer-cms interrupt key 38c3', words=1),
|
||||||
'SETUP_IDS': [
|
'SETUP_IDS': [
|
||||||
253559,
|
253559,
|
||||||
],
|
],
|
||||||
|
@ -64,7 +64,7 @@ nodes['voc.infobeamer-cms'] = {
|
||||||
'FAQ': {
|
'FAQ': {
|
||||||
'SOURCE': 'https://github.com/voc/infobeamer-cms',
|
'SOURCE': 'https://github.com/voc/infobeamer-cms',
|
||||||
'CONTACT': '''
|
'CONTACT': '''
|
||||||
Please use the <a href="https://webirc.hackint.org/#ircs://irc.hackint.org/#infobeamer">IRC
|
Please use the <a href="https://chat.hackint.org/?join=infobeamer">IRC
|
||||||
Channel #infobeamer on irc.hackint.org</a> (also
|
Channel #infobeamer on irc.hackint.org</a> (also
|
||||||
<a href="https://www.hackint.org/transport/matrix">bridged to matrix</a>)
|
<a href="https://www.hackint.org/transport/matrix">bridged to matrix</a>)
|
||||||
or #info-beamer on the cccv rocketchat instance.
|
or #info-beamer on the cccv rocketchat instance.
|
||||||
|
|
|
@ -49,14 +49,15 @@ nodes['voc.pretalx'] = {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
'pretalx': {
|
'pretalx': {
|
||||||
'version': 'v2024.2.1',
|
# 2023.3.1 with some bugfixes
|
||||||
|
'version': '05e377398cecdd45d3ca6013040c5857bbe225d6',
|
||||||
'domain': 'pretalx.c3voc.de',
|
'domain': 'pretalx.c3voc.de',
|
||||||
'mail_from': 'pretalx@c3voc.de',
|
'mail_from': 'pretalx@c3voc.de',
|
||||||
'administrators-from-group-id': 1,
|
'administrators-from-group-id': 1,
|
||||||
'plugins': {
|
'plugins': {
|
||||||
'broadcast_tools': {
|
'broadcast_tools': {
|
||||||
'repo': 'https://github.com/Kunsi/pretalx-plugin-broadcast-tools.git',
|
'repo': 'https://github.com/Kunsi/pretalx-plugin-broadcast-tools.git',
|
||||||
'rev': 'main',
|
'rev': '2.4.0',
|
||||||
},
|
},
|
||||||
'downstream': {
|
'downstream': {
|
||||||
'repo': 'https://github.com/pretalx/pretalx-downstream.git',
|
'repo': 'https://github.com/pretalx/pretalx-downstream.git',
|
||||||
|
@ -81,6 +82,6 @@ nodes['voc.pretalx'] = {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
'os': 'debian',
|
'os': 'debian',
|
||||||
'os_version': (11,),
|
'os_version': (12,),
|
||||||
'pip_command': 'pip3',
|
'pip_command': 'pip3',
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue