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 register(self): """ Register this machine """ delete_unregistered_file() client_hostname = determine_hostname() # This will undo a blacklist logger.debug("API: Create system") system = self.create_system(new_machine_id=False) # If we get a 409, we know we need to generate a new machine-id if system.status_code == 409: system = self.create_system(new_machine_id=True) self.handle_fail_rcs(system) logger.debug("System: %s", system.json()) message = system.headers.get("x-rh-message", "") write_registered_file() # Do grouping if InsightsClient.options.group is not None: self.do_group() if InsightsClient.options.group is not None: return (message, client_hostname, InsightsClient.options.group, InsightsClient.options.display_name) elif InsightsClient.options.display_name is not None: return (message, client_hostname, "None", InsightsClient.options.display_name) else: return (message, client_hostname, "None", "")
def register(self, group_id=None): """ Register this machine """ delete_unregistered_file() client_hostname = determine_hostname() # This will undo a blacklist logger.debug("API: Create system") system = self.create_system(new_machine_id=False) # If we get a 409, we know we need to generate a new machine-id if system.status_code == 409: system = self.create_system(new_machine_id=True) self.handle_fail_rcs(system) logger.debug("System: %s", system.json()) # Do grouping if group_id is not None: self.do_group(group_id) if group_id is not None: return (client_hostname, group_id) else: return (client_hostname, "None")
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 register(self, options): """ Register this machine """ delete_unregistered_file() client_hostname = determine_hostname() # This will undo a blacklist logger.debug("API: Create system") system = self.create_system(options, new_machine_id=False) # If we get a 409, we know we need to generate a new machine-id if system.status_code == 409: system = self.create_system(options, new_machine_id=True) self.handle_fail_rcs(system) logger.debug("System: %s", system.json()) # Do grouping if options.group is not None: self.do_group(options.group) if options.group is not None: return (client_hostname, options.group, options.display_name) elif options.display_name is not None: return (client_hostname, "None", options.display_name) else: return (client_hostname, "None", "")
def register(self): """ Register this machine """ delete_unregistered_file() client_hostname = determine_hostname() # This will undo a blacklist logger.debug("API: Create system") system = self.create_system(new_machine_id=False) # If we get a 409, we know we need to generate a new machine-id if system.status_code == 409: system = self.create_system(new_machine_id=True) self.handle_fail_rcs(system) logger.debug("System: %s", system.json()) message = system.headers.get("x-rh-message", "") write_registered_file() # Do grouping if InsightsClient.options.group is not None: self.do_group() # Display registration success messasge to STDOUT and logs if system.status_code == 201: try: system_json = system.json() machine_id = system_json["machine_id"] account_number = system_json["account_number"] logger.info("You successfully registered %s to account %s." % (machine_id, account_number)) except: logger.debug('Received invalid JSON on system registration.') logger.debug( 'API still indicates valid registration with 201 status code.' ) logger.debug(system) logger.debug(system.json()) if InsightsClient.options.group is not None: return (message, client_hostname, InsightsClient.options.group, InsightsClient.options.display_name) elif InsightsClient.options.display_name is not None: return (message, client_hostname, "None", InsightsClient.options.display_name) else: return (message, client_hostname, "None", "")
def register(self): """ Register this machine """ delete_unregistered_file() client_hostname = determine_hostname() # This will undo a blacklist logger.debug("API: Create system") system = self.create_system(new_machine_id=False) # If we get a 409, we know we need to generate a new machine-id if system.status_code == 409: system = self.create_system(new_machine_id=True) self.handle_fail_rcs(system) logger.debug("System: %s", system.json()) message = system.headers.get("x-rh-message", "") write_registered_file() # Do grouping if InsightsClient.options.group is not None: self.do_group() # Display registration success messasge to STDOUT and logs if system.status_code == 201: try: system_json = system.json() machine_id = system_json["machine_id"] account_number = system_json["account_number"] logger.info("You successfully registered %s to account %s." % (machine_id, account_number)) except: logger.debug('Received invalid JSON on system registration.') logger.debug('API still indicates valid registration with 201 status code.') logger.debug(system) logger.debug(system.json()) if InsightsClient.options.group is not None: return (message, client_hostname, InsightsClient.options.group, InsightsClient.options.display_name) elif InsightsClient.options.display_name is not None: return (message, client_hostname, "None", InsightsClient.options.display_name) else: return (message, client_hostname, "None", "")
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 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 # force-reregister -- remove machine-id files nd registration files before trying to register again if options.reregister: new = True options.register = True delete_registered_file() delete_unregistered_file() delete_machine_id() 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)