from celery import shared_task from .models import * from uncloud.models import UncloudTask import os import subprocess import logging import uuid log = logging.getLogger(__name__) @shared_task def whereami(): print(os.uname()) return os.uname() def configure_wireguard_server(wireguardvpnpool): """ - Create wireguard config (DB query -> string) - Submit config to cdist worker - Change config locally on worker / commit / shared """ config = wireguardvpnpool.wireguard_config server = wireguardvpnpool.vpn_server_hostname log.info(f"Configuring VPN server {server} (async)") task_id = uuid.UUID(cdist_configure_wireguard_server.apply_async((config, server)).id) UncloudTask.objects.create(task_id=task_id) @shared_task def cdist_configure_wireguard_server(config, server): """ Create config and configure server. To be executed on the cdist workers. """ dirname= "/home/app/.cdist/type/__ungleich_wireguard/files/" fname = os.path.join(dirname,server) log.info(f"Configuring VPN server {server} (on cdist host)") with open(fname, "w") as fd: fd.write(config) log.debug("git committing wireguard changes") subprocess.run(f"cd /aa{dirname} && git pull && git add {server} && git commit -m 'Updating config for ${server}' && git push", shell=True, check=True) log.debug(f"Configuring VPN server {server} with cdist") subprocess.run(f"cdist config {server}", shell=True, check=True) # FIXME: # ensure logs are on the server # ensure exit codes are known return "All good"