CORD-1244 Modify model_policies for OpenStack synchronizer
Change-Id: I8e946e3ca665689bd0449b80d87fe4bb29afde99
diff --git a/xos/synchronizer/model_policies/model_policy_Instance.py b/xos/synchronizer/model_policies/model_policy_Instance.py
index db07cf6..53fa9fa 100644
--- a/xos/synchronizer/model_policies/model_policy_Instance.py
+++ b/xos/synchronizer/model_policies/model_policy_Instance.py
@@ -1,59 +1,23 @@
from synchronizers.new_base.modelaccessor import *
+from synchronizers.new_base.policy import Policy
-def handle_container_on_metal(instance):
- print "MODEL POLICY: instance", instance, "handle container_on_metal"
+class InstancePolicy(Policy):
+ model_name = "Instance"
- if instance.deleted:
- return
+ def handle_create(self, instance):
+ return self.handle_update(instance)
- if (instance.isolation in ["container"]) and (instance.slice.network not in ["host", "bridged"]):
- # Our current docker-on-metal network strategy requires that there be some
- # VM on the server that connects to the networks, so that
- # the containers can piggyback off of that configuration.
- if not Instance.objects.filter(slice_id=instance.slice.id, node_id=instance.node.id, isolation="vm").exists():
- flavors = Flavor.objects.filter(name="m1.small")
- if not flavors:
- raise XOSConfigurationError("No m1.small flavor")
+ def handle_update(self, instance):
+ networks = [ns.network for ns in NetworkSlice.objects.filter(slice_id=instance.slice.id)]
+ controller_networks = ControllerNetwork.objects.filter(controller_id=instance.node.site_deployment.controller.id)
- images = Image.objects.filter(kind="vm")
+ # a little clumsy because the API ORM doesn't support __in queries
+ network_ids = [x.id for x in networks]
+ controller_networks = [x for x in controller_networks if x.network.id in network_ids]
- companion_instance = Instance(slice = instance.slice,
- node = instance.node,
- image = images[0],
- creator = instance.creator,
- deployment = instance.node.site_deployment.deployment,
- flavor = flavors[0])
- companion_instance.save()
-
- print "MODEL POLICY: instance", instance, "created companion", companion_instance
-
- # Add the ports for the container
- for network in instance.slice.networks.all():
- # hmmm... The NAT ports never become ready, because sync_ports never
- # instantiates them. Need to think about this.
- print "MODEL POLICY: instance", instance, "handling network", network
- if (network.name.endswith("-nat")):
- continue
-
- if not Port.objects.filter(network_id=network.id, instance_id=instance.id).exists():
- port = Port(network = network, instance=instance)
- port.save()
- print "MODEL POLICY: instance", instance, "created port", port
-
-def handle(instance):
- networks = [ns.network for ns in NetworkSlice.objects.filter(slice_id=instance.slice.id)]
- controller_networks = ControllerNetwork.objects.filter(controller_id=instance.node.site_deployment.controller.id)
-
- # a little clumsy because the API ORM doesn't support __in queries
- network_ids = [x.id for x in networks]
- controller_networks = [x for x in controller_networks if x.network.id in network_ids]
-
- for cn in controller_networks:
- if (cn.lazy_blocked):
- print "MODEL POLICY: instance", instance, "unblocking network", cn.network
- cn.lazy_blocked=False
- cn.backend_register = '{}'
- cn.save()
-
- if (instance.isolation in ["container", "container_vm"]):
- handle_container_on_metal(instance)
+ for cn in controller_networks:
+ if (cn.lazy_blocked):
+ self.logger.info("MODEL POLICY: instance %s unblocking network %s" % (instance, cn.network))
+ cn.lazy_blocked=False
+ cn.backend_register = '{}'
+ cn.save()