import PLC.Shell
self.shell = PLC.Shell.Shell(globals = globals())
- def get_auth_table(self, auth_name):
- AuthHierarchy = self.AuthHierarchy
- auth_info = AuthHierarchy.get_auth_info(auth_name)
-
- table = GeniTable(hrn=auth_name,
- cninfo=auth_info.get_dbinfo())
-
- # if the table doesn't exist, then it means we haven't put any records
- # into this authority yet.
-
- if not table.exists():
- trace("Import: creating table for authority " + auth_name)
- table.create()
-
- return table
-
def create_top_level_auth_records(self, hrn):
AuthHierarchy = self.AuthHierarchy
- # if root doesnt exist, create it
+ # if auth records for this hrn dont exist, create it
if not AuthHierarchy.auth_exists(hrn):
AuthHierarchy.create_auth(hrn)
- # get the parent hrn
- parent_hrn = get_authority(hrn)
- if not parent_hrn:
- parent_hrn = hrn
# get the auth info of the newly created root auth (parent)
# or level1_auth if it exists
- auth_info = AuthHierarchy.get_auth_info(parent_hrn)
if self.level1_auth:
auth_info = AuthHierarchy.get_auth_info(hrn)
- table = self.get_auth_table(parent_hrn)
+ parent_hrn = hrn
+ else:
+ parent_hrn = get_authority(hrn)
+ if not parent_hrn:
+ parent_hrn = hrn
+ auth_info = AuthHierarchy.get_auth_info(parent_hrn)
+
+ table = GeniTable()
+ auth_record = table.find({'type': 'authority', 'hrn': hrn})
- auth_record = table.resolve("authority", hrn)
if not auth_record:
auth_record = GeniRecord(hrn=hrn, gid=auth_info.get_gid_object(), type="authority", pointer=-1)
trace(" inserting authority record for " + hrn)
trace("Import: importing person " + hrn)
- table = self.get_auth_table(parent_hrn)
+ table = GeniTable()
key_ids = []
if 'key_ids' in person and person['key_ids']:
# get the user's private key from the SSH keys they have uploaded
# to planetlab
- keys = shell.GetKeys(plc_auth, key_ids)
+ keys = self.shell.GetKeys(self.plc_auth, key_ids)
key = keys[0]['key']
pkey = convert_public_key(key)
else:
# create the gid
person_gid = AuthHierarchy.create_gid(hrn, create_uuid(), pkey)
- person_record = table.resolve("user", hrn)
+ person_record = table.find({'type': 'user', 'hrn': hrn})
if not person_record:
trace(" inserting user record for " + hrn)
person_record = GeniRecord(hrn=hrn, gid=person_gid, type="user", pointer=person['person_id'])
hrn = parent_hrn + "." + slicename
trace("Import: importing slice " + hrn)
- table = self.get_auth_table(parent_hrn)
+ table = GeniTable()
- slice_record = table.resolve("slice", hrn)
+ slice_record = table.find({'type': 'sslice', 'hrn': hrn})
if not slice_record:
pkey = Keypair(create=True)
slice_gid = AuthHierarchy.create_gid(hrn, create_uuid(), pkey)
def import_node(self, parent_hrn, node):
AuthHierarchy = self.AuthHierarchy
- nodename = node['hostname'].replace(".", "_")
+ nodename = node['hostname'].split(".")[0]
nodename = cleanup_string(nodename)
if not nodename:
trace("Import: importing node " + hrn)
- table = self.get_auth_table(parent_hrn)
+ table = GeniTable()
- node_record = table.resolve("node", hrn)
+ node_record = table.find({'type': 'node', 'hrn': hrn})
if not node_record:
pkey = Keypair(create=True)
node_gid = AuthHierarchy.create_gid(hrn, create_uuid(), pkey)
auth_info = AuthHierarchy.get_auth_info(hrn)
- table = self.get_auth_table(parent_hrn)
+ table = GeniTable()
- auth_record = table.resolve("authority", hrn)
+ auth_record = table.find({'type': 'authority', 'hrn': 'hrn'})
if not auth_record:
auth_record = GeniRecord(hrn=hrn, gid=auth_info.get_gid_object(), type="authority", pointer=site['site_id'])
trace(" inserting authority record for " + hrn)
def delete_record(self, parent_hrn, object, type):
# get the hrn
+ table = GeniTable()
hrn = None
if type in ['slice'] and 'name' in object and object['name']:
slice_name = object['name'].split("_")[0]
hrn = parent_hrn + "." + slice_name
- elif type in ['user', 'person'] and 'email' in object and object['email']:
+ elif type in ['user'] and 'email' in object and object['email']:
person_name = object['email'].split('@')[0]
hrn = parent_hrn + "." + person_name
elif type in ['node'] and 'hostname' in object and object['hostname']:
hrn = parent_hrn + "." + node_name
elif type in ['site'] and 'login_base' in object and object['login_base']:
site_name = object['login_base']
- hrn = parent_hrn + "." + site_name
+ hrn = parent_hrn
+ parent_hrn = get_authority(hrn)
+ type = "authority"
+ # delete all records whos authority is this site
+ records = table.find({'authority': hrn})
+ for record in records:
+ table.remove(record)
else:
return
-
- table = self.get_auth_table(parent_hrn)
- record_list = table.resolve(type, hrn)
- if not record_list:
- return
- record = record_list[0]
- table.remove(record)
+
+ # delete the record
+ record_list = table.find({'type': type, 'hrn': hrn})
+ for record in record_list:
+ table.remove(record)