X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=planetstack%2Fobserver%2Fsteps%2Fsync_slivers.py;h=1580c5af0eff2bf612656fc56bb97a9d01a049b2;hb=6fd3ef83b5887884e7e0fd5803be45309e5f871b;hp=e119b0e38970cc44549c85cfd4f8dd559e8face8;hpb=66646d55de74e54e91ccd08db04f326ae8e5f522;p=plstackapi.git diff --git a/planetstack/observer/steps/sync_slivers.py b/planetstack/observer/steps/sync_slivers.py index e119b0e..1580c5a 100644 --- a/planetstack/observer/steps/sync_slivers.py +++ b/planetstack/observer/steps/sync_slivers.py @@ -1,18 +1,39 @@ import os import base64 +from django.db.models import F, Q from planetstack.config import Config from observer.openstacksyncstep import OpenStackSyncStep from core.models.sliver import Sliver class SyncSlivers(OpenStackSyncStep): - provides=[Sliver] - requested_interval=0 + provides=[Sliver] + requested_interval=0 def fetch_pending(self): return Sliver.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None)) - def sync_record(self, slice): - if not sliver.instance_id: + def get_requested_networks(self, slice): + network_ids = [x.network_id for x in slice.networks.all()] + + if slice.network_id is not None: + network_ids.append(slice.network_id) + + networks = [] + for network_id in network_ids: + networks.append({"net-id": network_id}) + + return networks + + def sync_record(self, slice): + metadata_update = {} + if ("numberCores" in sliver.changed_fields): + metadata_update["cpu_cores"] = str(sliver.numberCores) + + for tag in sliver.slice.tags.all(): + if tag.name.startswith("sysctl-"): + metadata_update[tag.name] = tag.value + + if not sliver.instance_id: nics = self.get_requested_networks(sliver.slice) file("/tmp/scott-manager","a").write("slice: %s\nreq: %s\n" % (str(sliver.slice.name), str(nics))) slice_memberships = SliceMembership.objects.filter(slice=sliver.slice) @@ -27,7 +48,7 @@ class SyncSlivers(OpenStackSyncStep): sliver.instance_id = instance.id sliver.instance_name = getattr(instance, 'OS-EXT-SRV-ATTR:instance_name') - if sliver.instance_id and ("numberCores" in sliver.changed_fields): - self.driver.update_instance_metadata(sliver.instance_id, {"cpu_cores": str(sliver.numberCores)}) + if sliver.instance_id and metadata_update: + self.driver.update_instance_metadata(sliver.instance_id, metadata_update) - sliver.save() + sliver.save()