#
from sfa.util.faults import MissingSfaInfo, UnknownSfaType
from sfa.util.sfalogging import logger
-from sfa.util.table import SfaTable
from sfa.util.defaultdict import defaultdict
-
from sfa.util.xrn import hrn_to_urn, get_leaf
from sfa.util.plxrn import slicename_to_hrn, hostname_to_hrn, hrn_to_pl_slicename, hrn_to_pl_login_base
+# one would think the driver should not need to mess with the SFA db, but..
+from sfa.storage.table import SfaTable
+
# the driver interface, mostly provides default behaviours
from sfa.managers.driver import Driver
PlShell.__init__ (self, config)
self.hrn = config.SFA_INTERFACE_HRN
- # xxx thgen fixme - use SfaTable hardwired for now
- # will need to extend generic to support multiple storage systems
- #self.SfaTable = SfaTable
- # Initialize the PLC shell only if SFA wraps a myPLC
- rspec_type = config.get_aggregate_type()
- assert (rspec_type == 'pl' or rspec_type == 'vini' or \
- rspec_type == 'eucalyptus' or rspec_type == 'max')
########## disabled users
- def is_enabled_entity (self, record):
- self.fill_record_info(record)
+ def is_enabled (self, record):
+ # the incoming record was augmented already, so 'enabled' should be set
if record['type'] == 'user':
return record['enabled']
# only users can be disabled
return True
+ def augment_records_with_testbed_info (self, sfa_records):
+ return self.fill_record_info (sfa_records)
+
##########
def register (self, sfa_record, hrn, pub_key):
type = sfa_record['type']
records = [records]
self.fill_record_pl_info(records)
+ self.fill_record_hrns(records)
self.fill_record_sfa_info(records)
+ return records
def fill_record_pl_info(self, records):
"""
pubkeys = [keys[key_id]['key'] for key_id in record['key_ids'] if key_id in keys]
record['keys'] = pubkeys
- # fill in record hrns
- records = self.fill_record_hrns(records)
-
return records
def fill_record_hrns(self, records):
# we obtain
# get the sfa records
- # xxx thgen fixme - use SfaTable hardwired for now
- # table = self.SfaTable()
table = SfaTable()
person_list, persons = [], {}
person_list = table.find({'type': 'user', 'pointer': person_ids})
####################
# plcapi works by changes, compute what needs to be added/deleted
def update_relation (self, subject_type, target_type, subject_id, target_ids):
- # hard-wire the code for slice/user for now
+ # hard-wire the code for slice/user for now, could be smarter if needed
if subject_type =='slice' and target_type == 'user':
subject=self.GetSlices (subject_id)[0]
current_target_ids = subject['person_ids']