implement fetch_pending()
authorTony Mack <tmack@paris.CS.Princeton.EDU>
Wed, 25 Sep 2013 01:47:12 +0000 (21:47 -0400)
committerTony Mack <tmack@paris.CS.Princeton.EDU>
Wed, 25 Sep 2013 01:47:12 +0000 (21:47 -0400)
14 files changed:
planetstack/observer/event_loop.py
planetstack/observer/steps/__init__.py
planetstack/observer/steps/garbage_collector.py
planetstack/observer/steps/sync_external_routes.py
planetstack/observer/steps/sync_networks.py
planetstack/observer/steps/sync_site_privileges.py
planetstack/observer/steps/sync_sites.py
planetstack/observer/steps/sync_slice_memberships.py
planetstack/observer/steps/sync_slices.py
planetstack/observer/steps/sync_sliver_ips.py
planetstack/observer/steps/sync_slivers.py
planetstack/observer/steps/sync_users.py
planetstack/observer/syncstep.py
planetstack/openstack/driver.py

index 5ce4b54..f4f7f02 100644 (file)
@@ -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
index 6d7adb8..7f5dcf9 100644 (file)
@@ -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
index 4b6dfaf..9e2a37d 100644 (file)
@@ -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()
index cbaf490..7a67896 100644 (file)
@@ -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)
index 656ae68..02a1b23 100644 (file)
@@ -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
 
index ac0dbac..e02dde7 100644 (file)
@@ -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,
index 1f7a0f8..ece34af 100644 (file)
@@ -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:
index 1ec3a96..0e9d681 100644 (file)
@@ -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,
index 81ed925..4f10a14 100644 (file)
@@ -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,
index 50ec6ad..fb4fd5b 100644 (file)
@@ -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
index adab39d..e119b0e 100644 (file)
@@ -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)})
index dde8a24..f222b43 100644 (file)
@@ -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,
index c8d3e42..8e8d4fc 100644 (file)
@@ -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:
index 234dcbf..febac32 100644 (file)
@@ -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