### $URL$
#
##
-# Import PLC records into the Geni database. It is indended that this tool be
-# run once to create Geni records that reflect the current state of the
+# Import PLC records into the SFA database. It is indended that this tool be
+# run once to create SFA records that reflect the current state of the
# planetlab database.
#
# The import tool assumes that the existing PLC hierarchy should all be part
import getopt
import sys
import tempfile
-
+import logging.handlers
+import logging
from sfa.util.record import *
-from sfa.util.genitable import GeniTable
-from sfa.util.misc import *
+from sfa.util.table import SfaTable
+from sfa.util.namespace import *
from sfa.util.config import Config
-from sfa.util.report import trace, error
from sfa.trust.certificate import convert_public_key, Keypair
from sfa.trust.trustedroot import *
from sfa.trust.hierarchy import *
from sfa.plc.api import *
-from sfa.util.geniclient import *
from sfa.trust.gid import create_uuid
from sfa.plc.sfaImport import *
-
-
+from sfa.util.report import trace, error
def process_options():
global hrn
f.close()
def main():
+ # setup the logger
+ LOGFILE='/var/log/sfa_import_plc.log'
+ logging.basicConfig(level=logging.INFO,
+ format='%(asctime)s - %(message)s',
+ filename=LOGFILE)
+ rotate_handler = logging.handlers.RotatingFileHandler(LOGFILE, maxBytes=1000000, backupCount=5)
+ logger = logging.getLogger()
+ logger.addHandler(rotate_handler)
+
process_options()
config = Config()
if not config.SFA_REGISTRY_ENABLED:
root_auth = config.SFA_REGISTRY_ROOT_AUTH
level1_auth = config.SFA_REGISTRY_LEVEL1_AUTH
keys_filename = config.config_path + os.sep + 'person_keys.py'
- sfaImporter = sfaImport()
+ sfaImporter = sfaImport(logger)
shell = sfaImporter.shell
plc_auth = sfaImporter.plc_auth
AuthHierarchy = sfaImporter.AuthHierarchy
TrustedRoots = sfaImporter.TrustedRoots
- table = GeniTable()
+ table = SfaTable()
if not table.exists():
table.create()
if not level1_auth or level1_auth in ['']:
level1_auth = None
- print "Import: creating top level authorities"
if not level1_auth:
sfaImporter.create_top_level_auth_records(root_auth)
import_auth = root_auth
sfaImporter.create_top_level_auth_records(level1_auth)
import_auth = level1_auth
- print "Import: adding", import_auth, "to trusted list"
+ trace("Import: adding" + import_auth + "to trusted list", logger)
authority = AuthHierarchy.get_auth_info(import_auth)
TrustedRoots.add_gid(authority.get_gid_object())
# but its not a site record
if site_hrn not in existing_hrns or \
(site_hrn, 'authority') not in existing_records:
- sfaImporter.import_site(import_auth, site)
+ site_hrn = sfaImporter.import_site(import_auth, site)
# import node records
for node_id in site['node_ids']:
(hrn, 'user') not in existing_records or update_record:
sfaImporter.import_person(site_hrn, person)
-
# remove stale records
for (record_hrn, type) in existing_records.keys():
+ record = existing_records[(record_hrn, type)]
# if this is the interface name dont do anything
- if record_hrn == import_auth:
- continue
-
+ if record_hrn == import_auth or record['peer_authority']:
+ continue
+ # dont delete vini's internet2 placeholdder record
+ # normally this would be deleted becuase it does not have a plc record
+ if ".vini" in import_auth and import_auth.endswith('vini') and \
+ record_hrn.endswith("internet2"):
+ continue
+
found = False
- record = existing_records[(record_hrn, type)]
if type == 'authority':
for site in sites:
continue
if not found:
- trace("Import: Removing %s %s" % (type, record_hrn))
record_object = existing_records[(record_hrn, type)]
sfaImporter.delete_record(record_hrn, type)
# save pub keys
- trace('saving current pub keys')
+ trace('Import: saving current pub keys', logger)
save_keys(keys_filename, person_keys)
if __name__ == "__main__":