def update_check(self, res, arg_softwareVersion, arg_automaticUpdates, apt_source): try: update_available, update_needed, update_immediately, update_forced = False, False, False, False # FIXME: this must be changed to handle every major version separately (= update "tree") current_version, current_changelog = self.aptcache.get_apt_info(apt_source) if current_version is None: raise Exception('current up-to-date version not available, ignoring update check') rc = helpers.compare_product_versions(arg_softwareVersion, current_version) _log.debug('comparison result: %s (client version: %s, current version: %s)' % (rc, arg_softwareVersion, current_version)) if rc == 1: # client software is newer than available raise Exception('client software version (%s) is newer than ours (%s), unexpected' % \ (arg_softwareVersion, current_version)) elif rc == 0: # up-to-date update_available, update_needed, update_forced = False, False, False elif rc == -1: # update exists, policy check server_forced_update = False # FIXME - determine this somehow if we want critical updates if arg_automaticUpdates: update_available, update_needed, update_forced = True, True, False elif server_forced_update: update_available, update_needed, update_forced = True, True, True else: update_available, update_needed, update_forced = True, False, False # immediate updates, master option if self.master.immediate_update: _log.warning('master.immediate_update is True, forcing immediate update') update_immediately = True else: raise Exception('unknown result from compare_product_versions: %s' % rc) except: _log.exception('cannot perform version / update check, skipping') update_available, update_needed, update_forced = False, False, False _log.debug('update check result: %s, %s, %s' % (update_available, update_needed, update_forced)) res['updateAvailable'] = update_available res['updateNeeded'] = update_needed res['updateImmediately'] = update_immediately res['updateForced'] = update_forced
def _check_update_on_next_reboot(): try: ui_root = helpers.get_ui_config() if ui_root.hasS(ns_ui.automaticUpdates) and ui_root.getS(ns_ui.automaticUpdates, rdf.Boolean): # XXX: duplication update_info = helpers.get_db_root().getS(ns_ui.updateInfo, rdf.Type(ns_ui.UpdateInfo)) latest = update_info.getS(ns_ui.latestKnownVersion, rdf.String) current = helpers.get_product_version() if (latest != '') and (helpers.compare_product_versions(latest, current) > 0): return True else: return False else: return False except: # default, assume False _log.exception('cannot determine whether product update happens on next reboot') return False
def _check_update_on_next_reboot(): try: ui_root = helpers.get_ui_config() if ui_root.hasS(ns_ui.automaticUpdates) and ui_root.getS( ns_ui.automaticUpdates, rdf.Boolean): # XXX: duplication update_info = helpers.get_db_root().getS( ns_ui.updateInfo, rdf.Type(ns_ui.UpdateInfo)) latest = update_info.getS(ns_ui.latestKnownVersion, rdf.String) current = helpers.get_product_version() if (latest != '') and (helpers.compare_product_versions( latest, current) > 0): return True else: return False else: return False except: # default, assume False _log.exception( 'cannot determine whether product update happens on next reboot') return False
def _immediate_auto_update_check(self, identify_result): update_now = identify_result["updateImmediately"] # XXX: If this debug marker exists, autoupdate is forced if newer is available. if os.path.exists(constants.AUTOUPDATE_MARKERFILE): curr_ver = helpers.get_product_version() latest_ver = uihelpers.get_latest_product_version() if ( (curr_ver is not None) and (latest_ver is not None) and (helpers.compare_product_versions(latest_ver, curr_ver) > 0) ): _log.info( "detected that update is available (%s -> %s), immediate automatic update" % (curr_ver, latest_ver) ) update_now = True if update_now: # take action _log.info("management server has requested immediate update, forced check for updates now, rebooting") helpers.db_flush() uihelpers.ui_reboot( "immediate autoupdate", skip_update=False, force_update=True, force_fsck=True, delay=0.0 )