X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=planetstack%2Fmodel_policies%2Fmodel_policy_Slice.py;h=af07e51c34badf784d4be1de2d7b631b58333593;hb=fe0e4936bd124075de806e96269ead578b992cb4;hp=5d66903fe33e381c17dfb4d65775c339af610ac3;hpb=b3aeb1b1270e86d8c85a286de3a5f8443cfee2e5;p=plstackapi.git diff --git a/planetstack/model_policies/model_policy_Slice.py b/planetstack/model_policies/model_policy_Slice.py index 5d66903..af07e51 100644 --- a/planetstack/model_policies/model_policy_Slice.py +++ b/planetstack/model_policies/model_policy_Slice.py @@ -1,23 +1,71 @@ -from core.models import * def handle(slice): - site_deployments = SiteDeployments.objects.all() + from core.models import ControllerSites,ControllerSlices,Controller,Network,NetworkSlice,NetworkTemplate + from collections import defaultdict + site_controllers = ControllerSites.objects.all() site_deploy_lookup = defaultdict(list) - for site_deployment in site_deployments: - site_deploy_lookup[site_deployment.site].append(site_deployment.deployment) + for site_controller in site_controllers: + site_deploy_lookup[site_controller.site].append(site_controller.controller) - slice_deployments = SliceDeployments.objects.all() + slice_controllers = ControllerSlices.objects.all() slice_deploy_lookup = defaultdict(list) - for slice_deployment in slice_deployments: - slice_deploy_lookup[slice_deployment.slice].append(slice_deployment.deployment) + for slice_controller in slice_controllers: + slice_deploy_lookup[slice_controller.slice].append(slice_controller.controller) - all_deployments = Deployment.objects.all() - # slices are added to all deployments for now - expected_deployments = all_deployments - #expected_deployments = site_deploy_lookup[slice.site] - for expected_deployment in expected_deployments: + all_controllers = Controller.objects.all() + # slices are added to all controllers for now + expected_controllers = all_controllers + #expected_controllers = site_deploy_lookup[slice.site] + for expected_controller in expected_controllers: if slice not in slice_deploy_lookup or \ - expected_deployment not in slice_deploy_lookup[slice]: - sd = SliceDeployments(slice=slice, deployment=expected_deployment) + expected_controller not in slice_deploy_lookup[slice]: + sd = ControllerSlices(slice=slice, controller=expected_controller) sd.save() + # make sure slice has at least 1 public and 1 private networkd + public_nets = [] + private_net = None + networks = Network.objects.filter(owner=slice) + for network in networks: + if network.template.name == 'Public dedicated IPv4': + public_nets.append(network) + elif network.template.name == 'Public shared IPv4': + public_nets.append(network) + elif network.template.name == 'Private': + private_net = network + if not public_nets: + # ensure there is at least one public network, and default it to dedicated + nat_net = Network( + name = slice.name+'-nat', + template = NetworkTemplate.objects.get(name='Public shared IPv4'), + owner = slice + ) + nat_net.save() + public_nets.append(nat_net) + + if not private_net: + private_net = Network( + name = slice.name+'-private', + template = NetworkTemplate.objects.get(name='Private'), + owner = slice + ) + private_net.save() + # create slice networks + public_net_slice = None + private_net_slice = None + net_slices = NetworkSlice.objects.filter(slice=slice, network__in=[private_net]+public_nets) + for net_slice in net_slices: + if net_slice.network in public_nets: + public_net_slice = net_slice + elif net_slice.network == private_net: + private_net_slice = net_slice + if not public_net_slice: + public_net_slice = NetworkSlice(slice=slice, network=public_nets[0]) + public_net_slice.save() + if not private_net_slice: + private_net_slice = NetworkSlice(slice=slice, network=private_net) + private_net_slice.save() + + + +