3 from core.models import Controller, ControllerSiteDeployments, ControllerSlices,Controller,Network,NetworkSlice,NetworkTemplate
4 from collections import defaultdict
5 ctrl_site_deployments = ControllerSiteDeployments.objects.all()
6 site_deploy_lookup = defaultdict(list)
7 for ctrl_site_deployment in ctrl_site_deployments:
8 site_deploy_lookup[ctrl_site_deployment.site_deployment].append(ctrl_site_deployment)
10 slice_controllers = ControllerSlices.objects.all()
11 slice_deploy_lookup = defaultdict(list)
12 for slice_controller in slice_controllers:
13 slice_deploy_lookup[slice_controller.slice].append(slice_controller)
15 #expected_controllers = site_deploy_lookup[slice.site]
16 all_controllers = Controller.objects.all()
17 for expected_controller in controllers:
18 if slice not in slice_deploy_lookup or \
19 expected_controller not in slice_deploy_lookup[slice]:
20 sd = ControllerSlices(slice=slice, controller=expected_controller)
23 # make sure slice has at least 1 public and 1 private networkd
26 networks = Network.objects.filter(owner=slice)
27 for network in networks:
28 if network.template.name == 'Public dedicated IPv4':
29 public_nets.append(network)
30 elif network.template.name == 'Public shared IPv4':
31 public_nets.append(network)
32 elif network.template.name == 'Private':
35 # ensure there is at least one public network, and default it to dedicated
37 name = slice.name+'-nat',
38 template = NetworkTemplate.objects.get(name='Public shared IPv4'),
42 public_nets.append(nat_net)
45 private_net = Network(
46 name = slice.name+'-private',
47 template = NetworkTemplate.objects.get(name='Private'),
51 # create slice networks
52 public_net_slice = None
53 private_net_slice = None
54 net_slices = NetworkSlice.objects.filter(slice=slice, network__in=[private_net]+public_nets)
55 for net_slice in net_slices:
56 if net_slice.network in public_nets:
57 public_net_slice = net_slice
58 elif net_slice.network == private_net:
59 private_net_slice = net_slice
60 if not public_net_slice:
61 public_net_slice = NetworkSlice(slice=slice, network=public_nets[0])
62 public_net_slice.save()
63 if not private_net_slice:
64 private_net_slice = NetworkSlice(slice=slice, network=private_net)
65 private_net_slice.save()