--- /dev/null
+from types import StringTypes
+import traceback
+
+class GeniSync:
+
+ def __init__(self):
+ try:
+ from geni import gimport
+ from geni.util.api import GeniAPI
+ from geni.util.debug import log
+ self.log = log
+ self.gimport = gimport
+ geniapi = GeniAPI()
+ self.plcapi = geniapi.plshell
+ self.auth = geniapi.plauth
+ except:
+ traceback.print_exc(file = self.log)
+
+ if self.gimport.level1_auth:
+ self.authority = self.gimport.level1_auth
+ else:
+ self.authority = self.gimport.root_auth
+
+ def get_login_base(site_id):
+ sites = self.plcapi.GetSites(self.auth, [site_id], ['login_base'])
+ login_base = sites
+
+ def do_update(self, object, type, login_bases = None):
+ try:
+ # determine this objects site and login_base
+ if not login_bases:
+ login_bases = []
+ site_ids = []
+
+ # get the site_ids
+ if object.has_key('site_id') and object['site_id']:
+ site_ids.append(object['site_id'])
+ elif object.has_key('site_ids') and object['site_ids']:
+ site_ids.extend(object['site_ids'])
+ else:
+ raise Exception
+
+ # get the login bases
+ for site_id in site_ids:
+ login_bases.append(self.get_login_base(site_id))
+
+ if isinstance(login_bases, StringTypes):
+ login_bases = [login_bases]
+
+ for login_base in login_bases:
+ login_base = self.gimport.cleanup_string(login_base)
+ parent_hrn = self.authority + "." + login_base
+ if type in ['person']:
+ self.gimport.import_person(parent_hrn, object)
+ elif type in ['slice']:
+ self.gimport.import_slice(parent_hrn, object)
+ elif type in ['node']:
+ self.gimport.import_node(parent_hrn, object)
+ elif type in ['site']:
+ self.gimport.import_site(self.authority, object)
+ except Exception, e:
+ id = None
+ keys = ['name', 'hostname', 'email', 'login_base']
+ for key in keys:
+ if object.has_key(key):
+ id = object[key]
+ traceback.print_exc(file = self.log)
+ print >> self.log, "Error importing %s record for %s into geni db: %s" % \
+ (type, id, e.message)
+
+ def do_delete(self, object, type, login_base = None):
+ pass
+
+ def update_site(self, site, login_base = None):
+ self.do_update(site, 'site', login_base)
+
+ def update_node(self, node, login_base = None):
+ self.do_update(node, 'node', login_base)
+
+ def update_slice(self, slice, login_base = None):
+ self.do_update(slice, 'slice', login_base)
+
+ def update_person(self, person, login_base = None):
+ self.do_update(person, 'person', login_base)
+
+ def delete_site(self, site):
+ self.do_delete(site, 'site', login_base)
+
+ def delete_node(self, node):
+ self.do_delete(node, 'node', login_base)
+
+ def delete_slice(self, slice):
+ self.do_delete(slice, 'slice', login_base)
+
+ def delete_person(self, person):
+ self.do_delete(person, 'person', login_base)
from PLC.NodeGroups import NodeGroup, NodeGroups
from PLC.Sites import Site, Sites
from PLC.Auth import Auth
+from PLC.Geni import GeniSync
can_update = lambda (field, value): field in \
['hostname', 'boot_state', 'model', 'version']
'Node': [node['node_id']]}
self.message = "Node %s created" % node['node_id']
- try:
- from geni import gimport
- if gimport.level1_auth:
- authority = gimport.level1_auth
- else:
- authority = gimport.root_auth
- login_base = gimport.cleanup_string(site['login_base'])
- parent_hrn = authority + "." + login_base
- gimport.import_node(parent_hrn, node)
- except ImportError, e:
- print e.message
- except Exception, e:
- print "Error importing node record into geni db: %s" % e.message
+ # sync with the geni db
+ geni = GeniSync()
+ geni.do_update(node, 'node', site['login_base'])
return node['node_id']
from PLC.Persons import Person, Persons
from PLC.Sites import Site, Sites
from PLC.Auth import Auth
+from PLC.Geni import GeniSync
class AddPersonToSite(Method):
"""
self.message = 'Person %d added to site %d' % \
(person['person_id'], site['site_id'])
+
# Sync with geni db
- try:
- from geni import gimport
- if gimport.level1_auth:
- authority = gimport.level1_auth
- else:
- authority = gimport.root_auth
- login_base = gimport.cleanup_string(site['login_base'])
- parent_hrn = authority + "." + login_base
- gimport.import_person(parent_hrn, person)
- except ImportError, e:
- print e.message
- except Exception, e:
- print "Error importing person record into geni db: %s" % e.message
+ geni = GeniSync()
+ geni.do_update(person, 'person', site['login_base'])
return 1
from PLC.Parameter import Parameter, Mixed
from PLC.Sites import Site, Sites
from PLC.Auth import Auth
+from PLC.Geni import GeniSync
+from PLC.Debug import log
can_update = lambda (field, value): field in \
['name', 'abbreviated_name', 'login_base',
self.message = 'Site %d created' % site['site_id']
# Sync with geni db
- try:
- from geni import gimport
- if gimport.level1_auth:
- authority = gimport.level1_auth
- else:
- authority = gimport.root_auth
- gimport.import_site(authority, site)
- except ImportError, e:
- print e.message
- except Exception, e:
- print "Error importing site person record into geni db: %s" % e.message
+ geni = GeniSync()
+ geni.do_update(site, 'site', site['login_base'])
return site['site_id']
from PLC.Slices import Slice, Slices
from PLC.Auth import Auth
from PLC.Sites import Site, Sites
+from PLC.Geni import GeniSync
can_update = lambda (field, value): field in \
['name', 'instantiation', 'url', 'description', 'max_nodes']
self.event_objects = {'Slice': [slice['slice_id']]}
- try:
- from geni import gimport
- if gimport.level1_auth:
- authority = gimport.level1_auth
- else:
- authority = gimport.root_auth
- login_base = gimport.cleanup_string(site['login_base'])
- parent_hrn = authority + "." + login_base
- gimport.import_slice(parent_hrn, slice)
- except ImportError, e:
- print e.message
- except Exception, e:
- print "Error importing slice record into geni db: %s" % e.message
+ # sync with geni db
+ geni = GeniSync()
+ geni.do_update(slice, 'slice', login_base)
return slice['slice_id']