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 @@
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_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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
try:
from openstack.client import OpenStackClient
- from openstack.driver import OpenStackDriver
has_openstack = True
except:
has_openstack = False