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
from .sync_sliver_ips import SyncSliverIps
from .sync_slivers import SyncSlivers
from .sync_users import SyncUsers
+from .garbage_collector import GarbageCollector
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()
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)
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:
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
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,
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:
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,
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,
class SyncSliverIps(OpenStackSyncStep):
provides=[Sliver]
requested_interval=0
+
def fetch_pending(self):
slivers = Sliver.objects.filter(ip=None)
return slivers
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)})
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,
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:
try:
from openstack.client import OpenStackClient
- from openstack.driver import OpenStackDriver
has_openstack = True
except:
has_openstack = False