def handle_startup(options, config): """ Handle startup options """ if options.version: print constants.version sys.exit() if options.validate: validate_remove_file() sys.exit() # Generate /etc/machine-id if it does not exist new = False if options.reregister: new = True options.register = True logger.debug("Machine-ID: " + generate_machine_id(new)) # Disable GPG verification if options.no_gpg: logger.warn("WARNING: GPG VERIFICATION DISABLED") config.set(APP_NAME, 'gpg', 'False') # Log config except the password # and proxy as it might have a pw as well for item, value in config.items(APP_NAME): if item != 'password' and item != 'proxy': logger.debug("%s:%s", item, value) if config.getboolean(APP_NAME, 'auto_update'): options.update = True if config.getboolean(APP_NAME, 'auto_config'): # Try to discover if we are connected to a satellite or not try_auto_configuration(config) # Set the schedule if not options.no_schedule and not config.getboolean( APP_NAME, 'no_schedule'): InsightsSchedule() # Test connection, useful for proxy debug if options.test_connection: pconn = InsightsConnection(config) pconn.test_connection() if options.unregister: pconn = InsightsConnection(config) pconn.unregister() sys.exit() # Handle registration, grouping, and display name if options.register: opt_group = options.group message, hostname, opt_group, display_name = register(config, options) if options.display_name is None and options.group is None: logger.info('Successfully registered %s', hostname) elif options.display_name is None: logger.info('Successfully registered %s in group %s', hostname, opt_group) else: logger.info('Successfully registered %s as %s in group %s', hostname, display_name, opt_group) logger.info(message) # Collect debug/log information if options.support: support = InsightsSupport(config) support.collect_support_info() sys.exit(0) # Just check registration status if options.status: support = InsightsSupport(config) reg_check = support.registration_check() logger.info('\n'.join(reg_check)) sys.exit(0) # Set offline mode for OSP use offline_mode = False if (options.offline and options.from_stdin) or options.no_upload: offline_mode = True # First startup, no .registered or .unregistered # Ignore if in offline mode if (not os.path.isfile(constants.registered_file) and not os.path.isfile(constants.unregistered_file) and not options.register and not offline_mode): logger.error('This machine has not yet been registered.') logger.error('Use --register to register this machine.') logger.error("Exiting") sys.exit(1) # Check for .unregistered file if (os.path.isfile(constants.unregistered_file) and not options.register and not offline_mode): logger.error("This machine has been unregistered.") logger.error("Use --register if you would like to re-register this machine.") logger.error("Exiting") sys.exit(1)
def _main(): """ Main entry point Parse cmdline options Parse config file Call data collector """ global logger sys.excepthook = handle_exception parser = optparse.OptionParser() set_up_options(parser) options, args = parser.parse_args() if len(args) > 0: parser.error("Unknown arguments: %s" % args) sys.exit(1) if options.version: print constants.version sys.exit() if options.validate: validate_remove_file() sys.exit() config = parse_config_file() logger, handler = set_up_logging(config, options) # Defer logging till it's ready logger.debug('invoked with args: %s', options) logger.debug("Version: " + constants.version) # Generate /etc/machine-id if it does not exist new = False if options.reregister: new = True options.register = True logger.debug("Machine-ID: " + generate_machine_id(new)) # Disable GPG verification if options.no_gpg: logger.warn("WARNING: GPG VERIFICATION DISABLED") config.set(APP_NAME, 'gpg', 'False') # Log config except the password # and proxy as it might have a pw as well for item, value in config.items(APP_NAME): if item != 'password' and item != 'proxy': logger.debug("%s:%s", item, value) if config.getboolean(APP_NAME, 'auto_update'): options.update = True if config.getboolean(APP_NAME, 'auto_config'): # Try to discover if we are connected to a satellite or not try_auto_configuration(config) # Set the schedule InsightsSchedule(options) # Test connection, useful for proxy debug if options.test_connection: pconn = InsightsConnection(config) pconn.test_connection() if options.unregister: pconn = InsightsConnection(config) pconn.unregister() sys.exit() # Handle registration, grouping, and display name if options.register: opt_group = options.group hostname, opt_group, display_name = register(config, options) if options.display_name is None and options.group is None: logger.info('Successfully registered %s', hostname) elif options.display_name is None: logger.info('Successfully registered %s in group %s', hostname, opt_group) else: logger.info('Successfully registered %s as %s in group %s', hostname, display_name, opt_group) # Check for .unregistered file if os.path.isfile(constants.unregistered_file): logger.error("This machine has been unregistered") logger.error("Use --register if you would like to re-register this machine") logger.error("Exiting") sys.exit(1) # do work collect_data_and_upload(config, options) handler.doRollover()
def handle_startup(): """ Handle startup options """ # ----do X and exit options---- # show version and exit if InsightsClient.options.version: print constants.version sys.exit() if (InsightsClient.options.container_mode and not InsightsClient.options.run_here and insights_client_container_is_available()): sys.exit(run_in_container()) if (InsightsClient.options.container_mode and not InsightsClient.options.only): logger.error( "Client running in container mode but no image/container specified via --only." ) sys.exit(1) if InsightsClient.options.only != None and len( InsightsClient.options.only) < 12: logger.error( "Image/Container ID must be atleast twelve characters long.") sys.exit(1) if InsightsClient.options.validate: validate_remove_file() sys.exit() if InsightsClient.options.enable_schedule and InsightsClient.options.disable_schedule: logger.error( 'Conflicting options: --enable-schedule and --disable-schedule') sys.exit(1) if InsightsClient.options.enable_schedule: # enable automatic scheduling InsightsSchedule() InsightsClient.config.set(APP_NAME, 'no_schedule', False) logger.info('Automatic scheduling for Insights has been enabled.') logger.debug('Updating config...') modify_config_file({'no_schedule': 'False'}) sys.exit() if InsightsClient.options.disable_schedule: # disable automatic schedling InsightsSchedule(set_cron=False).remove_scheduling() InsightsClient.config.set(APP_NAME, 'no_schedule', True) logger.info('Automatic scheduling for Insights has been disabled.') logger.debug('Updating config...') modify_config_file({'no_schedule': 'True'}) sys.exit() # do auto_config here, for connection-related 'do X and exit' options if InsightsClient.config.getboolean( APP_NAME, 'auto_config') and not InsightsClient.options.offline: # Try to discover if we are connected to a satellite or not try_auto_configuration() if InsightsClient.options.test_connection: pconn = InsightsConnection() rc = pconn.test_connection() sys.exit(rc) if InsightsClient.options.status: reg_check = registration_check() logger.info('\n'.join(reg_check['messages'])) # exit with !status, 0 for True, 1 for False sys.exit(not reg_check['status']) if InsightsClient.options.support: support = InsightsSupport() support.collect_support_info() sys.exit() # ----config options---- # log the config # ignore password and proxy -- proxy might have pw for item, value in InsightsClient.config.items(APP_NAME): if item != 'password' and item != 'proxy': logger.debug("%s:%s", item, value) if InsightsClient.config.getboolean( APP_NAME, 'auto_update') and not InsightsClient.options.offline: # TODO: config updates option, but in GPG option, the option updates # the config. make this consistent InsightsClient.options.update = True # disable automatic scheduling if it was set in the config, and if the job exists if InsightsClient.config.getboolean(APP_NAME, 'no_schedule'): cron = InsightsSchedule(set_cron=False) if cron.already_linked(): cron.remove_scheduling() logger.debug( 'Automatic scheduling for Insights has been disabled.') # ----modifier options---- if InsightsClient.options.no_gpg: logger.warn("WARNING: GPG VERIFICATION DISABLED") InsightsClient.config.set(APP_NAME, 'gpg', 'False') if InsightsClient.options.just_upload: if InsightsClient.options.offline or InsightsClient.options.no_upload: logger.error( 'Cannot use --just-upload in combination with --offline or --no-upload.' ) sys.exit(1) # override these for great justice InsightsClient.options.no_tar_file = False InsightsClient.options.keep_archive = True # if InsightsClient.options.container_mode and InsightsClient.options.no_tar_file: # logger.error('Invalid combination: --container and --no-tar-file') # sys.exit(1) # can't use bofa if InsightsClient.options.from_stdin and InsightsClient.options.from_file: logger.error('Can\'t use both --from-stdin and --from-file.') sys.exit(1) # handle some docker/atomic flags if InsightsClient.options.use_docker and InsightsClient.options.use_atomic: logger.error('Cant\'t use both --use-docker and --use-atomic.') sys.exit(1) if InsightsClient.options.to_stdout: InsightsClient.options.no_upload = True # ----register options---- # put this first to avoid conflicts with register if InsightsClient.options.unregister: pconn = InsightsConnection() pconn.unregister() sys.exit() # force-reregister -- remove machine-id files and registration files # before trying to register again new = False if InsightsClient.options.reregister: new = True InsightsClient.options.register = True delete_registered_file() delete_unregistered_file() delete_machine_id() logger.debug('Machine-id: %s', generate_machine_id(new)) if InsightsClient.options.register: try_register() if not InsightsClient.config.getboolean(APP_NAME, 'no_schedule'): InsightsSchedule() # check registration before doing any uploads # Ignore if in offline mode if not InsightsClient.options.register and not InsightsClient.options.offline: msg, is_registered = _is_client_registered() if not is_registered: logger.error(msg) sys.exit(1)
def handle_startup(): """ Handle startup options """ # ----do X and exit options---- # show version and exit if InsightsClient.options.version: print constants.version sys.exit() if (InsightsClient.options.container_mode and not InsightsClient.options.run_here and insights_client_container_is_available()): sys.exit(run_in_container()) if InsightsClient.options.validate: validate_remove_file() sys.exit() if InsightsClient.options.enable_schedule and InsightsClient.options.disable_schedule: logger.error('Conflicting options: --enable-schedule and --disable-schedule') sys.exit(1) if InsightsClient.options.enable_schedule: # enable automatic scheduling InsightsSchedule(container_mode=options.container_mode) InsightsClient.config.set(APP_NAME, 'no_schedule', False) logger.info('Automatic scheduling for Insights has been enabled.') sys.exit() if InsightsClient.options.disable_schedule: # disable automatic schedling InsightsSchedule(set_cron=False).remove_scheduling() InsightsClient.config.set(APP_NAME, 'no_schedule', True) logger.info('Automatic scheduling for Insights has been disabled.') sys.exit() # do auto_config here, for connection-related 'do X and exit' options if InsightsClient.config.getboolean(APP_NAME, 'auto_config') and not InsightsClient.options.offline: # Try to discover if we are connected to a satellite or not try_auto_configuration() if InsightsClient.options.test_connection: pconn = InsightsConnection() rc = pconn.test_connection() sys.exit(rc) if InsightsClient.options.status: reg_check = registration_check() logger.info('\n'.join(reg_check['messages'])) # exit with !status, 0 for True, 1 for False sys.exit(not reg_check['status']) if InsightsClient.options.support: support = InsightsSupport() support.collect_support_info() sys.exit() # ----config options---- # log the config # ignore password and proxy -- proxy might have pw for item, value in InsightsClient.config.items(APP_NAME): if item != 'password' and item != 'proxy': logger.debug("%s:%s", item, value) if InsightsClient.config.getboolean(APP_NAME, 'auto_update') and not InsightsClient.options.offline: # TODO: config updates option, but in GPG option, the option updates # the config. make this consistent InsightsClient.options.update = True # disable automatic scheduling if it was set in the config, and if the job exists if InsightsClient.config.getboolean(APP_NAME, 'no_schedule'): cron = InsightsSchedule(set_cron=False) if cron.already_linked(): cron.remove_scheduling() logger.debug('Automatic scheduling for Insights has been disabled.') # ----modifier options---- if InsightsClient.options.no_gpg: logger.warn("WARNING: GPG VERIFICATION DISABLED") InsightsClient.config.set(APP_NAME, 'gpg', 'False') if InsightsClient.options.just_upload: # override these for great justice InsightsClient.options.no_tar_file = False InsightsClient.options.keep_archive = True if InsightsClient.options.container_mode and InsightsClient.options.no_tar_file: logger.error('Invalid combination: --container and --no-tar-file') sys.exit(1) # can't use bofa if InsightsClient.options.from_stdin and InsightsClient.options.from_file: logger.error('Can\'t use both --from-stdin and --from-file.') sys.exit(1) # ----register options---- # put this first to avoid conflicts with register if InsightsClient.options.unregister: pconn = InsightsConnection() pconn.unregister() sys.exit() # force-reregister -- remove machine-id files and registration files before trying to register again new = False if InsightsClient.options.reregister: new = True InsightsClient.options.register = True delete_registered_file() delete_unregistered_file() delete_machine_id() logger.debug('Machine-id: %s', generate_machine_id(new)) if InsightsClient.options.register: try_register() if not InsightsClient.config.getboolean('no_schedule'): InsightsSchedule(container_mode=options.container_mode) # check registration before doing any uploads # Ignore if in offline mode if not InsightsClient.options.register and not InsightsClient.options.offline: msg, is_registered = _is_client_registered() if not is_registered: logger.error(msg) sys.exit(1)
def handle_startup(options, config): """ Handle startup options """ if options.version: print constants.version sys.exit() if options.validate: validate_remove_file() sys.exit() # Generate /etc/machine-id if it does not exist new = False if options.reregister: new = True options.register = True logger.debug("Machine-ID: " + generate_machine_id(new)) # Disable GPG verification if options.no_gpg: logger.warn("WARNING: GPG VERIFICATION DISABLED") config.set(APP_NAME, 'gpg', 'False') # Log config except the password # and proxy as it might have a pw as well for item, value in config.items(APP_NAME): if item != 'password' and item != 'proxy': logger.debug("%s:%s", item, value) if config.getboolean(APP_NAME, 'auto_update'): options.update = True if config.getboolean(APP_NAME, 'auto_config'): # Try to discover if we are connected to a satellite or not try_auto_configuration(config) # Set the schedule InsightsSchedule() # Test connection, useful for proxy debug if options.test_connection: pconn = InsightsConnection(config) pconn.test_connection() if options.unregister: pconn = InsightsConnection(config) pconn.unregister() sys.exit() # Handle registration, grouping, and display name if options.register: opt_group = options.group message, hostname, opt_group, display_name = register(config, options) if options.display_name is None and options.group is None: logger.info('Successfully registered %s', hostname) elif options.display_name is None: logger.info('Successfully registered %s in group %s', hostname, opt_group) else: logger.info('Successfully registered %s as %s in group %s', hostname, display_name, opt_group) logger.info(message) # Check for .unregistered file if os.path.isfile(constants.unregistered_file): logger.error("This machine has been unregistered") logger.error("Use --register if you would like to re-register this machine") logger.error("Exiting") sys.exit(1)