def client_cfg_from_tpl(product): homedir = os.path.expanduser("~") if product == configure.OPSIM: filename = "opsim-client.conf" cfg_link = os.path.join(homedir, ".lsst", "opsim.conf") elif product == configure.MYSQL: filename = "my-client.cnf" cfg_link = os.path.join(homedir, ".my.cnf") else: logging.fatal( "Unable to apply configuration template for " "product %s", product) sys.exit(1) template_file = os.path.join(run_base_dir, "templates", "etc", filename) cfg_file = os.path.join(run_base_dir, "etc", filename) configure.apply_tpl(template_file, cfg_file) logging.info( "Client configuration file created : {0}".format(cfg_file)) if os.path.isfile(cfg_link) and os.lstat(cfg_link): try: is_symlink_correct = os.path.samefile( cfg_link, cfg_file) except os.error: # link is broken is_symlink_correct = False if not is_symlink_correct: if args.force or configure.user_yes_no_query( ("Do you want to update link to {0} user " "configuration file ".format(product) + "(currently pointing to {0}) with {1}?".format( os.path.realpath(cfg_link), cfg_file))): os.remove(cfg_link) os.symlink(cfg_file, cfg_link) else: logging.info("Client configuration unmodified. " "Exiting.") sys.exit(1) else: if product == configure.OPSIM: # might need to create directory first try: os.makedirs(os.path.join(homedir, ".lsst")) logging.debug("Creating client configuration " "directory : ~/.lsst") except os.error: pass try: os.remove(cfg_link) logging.debug( "Removing broken symbolic link : {0}".format( cfg_link)) except os.error: pass os.symlink(cfg_file, cfg_link) logging.info("{0} is now pointing to : {1}".format( cfg_link, cfg_file))
def main(): args = parseArgs() logging.basicConfig(format='%(levelname)s: %(message)s', level=args.verbose_level) logging.info("opsim configuration tool\n" + "=======================================" + "================================") opsim_dir = os.path.abspath(os.path.join( os.path.dirname(os.path.realpath(__file__)), "..")) if configure.PREPARE in args.step_list: if os.path.exists(args.opsim_run_dir): if args.force or configure.user_yes_no_query( "WARNING : Do you want to erase all configuration" + " data in {0} ?".format(args.opsim_run_dir)): shutil.rmtree(args.opsim_run_dir) else: logging.info("Stopping opsim configuration, please specify an " "other configuration directory") sys.exit(1) in_config_dir = os.path.join(opsim_dir, "cfg") in_template_config_dir = os.path.join(in_config_dir, "templates") out_template_config_dir = os.path.join(args.opsim_run_dir, "templates") logging.info("Copying template configuration from {0} to {1}" .format(in_template_config_dir, args.opsim_run_dir)) shutil.copytree(in_template_config_dir, out_template_config_dir) in_meta_config_file = os.path.join(in_config_dir, "opsim-meta.conf") logging.info("Creating meta-configuration file: {0}" .format(args.meta_config_file)) params_dict = { 'RUN_BASE_DIR': args.opsim_run_dir } configure.apply_tpl(in_meta_config_file, args.meta_config_file, params_dict) def intersect(seq1, seq2): ''' returns subset of seq1 which is contained in seq2 keeping original ordering of items ''' seq2 = set(seq2) return [item for item in seq1 if item in seq2] def contains_configuration_step(step_list): return bool(intersect(step_list, configure.STEP_RUN_LIST)) ################################### # # Running configuration procedure # ################################### if contains_configuration_step(args.step_list): try: logging.info("Reading meta-configuration file {0}" .format(args.meta_config_file)) config = commons.read_config(args.meta_config_file) # used in templates targets comments config['opsim']['meta_config_file'] = args.meta_config_file except ConfigParser.NoOptionError, exc: logging.fatal("Missing option in meta-configuration file: %s", exc) sys.exit(1) if configure.DIRTREE in args.step_list: logging.info("Defining main directory structure") configure.check_root_dirs() configure.check_root_symlinks() ########################################## # # Creating opsim services configuration # using templates and meta_config_file # ########################################## run_base_dir = config['opsim']['run_base_dir'] if configure.ETC in args.step_list: logging.info("Creating configuration files in {0}" .format(os.path.join(run_base_dir, "etc")) + " and scripts in {0}" .format(os.path.join(run_base_dir, "tmp"))) template_root = os.path.join(run_base_dir, "templates") dest_root = os.path.join(run_base_dir) configure.apply_templates(template_root, dest_root) components_to_configure = intersect(args.step_list, configure.COMPONENTS) if len(components_to_configure) > 0: logging.info("Running configuration scripts") configuration_scripts_dir = os.path.join(run_base_dir, 'tmp', 'configure') for comp in components_to_configure: cfg_script = os.path.join(configuration_scripts_dir, comp + ".sh") if os.path.isfile(cfg_script): commons.run_command([cfg_script]) def client_cfg_from_tpl(product): homedir = os.path.expanduser("~") if product == configure.OPSIM: filename = "opsim-client.conf" cfg_link = os.path.join(homedir, ".lsst", "opsim.conf") elif product == configure.MYSQL: filename = "my-client.cnf" cfg_link = os.path.join(homedir, ".my.cnf") else: logging.fatal("Unable to apply configuration template for " "product %s", product) sys.exit(1) template_file = os.path.join( run_base_dir, "templates", "etc", filename ) cfg_file = os.path.join( run_base_dir, "etc", filename ) configure.apply_tpl( template_file, cfg_file ) logging.info( "Client configuration file created : {0}".format(cfg_file) ) if os.path.isfile(cfg_link) and os.lstat(cfg_link): try: is_symlink_correct = os.path.samefile(cfg_link, cfg_file) except os.error: # link is broken is_symlink_correct = False if not is_symlink_correct: if args.force or configure.user_yes_no_query( ("Do you want to update link to {0} user " "configuration file ".format(product) + "(currently pointing to {0}) with {1}?" .format(os.path.realpath(cfg_link), cfg_file))): os.remove(cfg_link) os.symlink(cfg_file, cfg_link) else: logging.info("Client configuration unmodified. " "Exiting.") sys.exit(1) else: if product == configure.OPSIM: # might need to create directory first try: os.makedirs(os.path.join(homedir, ".lsst")) logging.debug("Creating client configuration " "directory : ~/.lsst") except os.error: pass try: os.remove(cfg_link) logging.debug("Removing broken symbolic link : {0}" .format(cfg_link)) except os.error: pass os.symlink(cfg_file, cfg_link) logging.info( "{0} is now pointing to : {1}".format(cfg_link, cfg_file) ) if configure.MYSQL in args.step_list: client_cfg_from_tpl(configure.MYSQL) if configure.CLIENT in args.step_list: client_cfg_from_tpl(configure.OPSIM)
def main(): args = parseArgs() logging.basicConfig(format='%(levelname)s: %(message)s', level=args.verbose_level) logging.info("opsim configuration tool\n" + "=======================================" + "================================") opsim_dir = os.path.abspath( os.path.join(os.path.dirname(os.path.realpath(__file__)), "..")) if configure.PREPARE in args.step_list: if os.path.exists(args.opsim_run_dir): if args.force or configure.user_yes_no_query( "WARNING : Do you want to erase all configuration" + " data in {0} ?".format(args.opsim_run_dir)): shutil.rmtree(args.opsim_run_dir) else: logging.info("Stopping opsim configuration, please specify an " "other configuration directory") sys.exit(1) in_config_dir = os.path.join(opsim_dir, "cfg") in_template_config_dir = os.path.join(in_config_dir, "templates") out_template_config_dir = os.path.join(args.opsim_run_dir, "templates") logging.info("Copying template configuration from {0} to {1}".format( in_template_config_dir, args.opsim_run_dir)) shutil.copytree(in_template_config_dir, out_template_config_dir) in_meta_config_file = os.path.join(in_config_dir, "opsim-meta.conf") logging.info("Creating meta-configuration file: {0}".format( args.meta_config_file)) params_dict = {'RUN_BASE_DIR': args.opsim_run_dir} configure.apply_tpl(in_meta_config_file, args.meta_config_file, params_dict) def intersect(seq1, seq2): ''' returns subset of seq1 which is contained in seq2 keeping original ordering of items ''' seq2 = set(seq2) return [item for item in seq1 if item in seq2] def contains_configuration_step(step_list): return bool(intersect(step_list, configure.STEP_RUN_LIST)) ################################### # # Running configuration procedure # ################################### if contains_configuration_step(args.step_list): try: logging.info("Reading meta-configuration file {0}".format( args.meta_config_file)) config = commons.read_config(args.meta_config_file) # used in templates targets comments config['opsim']['meta_config_file'] = args.meta_config_file except ConfigParser.NoOptionError, exc: logging.fatal("Missing option in meta-configuration file: %s", exc) sys.exit(1) if configure.DIRTREE in args.step_list: logging.info("Defining main directory structure") configure.check_root_dirs() configure.check_root_symlinks() ########################################## # # Creating opsim services configuration # using templates and meta_config_file # ########################################## run_base_dir = config['opsim']['run_base_dir'] if configure.ETC in args.step_list: logging.info("Creating configuration files in {0}".format( os.path.join(run_base_dir, "etc")) + " and scripts in {0}".format( os.path.join(run_base_dir, "tmp"))) template_root = os.path.join(run_base_dir, "templates") dest_root = os.path.join(run_base_dir) configure.apply_templates(template_root, dest_root) components_to_configure = intersect(args.step_list, configure.COMPONENTS) if len(components_to_configure) > 0: logging.info("Running configuration scripts") configuration_scripts_dir = os.path.join(run_base_dir, 'tmp', 'configure') for comp in components_to_configure: cfg_script = os.path.join(configuration_scripts_dir, comp + ".sh") if os.path.isfile(cfg_script): commons.run_command([cfg_script]) def client_cfg_from_tpl(product): homedir = os.path.expanduser("~") if product == configure.OPSIM: filename = "opsim-client.conf" cfg_link = os.path.join(homedir, ".lsst", "opsim.conf") elif product == configure.MYSQL: filename = "my-client.cnf" cfg_link = os.path.join(homedir, ".my.cnf") else: logging.fatal( "Unable to apply configuration template for " "product %s", product) sys.exit(1) template_file = os.path.join(run_base_dir, "templates", "etc", filename) cfg_file = os.path.join(run_base_dir, "etc", filename) configure.apply_tpl(template_file, cfg_file) logging.info( "Client configuration file created : {0}".format(cfg_file)) if os.path.isfile(cfg_link) and os.lstat(cfg_link): try: is_symlink_correct = os.path.samefile( cfg_link, cfg_file) except os.error: # link is broken is_symlink_correct = False if not is_symlink_correct: if args.force or configure.user_yes_no_query( ("Do you want to update link to {0} user " "configuration file ".format(product) + "(currently pointing to {0}) with {1}?".format( os.path.realpath(cfg_link), cfg_file))): os.remove(cfg_link) os.symlink(cfg_file, cfg_link) else: logging.info("Client configuration unmodified. " "Exiting.") sys.exit(1) else: if product == configure.OPSIM: # might need to create directory first try: os.makedirs(os.path.join(homedir, ".lsst")) logging.debug("Creating client configuration " "directory : ~/.lsst") except os.error: pass try: os.remove(cfg_link) logging.debug( "Removing broken symbolic link : {0}".format( cfg_link)) except os.error: pass os.symlink(cfg_file, cfg_link) logging.info("{0} is now pointing to : {1}".format( cfg_link, cfg_file)) if configure.MYSQL in args.step_list: client_cfg_from_tpl(configure.MYSQL) if configure.CLIENT in args.step_list: client_cfg_from_tpl(configure.OPSIM)
def client_cfg_from_tpl(product): homedir = os.path.expanduser("~") if product == configure.OPSIM: filename = "opsim-client.conf" cfg_link = os.path.join(homedir, ".lsst", "opsim.conf") elif product == configure.MYSQL: filename = "my-client.cnf" cfg_link = os.path.join(homedir, ".my.cnf") else: logging.fatal("Unable to apply configuration template for " "product %s", product) sys.exit(1) template_file = os.path.join( run_base_dir, "templates", "etc", filename ) cfg_file = os.path.join( run_base_dir, "etc", filename ) configure.apply_tpl( template_file, cfg_file ) logging.info( "Client configuration file created : {0}".format(cfg_file) ) if os.path.isfile(cfg_link) and os.lstat(cfg_link): try: is_symlink_correct = os.path.samefile(cfg_link, cfg_file) except os.error: # link is broken is_symlink_correct = False if not is_symlink_correct: if args.force or configure.user_yes_no_query( ("Do you want to update link to {0} user " "configuration file ".format(product) + "(currently pointing to {0}) with {1}?" .format(os.path.realpath(cfg_link), cfg_file))): os.remove(cfg_link) os.symlink(cfg_file, cfg_link) else: logging.info("Client configuration unmodified. " "Exiting.") sys.exit(1) else: if product == configure.OPSIM: # might need to create directory first try: os.makedirs(os.path.join(homedir, ".lsst")) logging.debug("Creating client configuration " "directory : ~/.lsst") except os.error: pass try: os.remove(cfg_link) logging.debug("Removing broken symbolic link : {0}" .format(cfg_link)) except os.error: pass os.symlink(cfg_file, cfg_link) logging.info( "{0} is now pointing to : {1}".format(cfg_link, cfg_file) )