blob: ee34b14937f734831adf66790b06823b1202a025 [file] [log] [blame]
Sapan Bhatiab3aeb1b2014-09-03 15:39:13 -04001
2def handle(slice):
Sapan Bhatiabf7856b2014-11-19 15:09:38 -05003 from core.models import SiteDeployments,SliceDeployments,Deployment,Network,NetworkSlice,NetworkTemplate
Sapan Bhatia728acce2014-09-15 03:48:20 -04004 from collections import defaultdict
Sapan Bhatia39e85582014-11-19 15:07:36 -05005 site_deployments = SiteDeployments.objects.all()
Sapan Bhatiab3aeb1b2014-09-03 15:39:13 -04006 site_deploy_lookup = defaultdict(list)
7 for site_deployment in site_deployments:
8 site_deploy_lookup[site_deployment.site].append(site_deployment.deployment)
9
Sapan Bhatiabf7856b2014-11-19 15:09:38 -050010 slice_deployments = SliceDeployments.objects.all()
Sapan Bhatiab3aeb1b2014-09-03 15:39:13 -040011 slice_deploy_lookup = defaultdict(list)
12 for slice_deployment in slice_deployments:
13 slice_deploy_lookup[slice_deployment.slice].append(slice_deployment.deployment)
14
15 all_deployments = Deployment.objects.all()
16 # slices are added to all deployments for now
17 expected_deployments = all_deployments
18 #expected_deployments = site_deploy_lookup[slice.site]
19 for expected_deployment in expected_deployments:
20 if slice not in slice_deploy_lookup or \
21 expected_deployment not in slice_deploy_lookup[slice]:
Sapan Bhatiabf7856b2014-11-19 15:09:38 -050022 sd = SliceDeployments(slice=slice, deployment=expected_deployment)
Sapan Bhatiab3aeb1b2014-09-03 15:39:13 -040023 sd.save()
24
Tony Mackd2046f32014-10-08 22:54:02 -040025 # make sure slice has at least 1 public and 1 private networkd
Scott Bakercb7649c2014-10-16 00:43:54 -070026 public_nets = []
Tony Mackd2046f32014-10-08 22:54:02 -040027 private_net = None
28 networks = Network.objects.filter(owner=slice)
29 for network in networks:
30 if network.template.name == 'Public dedicated IPv4':
Scott Bakercb7649c2014-10-16 00:43:54 -070031 public_nets.append(network)
32 elif network.template.name == 'Public shared IPv4':
33 public_nets.append(network)
Tony Mackd2046f32014-10-08 22:54:02 -040034 elif network.template.name == 'Private':
Scott Bakercb7649c2014-10-16 00:43:54 -070035 private_net = network
36 if not public_nets:
37 # ensure there is at least one public network, and default it to dedicated
Tony Mackd0eeed82014-11-12 10:00:12 -050038 nat_net = Network(
39 name = slice.name+'-nat',
40 template = NetworkTemplate.objects.get(name='Public shared IPv4'),
Scott Bakercb7649c2014-10-16 00:43:54 -070041 owner = slice
42 )
Tony Mackd0eeed82014-11-12 10:00:12 -050043 nat_net.save()
44 public_nets.append(nat_net)
Scott Bakercb7649c2014-10-16 00:43:54 -070045
Tony Mackd2046f32014-10-08 22:54:02 -040046 if not private_net:
47 private_net = Network(
48 name = slice.name+'-private',
49 template = NetworkTemplate.objects.get(name='Private'),
50 owner = slice
51 )
52 private_net.save()
53 # create slice networks
54 public_net_slice = None
55 private_net_slice = None
Scott Bakercb7649c2014-10-16 00:43:54 -070056 net_slices = NetworkSlice.objects.filter(slice=slice, network__in=[private_net]+public_nets)
Tony Mackd2046f32014-10-08 22:54:02 -040057 for net_slice in net_slices:
Scott Bakercb7649c2014-10-16 00:43:54 -070058 if net_slice.network in public_nets:
59 public_net_slice = net_slice
Tony Mackd2046f32014-10-08 22:54:02 -040060 elif net_slice.network == private_net:
Scott Bakercb7649c2014-10-16 00:43:54 -070061 private_net_slice = net_slice
Tony Mackd2046f32014-10-08 22:54:02 -040062 if not public_net_slice:
Scott Bakercb7649c2014-10-16 00:43:54 -070063 public_net_slice = NetworkSlice(slice=slice, network=public_nets[0])
Tony Mackd2046f32014-10-08 22:54:02 -040064 public_net_slice.save()
65 if not private_net_slice:
66 private_net_slice = NetworkSlice(slice=slice, network=private_net)
Scott Bakercb7649c2014-10-16 00:43:54 -070067 private_net_slice.save()
68
69
70
71