From: Tony Mack Date: Wed, 25 Sep 2013 01:47:12 +0000 (-0400) Subject: implement fetch_pending() X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=66646d55de74e54e91ccd08db04f326ae8e5f522;p=plstackapi.git implement fetch_pending() --- diff --git a/planetstack/observer/event_loop.py b/planetstack/observer/event_loop.py index 5ce4b54..f4f7f02 100644 --- a/planetstack/observer/event_loop.py +++ b/planetstack/observer/event_loop.py @@ -58,7 +58,7 @@ def toposort(g, steps): return order class PlanetStackObserver: - sync_steps = [SyncNetworks,SyncNetworkSlivers,SyncSites,SyncSitePrivileges,SyncSlices,SyncSliceMemberships,SyncSlivers,SyncSliverIps] + sync_steps = [SyncNetworks,SyncNetworkSlivers,SyncSites,SyncSitePrivileges,SyncSlices,SyncSliceMemberships,SyncSlivers,SyncSliverIps,SyncExternalRoutes,SyncUsers,GarbageCollector] def __init__(self): # The Condition object that gets signalled by Feefie events diff --git a/planetstack/observer/steps/__init__.py b/planetstack/observer/steps/__init__.py index 6d7adb8..7f5dcf9 100644 --- a/planetstack/observer/steps/__init__.py +++ b/planetstack/observer/steps/__init__.py @@ -8,3 +8,4 @@ from .sync_slices import SyncSlices from .sync_sliver_ips import SyncSliverIps from .sync_slivers import SyncSlivers from .sync_users import SyncUsers +from .garbage_collector import GarbageCollector diff --git a/planetstack/observer/steps/garbage_collector.py b/planetstack/observer/steps/garbage_collector.py index 4b6dfaf..9e2a37d 100644 --- a/planetstack/observer/steps/garbage_collector.py +++ b/planetstack/observer/steps/garbage_collector.py @@ -1,15 +1,13 @@ import os import base64 from planetstack.config import Config +from observer.openstacksyncstep import OpenStackSyncStep -class GarbageCollector(SyncStep): - requested_interval = 86400 - provides=[] +class GarbageCollector(OpenStackSyncStep): + requested_interval = 86400 + provides=[] - def call(self): - pass - - def run(self): + def call(self): try: logger.info('gc start') #self.sync_roles() diff --git a/planetstack/observer/steps/sync_external_routes.py b/planetstack/observer/steps/sync_external_routes.py index cbaf490..7a67896 100644 --- a/planetstack/observer/steps/sync_external_routes.py +++ b/planetstack/observer/steps/sync_external_routes.py @@ -1,20 +1,21 @@ import os import base64 from planetstack.config import Config -from observer.syncstep import SyncStep +from observer.openstacksyncstep import OpenStackSyncStep -class SyncExternalRoutes(SyncStep): - # XXX what does this provide? - requested_interval = 86400 # This step is slow like a pig. Let's run it infrequently +class SyncExternalRoutes(OpenStackSyncStep): + # XXX what does this provide? + provides=[] + requested_interval = 86400 # This step is slow like a pig. Let's run it infrequently - def __init__(self): - pass + def __init__(self): + pass - def call(self): - routes = self.driver.get_external_routes() - subnets = self.driver.shell.quantum.list_subnets()['subnets'] - for subnet in subnets: - try: - self.driver.add_external_route(subnet, routes) - except: - logger.log_exc("failed to add external route for subnet %s" % subnet) + def call(self): + routes = self.driver.get_external_routes() + subnets = self.driver.shell.quantum.list_subnets()['subnets'] + for subnet in subnets: + try: + self.driver.add_external_route(subnet, routes) + except: + logger.log_exc("failed to add external route for subnet %s" % subnet) diff --git a/planetstack/observer/steps/sync_networks.py b/planetstack/observer/steps/sync_networks.py index 656ae68..02a1b23 100644 --- a/planetstack/observer/steps/sync_networks.py +++ b/planetstack/observer/steps/sync_networks.py @@ -8,6 +8,9 @@ class SyncNetworks(OpenStackSyncStep): provides=[Network] requested_interval = 0 + def fetch_pending(self): + return Network.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None)) + def save_network(self, network): if not network.network_id: if network.template.sharedNetworkName: @@ -45,14 +48,14 @@ class SyncNetworks(OpenStackSyncStep): def sync_record(self, site): if network.owner and network.owner.creator: - try: - # update manager context - real_driver = self.driver - self.driver = self.driver.client_driver(network.owner.creator, network.owner.name) - self.save_network(network) - self.driver = real_driver - logger.info("saved network: %s" % (network)) - except Exception,e: - logger.log_exc("save network failed: %s" % network) - raise e + try: + # update manager context + real_driver = self.driver + self.driver = self.driver.client_driver(network.owner.creator, network.owner.name) + self.save_network(network) + self.driver = real_driver + logger.info("saved network: %s" % (network)) + except Exception,e: + logger.log_exc("save network failed: %s" % network) + raise e diff --git a/planetstack/observer/steps/sync_site_privileges.py b/planetstack/observer/steps/sync_site_privileges.py index ac0dbac..e02dde7 100644 --- a/planetstack/observer/steps/sync_site_privileges.py +++ b/planetstack/observer/steps/sync_site_privileges.py @@ -6,8 +6,11 @@ from core.models.site import * class SyncSitePrivileges(OpenStackSyncStep): requested_interval=0 - provides=[SitePrivilege] + + def fetch_pending(self): + return Network.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None)) + def sync_record(self, user): if site_priv.user.kuser_id and site_priv.site.tenant_id: self.driver.add_user_role(site_priv.user.kuser_id, diff --git a/planetstack/observer/steps/sync_sites.py b/planetstack/observer/steps/sync_sites.py index 1f7a0f8..ece34af 100644 --- a/planetstack/observer/steps/sync_sites.py +++ b/planetstack/observer/steps/sync_sites.py @@ -7,6 +7,10 @@ from core.models.site import Site class SyncSites(OpenStackSyncStep): provides=[Site] requested_interval=0 + + def fetch_pending(self): + return Site.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None)) + def sync_record(self, site): save_site = False if not site.tenant_id: diff --git a/planetstack/observer/steps/sync_slice_memberships.py b/planetstack/observer/steps/sync_slice_memberships.py index 1ec3a96..0e9d681 100644 --- a/planetstack/observer/steps/sync_slice_memberships.py +++ b/planetstack/observer/steps/sync_slice_memberships.py @@ -6,7 +6,11 @@ from core.models.slice import * class SyncSliceMemberships(OpenStackSyncStep): requested_interval=0 - provides=[SliceRole] + provides=[SlicePrivilege] + + def fetch_pending(self): + return SlicePrivilege.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None)) + def sync_record(self, user): if slice_memb.user.kuser_id and slice_memb.slice.tenant_id: self.driver.add_user_role(slice_memb.user.kuser_id, diff --git a/planetstack/observer/steps/sync_slices.py b/planetstack/observer/steps/sync_slices.py index 81ed925..4f10a14 100644 --- a/planetstack/observer/steps/sync_slices.py +++ b/planetstack/observer/steps/sync_slices.py @@ -7,6 +7,10 @@ from core.models.slice import Slice class SyncSlices(OpenStackSyncStep): provides=[Slice] requested_interval=0 + + def fetch_pending(self): + return Slice.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None)) + def sync_record(self, slice): if not slice.tenant_id: nova_fields = {'tenant_name': slice.name, diff --git a/planetstack/observer/steps/sync_sliver_ips.py b/planetstack/observer/steps/sync_sliver_ips.py index 50ec6ad..fb4fd5b 100644 --- a/planetstack/observer/steps/sync_sliver_ips.py +++ b/planetstack/observer/steps/sync_sliver_ips.py @@ -7,6 +7,7 @@ from core.models.sliver import Sliver class SyncSliverIps(OpenStackSyncStep): provides=[Sliver] requested_interval=0 + def fetch_pending(self): slivers = Sliver.objects.filter(ip=None) return slivers diff --git a/planetstack/observer/steps/sync_slivers.py b/planetstack/observer/steps/sync_slivers.py index adab39d..e119b0e 100644 --- a/planetstack/observer/steps/sync_slivers.py +++ b/planetstack/observer/steps/sync_slivers.py @@ -7,21 +7,25 @@ from core.models.sliver import Sliver class SyncSlivers(OpenStackSyncStep): 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: - 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) - pubkeys = [sm.user.public_key for sm in slice_memberships if sm.user.public_key] - pubkeys.append(sliver.creator.public_key) - instance = self.driver.spawn_instance(name=sliver.name, - key_name = sliver.creator.keyname, - image_id = sliver.image.image_id, - hostname = sliver.node.name, - pubkeys = pubkeys, - nics = nics ) - sliver.instance_id = instance.id - sliver.instance_name = getattr(instance, 'OS-EXT-SRV-ATTR:instance_name') + 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) + pubkeys = [sm.user.public_key for sm in slice_memberships if sm.user.public_key] + pubkeys.append(sliver.creator.public_key) + instance = self.driver.spawn_instance(name=sliver.name, + key_name = sliver.creator.keyname, + image_id = sliver.image.image_id, + hostname = sliver.node.name, + pubkeys = pubkeys, + nics = nics ) + 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)}) diff --git a/planetstack/observer/steps/sync_users.py b/planetstack/observer/steps/sync_users.py index dde8a24..f222b43 100644 --- a/planetstack/observer/steps/sync_users.py +++ b/planetstack/observer/steps/sync_users.py @@ -7,6 +7,10 @@ from core.models.user import User class SyncUsers(OpenStackSyncStep): provides=[User] requested_interval=0 + + def fetch_pending(self): + return User.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None)) + def sync_record(self, user): name = user.email[:user.email.find('@')] user_fields = {'name': name, diff --git a/planetstack/observer/syncstep.py b/planetstack/observer/syncstep.py index c8d3e42..8e8d4fc 100644 --- a/planetstack/observer/syncstep.py +++ b/planetstack/observer/syncstep.py @@ -37,7 +37,8 @@ class SyncStep: return def fetch_pending(self): - return Sliver.objects.filter(ip=None) + #return Sliver.objects.filter(ip=None) + return [] def check_dependencies(self, obj): for dep in self.dependencies: diff --git a/planetstack/openstack/driver.py b/planetstack/openstack/driver.py index 234dcbf..febac32 100644 --- a/planetstack/openstack/driver.py +++ b/planetstack/openstack/driver.py @@ -3,7 +3,6 @@ from planetstack.config import Config try: from openstack.client import OpenStackClient - from openstack.driver import OpenStackDriver has_openstack = True except: has_openstack = False