X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=planetstack%2Fmodel_policies%2Fmodel_policy_Slice.py;h=ee34b14937f734831adf66790b06823b1202a025;hb=62a4c9b2fb67ab033574d9c0f4070081f1e3bb6e;hp=6fd968c2e1803d47378e8dffaf09809edc3e6498;hpb=cc750d5a502b2c6b1be2939b8d96f5faf6674779;p=plstackapi.git diff --git a/planetstack/model_policies/model_policy_Slice.py b/planetstack/model_policies/model_policy_Slice.py index 6fd968c..ee34b14 100644 --- a/planetstack/model_policies/model_policy_Slice.py +++ b/planetstack/model_policies/model_policy_Slice.py @@ -1,6 +1,6 @@ def handle(slice): - from core.models import SiteDeployments,SliceDeployments,Deployment + from core.models import SiteDeployments,SliceDeployments,Deployment,Network,NetworkSlice,NetworkTemplate from collections import defaultdict site_deployments = SiteDeployments.objects.all() site_deploy_lookup = defaultdict(list) @@ -22,3 +22,50 @@ def handle(slice): sd = SliceDeployments(slice=slice, deployment=expected_deployment) 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() + + + +