forked from uncloud/uncloud
d3f2a3e071
Signed-off-by: Nico Schottelius <nico@nico-notebook.schottelius.org>
64 lines
1.8 KiB
Python
64 lines
1.8 KiB
Python
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)
|