From 2ca67b5c40c643dcb533de98b24608a169c79eba Mon Sep 17 00:00:00 2001 From: Tony Mack Date: Wed, 15 Apr 2009 03:04:06 +0000 Subject: [PATCH] updated the geniwrapper up calls to use PLC.Geni.GeniSync --- PLC/Geni.py | 96 ++++++++++++++++++++++++++++++++++ PLC/Methods/AddNode.py | 17 ++---- PLC/Methods/AddPersonToSite.py | 17 ++---- PLC/Methods/AddSite.py | 15 ++---- PLC/Methods/AddSlice.py | 17 ++---- 5 files changed, 112 insertions(+), 50 deletions(-) create mode 100644 PLC/Geni.py diff --git a/PLC/Geni.py b/PLC/Geni.py new file mode 100644 index 00000000..b5425cbc --- /dev/null +++ b/PLC/Geni.py @@ -0,0 +1,96 @@ +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) diff --git a/PLC/Methods/AddNode.py b/PLC/Methods/AddNode.py index 89e4049c..5cc5a88e 100644 --- a/PLC/Methods/AddNode.py +++ b/PLC/Methods/AddNode.py @@ -5,6 +5,7 @@ from PLC.Nodes import Node, Nodes 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'] @@ -63,18 +64,8 @@ class AddNode(Method): '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'] diff --git a/PLC/Methods/AddPersonToSite.py b/PLC/Methods/AddPersonToSite.py index 85a426e5..9dfebad2 100644 --- a/PLC/Methods/AddPersonToSite.py +++ b/PLC/Methods/AddPersonToSite.py @@ -4,6 +4,7 @@ from PLC.Parameter import Parameter, Mixed 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): """ @@ -54,19 +55,9 @@ 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 diff --git a/PLC/Methods/AddSite.py b/PLC/Methods/AddSite.py index a77b2f35..837598dc 100644 --- a/PLC/Methods/AddSite.py +++ b/PLC/Methods/AddSite.py @@ -3,6 +3,8 @@ from PLC.Method import Method 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', @@ -39,16 +41,7 @@ class AddSite(Method): 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'] diff --git a/PLC/Methods/AddSlice.py b/PLC/Methods/AddSlice.py index 58ffb12f..ead41c45 100644 --- a/PLC/Methods/AddSlice.py +++ b/PLC/Methods/AddSlice.py @@ -6,6 +6,7 @@ from PLC.Parameter import Parameter, Mixed 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'] @@ -77,18 +78,8 @@ class AddSlice(Method): 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'] -- 2.47.0