def getPLCShell(self):
self.plauth = {'Username': self.config.GENI_PLC_USER,
- 'AuthMethod': 'password',
- 'AuthString': self.config.GENI_PLC_PASSWORD}
+ 'AuthMethod': 'password',
+ 'AuthString': self.config.GENI_PLC_PASSWORD}
try:
import PLC.Shell
shell = PLC.Shell.Shell(globals = globals())
plc_host = self.config.GENI_PLC_HOST
plc_port = self.config.GENI_PLC_PORT
plc_api_path = self.config.GENI_PLC_API_PATH
- url = "https://%(plc_host)s:%(plc_port)s/%(plc_api_path)s/" % \
- locals()
+ url = "https://%(plc_host)s:%(plc_port)s/%(plc_api_path)s/" % locals()
shell = xmlrpclib.Server(url, verbose = 0, allow_none = True)
shell.AuthCheck(self.plauth)
return shell
def getPLCShellVersion(self):
- # We need to figure out what version of PLCAPI are talking to.
- # Some calls we need to make later will be different depending
+ # We need to figure out what version of PLCAPI we are talking to.
+ # Some calls we need to make later will be different depending on
# the api version.
try:
# This is probably a bad way to determine api versions
self_cred = registry.get_credential(None, type, self.hrn)
cred = registry.get_credential(self_cred, type, self.hrn)
cred.save_to_file(cred_filename, save_parents=True)
+ return cred
def getCredentialFromLocalRegistry(self):
"""
# @param geni_fields dictionary of geni fields
# @param pl_fields dictionary of PLC fields (output)
- def geni_fields_to_pl_fields(self, type, hrn, geni_fields, pl_fields):
- if type == "user":
- if not "email" in pl_fields:
- if not "email" in geni_fields:
- raise MissingGeniInfo("email")
- pl_fields["email"] = geni_fields["email"]
-
- if not "first_name" in pl_fields:
- pl_fields["first_name"] = "geni"
-
- if not "last_name" in pl_fields:
- pl_fields["last_name"] = hrn
-
- elif type == "slice":
- if not "instantiation" in pl_fields:
- pl_fields["instantiation"] = "delegated" # "plc-instantiated"
- if not "name" in pl_fields:
- pl_fields["name"] = hrn_to_pl_slicename(hrn)
- if not "max_nodes" in pl_fields:
- pl_fields["max_nodes"] = 10
+ def geni_fields_to_pl_fields(self, type, hrn, record):
+ pl_record = {}
+ for field in record:
+ pl_record[field] = record[field]
+
+ if type == "slice":
+ if not "instantiation" in pl_record:
+ pl_record["instantiation"] = "delegated" # "plc-instantiated"
+ if not "name" in pl_record:
+ pl_record["name"] = hrn_to_pl_slicename(hrn)
+ if not "max_nodes" in pl_record:
+ pl_record["max_nodes"] = 10
elif type == "node":
- if not "hostname" in pl_fields:
- if not "dns" in geni_fields:
+ if not "hostname" in pl_record:
+ if not "dns" in record:
raise MissingGeniInfo("dns")
- pl_fields["hostname"] = geni_fields["dns"]
- if not "model" in pl_fields:
- pl_fields["model"] = "geni"
+ pl_record["hostname"] = record["dns"]
+ if not "model" in pl_record:
+ pl_record["model"] = "geni"
elif type == "authority":
- pl_fields["login_base"] = hrn_to_pl_login_base(hrn)
+ pl_record["login_base"] = hrn_to_pl_login_base(hrn)
- if not "name" in pl_fields:
- pl_fields["name"] = hrn
+ if not "name" in pl_record:
+ pl_record["name"] = hrn
- if not "abbreviated_name" in pl_fields:
- pl_fields["abbreviated_name"] = hrn
+ if not "abbreviated_name" in pl_record:
+ pl_record["abbreviated_name"] = hrn
- if not "enabled" in pl_fields:
- pl_fields["enabled"] = True
-
- if not "is_public" in pl_fields:
- pl_fields["is_public"] = True
+ if not "enabled" in pl_record:
+ pl_record["enabled"] = True
+ if not "is_public" in pl_record:
+ pl_record["is_public"] = True
+ return pl_record
def fill_record_pl_info(self, record):
"""
Fill in the planetlab specific fields of a Geni record. This
- involves calling the appropraite PLC method to retrie the
- dtabase record for the object.
+ involves calling the appropriate PLC method to retrieve the
+ database record for the object.
- PLC data is filled into the pl_fino field of the record.
+ PLC data is filled into the pl_info field of the record.
- @param record record to fill in field (in/out param)
+ @param record: record to fill in field (in/out param)
"""
type = record.get_type()
pointer = record.get_pointer()
# for example, the top level authority records which are
# authorities, but not PL "sites"
if pointer == -1:
- record.set_pl_info({})
+ record.update({})
return
if (type in ["authority", "sa", "ma"]):
pubkeys = [key['key'] for key in keys]
pl_record['keys'] = pubkeys
- record.set_pl_info(pl_record)
+ record.update(pl_record)
def lookup_users(self, auth_table, user_id_list, role="*"):
for user_record in user_records:
self.fill_record_info(user_record)
- user_roles = user_record.get_pl_info().get("roles")
+ user_roles = user_record.get("roles")
if (role=="*") or (role in user_roles):
record_list.append(user_record.get_name())
return record_list
if (type == "slice"):
auth_table = self.auth.get_auth_table(self.auth.get_authority(record.get_name()))
- person_ids = record.pl_info.get("person_ids", [])
+ person_ids = record.get("person_ids", [])
researchers = self.lookup_users(auth_table, person_ids)
geni_info['researcher'] = researchers
elif (type == "authority"):
auth_table = self.auth.get_auth_table(record.get_name())
- person_ids = record.pl_info.get("person_ids", [])
+ person_ids = record.get("person_ids", [])
pis = self.lookup_users(auth_table, person_ids, "pi")
operators = self.lookup_users(auth_table, person_ids, "tech")
owners = self.lookup_users(auth_table, person_ids, "admin")
geni_info['pi'] = pis
geni_info['operator'] = operators
geni_info['owner'] = owners
- # TODO: OrganizationName
+ # xxx TODO: OrganizationName
elif (type == "node"):
- geni_info['dns'] = record.pl_info.get("hostname", "")
- # TODO: URI, LatLong, IP, DNS
+ geni_info['dns'] = record.get("hostname", "")
+ # xxx TODO: URI, LatLong, IP, DNS
elif (type == "user"):
- geni_info['email'] = record.pl_info.get("email", "")
- # TODO: PostalAddress, Phone
+ geni_info['email'] = record.get("email", "")
+ # xxx TODO: PostalAddress, Phone
- record.set_geni_info(geni_info)
+ record.update(geni_info)
def fill_record_info(self, record):
"""
self.fill_record_geni_info(record)
def update_membership_list(self, oldRecord, record, listName, addFunc, delFunc):
- # get a list of the HRNs tht are members of the old and new records^M
- if oldRecord:
- if oldRecord.pl_info == None:
- oldRecord.pl_info = {}
- oldList = oldRecord.get_geni_info().get(listName, [])
- else:
- oldList = []
- newList = record.get_geni_info().get(listName, [])
+ # get a list of the HRNs tht are members of the old and new records
+ oldList = oldRecord.get(listName, [])
+ newList = record.get(listName, [])
# if the lists are the same, then we don't have to update anything
if (oldList == newList):
userRecord = records[0]
newIdList.append(userRecord.get_pointer())
- # build a list of the old person ids from the person_ids field of the
- # pl_info
+ # build a list of the old person ids from the person_ids field
if oldRecord:
- oldIdList = oldRecord.pl_info.get("person_ids", [])
+ oldIdList = oldRecord.get("person_ids", [])
containerId = oldRecord.get_pointer()
else:
# if oldRecord==None, then we are doing a Register, instead of an
self.plshell.AddPersonToSlice,
self.plshell.DeletePersonFromSlice)
elif record.type == "authority":
- # TODO
+ # xxx TODO
pass