def _is_client_registered(): msg_notyet = 'This machine has not yet been registered.' msg_unreg = 'This machine has been unregistered.' msg_doreg = 'Use --register to register this machine.' msg_rereg = 'Use --register if you would like to re-register this machine.' msg_exit = 'Exiting...' # check reg status w/ API reg_check = registration_check() if not reg_check['status']: # not registered if reg_check['unreg_date']: # system has been unregistered from the UI msg = '\n'.join([msg_unreg, msg_rereg, msg_exit]) write_unregistered_file(reg_check['unreg_date']) return msg, False else: # no record of system in remote msg = '\n'.join([msg_notyet, msg_doreg, msg_exit]) # clear any local records delete_registered_file() delete_unregistered_file() return msg, False else: # API confirms reg if not os.path.isfile(constants.registered_file): write_registered_file() # delete any stray unregistered delete_unregistered_file() return '', True
def _is_client_registered(): msg_notyet = 'This machine has not yet been registered.' msg_unreg = 'This machine has been unregistered.' msg_doreg = 'Use --register to register this machine.' msg_rereg = 'Use --force-register if you would like to re-register this machine.' msg_exit = 'Exiting...' # check reg status w/ API reg_check = registration_check() if not reg_check['status']: # not registered if reg_check['unreg_date']: # system has been unregistered from the UI msg = '\n'.join([msg_unreg, msg_rereg, msg_exit]) write_unregistered_file(reg_check['unreg_date']) return msg, False else: # no record of system in remote msg = '\n'.join([msg_notyet, msg_doreg, msg_exit]) # clear any local records delete_registered_file() delete_unregistered_file() return msg, False else: # API confirms reg if not os.path.isfile(constants.registered_file): write_registered_file() # delete any stray unregistered delete_unregistered_file() return '', True
def try_register(): # if we are running an image analysis then dont register if config["analyze_container"]: logger.info( "Running client in Container mode. Bypassing registration.") return # check reg status with API reg_check = registration_check(get_connection()) if reg_check['status']: logger.info('This host has already been registered.') # regenerate the .registered file write_to_disk(constants.registered_file) return True if reg_check['unreachable']: logger.error(reg_check['messages'][1]) return None message, hostname, group, display_name = register() if config['display_name'] is None and config['group'] is None: logger.info('Successfully registered host %s', hostname) elif config['display_name'] is None: logger.info('Successfully registered host %s in group %s', hostname, group) else: logger.info('Successfully registered host %s as %s in group %s', hostname, display_name, group) if message: logger.info(message) return reg_check, message, hostname, group, display_name
def try_register(): if os.path.isfile(constants.registered_file): logger.info('This host has already been registered.') return # check reg status with API reg_check = registration_check() if reg_check['status']: logger.info('This host has already been registered.') # regenerate the .registered file write_registered_file() return message, hostname, group, display_name = register() if InsightsClient.options.display_name is None and InsightsClient.options.group is None: logger.info('Successfully registered %s', hostname) elif InsightsClient.options.display_name is None: logger.info('Successfully registered %s in group %s', hostname, group) else: logger.info('Successfully registered %s as %s in group %s', hostname, display_name, group) if message: logger.info(message)
def _is_client_registered(): # If the client is running in container mode, bypass this stuff msg_container_mode = 'Client running in container/image mode. Bypassing registration check' if config['analyze_container']: return msg_container_mode, False # All other cases msg_notyet = 'This machine has not yet been registered.' msg_unreg = 'This machine has been unregistered.' msg_doreg = 'Use --register to register this machine.' msg_rereg = 'Use --register if you would like to re-register this machine.' # check reg status w/ API reg_check = registration_check(get_connection()) if not reg_check['status']: # not registered if reg_check['unreg_date']: # system has been unregistered from the UI msg = '\n'.join([msg_unreg, msg_rereg]) write_unregistered_file(reg_check['unreg_date']) return msg, False else: # no record of system in remote msg = '\n'.join([msg_notyet, msg_doreg]) # clear any local records write_to_disk(constants.registered_file, delete=True) write_to_disk(constants.unregistered_file, delete=True) return msg, False else: # API confirms reg if not os.path.isfile(constants.registered_file): write_to_disk(constants.registered_file) # delete any stray unregistered write_to_disk(constants.unregistered_file, delete=True) return '', True
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(): """ 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 get_registration_status(): return registration_check(get_connection())