X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fserver%2Fsfa-server.py;h=2685530c8b4dd0a800ba7e5d922c8932db208635;hb=ca37ec53ab3e64ad0c87e69e05697fd7f0302539;hp=9bdf9cb06864f3ac1b882f6e57f25c484bc47745;hpb=30c870a0f92d2daed62e860c6d8f0ada4ba0427a;p=sfa.git diff --git a/sfa/server/sfa-server.py b/sfa/server/sfa-server.py index 9bdf9cb0..2685530c 100755 --- a/sfa/server/sfa-server.py +++ b/sfa/server/sfa-server.py @@ -3,9 +3,9 @@ ### $Id$ ### $URL$ # -# GENI PLC Wrapper +# SFA PLC Wrapper # -# This wrapper implements the Geni Registry and Slice Interfaces on PLC. +# This wrapper implements the SFA Registry and Slice Interfaces on PLC. # Depending on command line options, it starts some combination of a # Registry, an Aggregate Manager, and a Slice Manager. # @@ -18,7 +18,7 @@ # is up to date and accurate. # # 1) Import the existing planetlab database, creating the -# appropriate geni records. This is done by running the "sfa-import-plc.py" tool. +# appropriate SFA records. This is done by running the "sfa-import-plc.py" tool. # # 2) Create a "trusted_roots" directory and place the certificate of the root # authority in that directory. Given the defaults in sfa-import-plc.py, this @@ -30,19 +30,24 @@ ## # TCP ports for the three servers -registry_port=12345 -aggregate_port=12346 -slicemgr_port=12347 +#registry_port=12345 +#aggregate_port=12346 +#slicemgr_port=12347 +### xxx todo not in the config yet component_port=12346 - import os, os.path import sys from optparse import OptionParser +import logging + +from sfa.util.sfalogging import sfa_logger from sfa.trust.trustedroot import TrustedRootList from sfa.trust.certificate import Keypair, Certificate from sfa.trust.hierarchy import Hierarchy from sfa.util.config import Config -from sfa.util.report import trace +from sfa.plc.api import SfaAPI +from sfa.server.registry import Registries +from sfa.server.aggregate import Aggregates # after http://www.erlenstar.demon.co.uk/unix/faq_2.html def daemon(): @@ -54,7 +59,7 @@ def daemon(): devnull = os.open(os.devnull, os.O_RDWR) os.dup2(devnull, 0) # xxx fixme - this is just to make sure that nothing gets stupidly lost - should use devnull - crashlog = os.open('/var/log/sfa.daemon', os.O_RDWR | os.O_APPEND | os.O_CREAT, 0644) + crashlog = os.open('/var/log/httpd/sfa_access_log', os.O_RDWR | os.O_APPEND | os.O_CREAT, 0644) os.dup2(crashlog, 1) os.dup2(crashlog, 2) @@ -80,8 +85,8 @@ def init_server_key(server_key_file, server_cert_file, config, hierarchy): if not os.path.exists(key_file): # if it doesnt exist then this is probably a fresh interface # with no records. Generate a random keypair for now - trace("server's public key not found in %s" % key_file) - trace("generating a random server key pair") + sfa_logger.debug("server's public key not found in %s" % key_file) + sfa_logger.debug("generating a random server key pair") key = Keypair(create=True) key.save_to_file(server_key_file) cert = Certificate(subject=subject) @@ -144,17 +149,20 @@ def init_server(options, config): try: manager = __import__(manager_module, fromlist=[manager_base]) except: manager = None if manager and hasattr(manager, 'init_server'): - manager.init_server() - + manager.init_server() -def main(): - # xxx get rid of globals - name consistently CamelCase or under_score - global AuthHierarchy - global TrustedRoots - global registry_port - global aggregate_port - global slicemgr_port +def sync_interfaces(server_key_file, server_cert_file): + """ + Attempt to install missing trusted gids and db records for + our federated interfaces + """ + api = SfaAPI(key_file = server_key_file, cert_file = server_cert_file) + registries = Registries(api) + aggregates = Aggregates(api) + registries.sync_interfaces() + aggregates.sync_interfaces() +def main(): # Generate command line parser parser = OptionParser(usage="sfa-server [options]") parser.add_option("-r", "--registry", dest="registry", action="store_true", @@ -170,40 +178,45 @@ def main(): parser.add_option("-d", "--daemon", dest="daemon", action="store_true", help="Run as daemon.", default=False) (options, args) = parser.parse_args() - - if (options.daemon): daemon() + if options.verbose: sfa_logger.setLevel(logging.DEBUG) config = Config() + if config.SFA_API_DEBUG: sfa_logger.setLevel(logging.DEBUG) hierarchy = Hierarchy() - trusted_roots = TrustedRootList(config.get_trustedroots_dir()) server_key_file = os.path.join(hierarchy.basedir, "server.key") server_cert_file = os.path.join(hierarchy.basedir, "server.cert") init_server_key(server_key_file, server_cert_file, config, hierarchy) - init_server(options, config) + init_server(options, config) + sync_interfaces(server_key_file, server_cert_file) + if (options.daemon): daemon() # start registry server if (options.registry): from sfa.server.registry import Registry - r = Registry("", registry_port, server_key_file, server_cert_file) + r = Registry("", config.SFA_REGISTRY_PORT, server_key_file, server_cert_file) r.start() # start aggregate manager if (options.am): from sfa.server.aggregate import Aggregate - a = Aggregate("", aggregate_port, server_key_file, server_cert_file) + a = Aggregate("", config.SFA_AGGREGATE_PORT, server_key_file, server_cert_file) a.start() # start slice manager if (options.sm): from sfa.server.slicemgr import SliceMgr - s = SliceMgr("", slicemgr_port, server_key_file, server_cert_file) + s = SliceMgr("", config.SFA_SM_PORT, server_key_file, server_cert_file) s.start() if (options.cm): from sfa.server.component import Component - c = Component("", component_port, server_key_file, server_cert_file) + c = Component("", config.component_port, server_key_file, server_cert_file) +# c = Component("", config.SFA_COMPONENT_PORT, server_key_file, server_cert_file) c.start() if __name__ == "__main__": - main() + try: + main() + except: + sfa_logger.log_exc_critical("SFA server is exiting")