X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=planetstack%2Fmodel_policies%2Fmodel_policy_Slice.py;h=a9936bd6312f041444265b55d33bff9db80824b9;hb=9ac140b80fb0536eb98025684c56841287efab08;hp=0d83d684a9b1da90aae34f451c7ed6356a9fe94a;hpb=05a2ed1bdadc8f234f7f5ca00c5ead368da0cce4;p=plstackapi.git diff --git a/planetstack/model_policies/model_policy_Slice.py b/planetstack/model_policies/model_policy_Slice.py index 0d83d68..a9936bd 100644 --- a/planetstack/model_policies/model_policy_Slice.py +++ b/planetstack/model_policies/model_policy_Slice.py @@ -1,64 +1,62 @@ def handle(slice): - from core.models import Controller,ControllerSlices,Controller,Network,NetworkSlice,NetworkTemplate - from collections import defaultdict - ctrl_site_deployments = SiteDeployments.objects.all() - - slice_controllers = ControllerSlices.objects.all() - slice_deploy_lookup = defaultdict(list) - for slice_controller in slice_controllers: - slice_deploy_lookup[slice_controller.slice].append(slice_controller) - - all_controllers = Controller.objects.all() - for expected_controller in all_controllers: - if slice not in slice_deploy_lookup or \ - expected_controller not in slice_deploy_lookup[slice]: - sd = ControllerSlices(slice=slice, controller=expected_controller) - sd.save() + from core.models import Controller, ControllerSlice, SiteDeployment, Network, NetworkSlice,NetworkTemplate, Slice + from collections import defaultdict - # 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: + # slice = Slice.get(slice_id) + + controller_slices = ControllerSlice.objects.filter(slice=slice) + existing_controllers = [cs.controller for cs in controller_slices] + + all_controllers = Controller.objects.all() + for controller in all_controllers: + if controller not in existing_controllers: + sd = ControllerSlice(slice=slice, controller=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) + 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() + 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()