import sys from datetime import datetime from django.core.management.base import BaseCommand from django.contrib.auth import get_user_model from opennebula.models import VM as VMModel from uncloud_vm.models import VMHost, VMProduct, VMNetworkCard, VMDiskImageProduct, VMDiskProduct, VMCluster import logging log = logging.getLogger(__name__) wireguard_template=""" [Interface] ListenPort = 51820 PrivateKey = {privatekey} """ peer_template=""" # {username} [Peer] PublicKey = {public_key} AllowedIPs = {vpnnetwork} """ class Command(BaseCommand): help = 'General uncloud commands' def add_arguments(self, parser): parser.add_argument('--hostname', action='store_true', help='Name of this VPN Host', required=True) def handle(self, *args, **options): if options['bootstrap']: self.bootstrap() self.create_vpn_config(options['hostname']) def create_vpn_config(self, hostname): configs = [] for pool in VPNPool.objects.filter(vpn_hostname=hostname): pool_config = { 'private_key': pool.wireguard_private_key, 'subnetwork_size': pool.subnetwork_size, 'config_file': '/etc/wireguard/{}.conf'.format(pool.network), 'peers': [] } for vpnnetwork in VPNNetworkReservation.objects.filter(vpnpool=pool): pool_config['peers'].append({ 'vpnnetwork': "{}/{}".format(vpnnetwork.address, pool_config['subnetwork_size']), 'public_key': vpnnetwork.wireguard_public_key, } ) configs.append(pool_config) print(configs)