def getExistingOverridesConfig(overrides): """ Fetch previously set values from the overrides file. These values will be used to set the defaults for the commandline. Sensible defaults are chosen for any settings left blank. FIXME: I don't use this yet. """ d = { 'enableProxy': None, 'enableProxyAuth': None, 'httpProxy': None, 'proxyUser': None, 'proxyPassword': None, 'serverURL': '', 'sslCACert': '', 'useGPG': 1, } if os.path.exists(overrides): d.update(readConfigFile(overrides)) # now let's fill in any blanks with sensible defaults. if not d['serverURL']: d['serverURL'] = 'https://' + socket.gethostname() + '/XMLRPC' d['sslCACert'] = d['sslCACert'] or DEFAULT_CA_CERT_PATH # http_proxy can be one of None, '' or 'something:port' # None means leave the configuration alone. # '' or 'something:port' means remap it. if d['httpProxy'] == '': d['proxyUser'] = '' d['enableProxy'] = 0 elif d['httpProxy'] is None: d['proxyUser'] = None d['enableProxy'] = None # means no change else: d['enableProxy'] = 1 if d['proxyUser'] == '': d['proxyPassword'] = '' d['enableProxyAuth'] = 0 elif d['proxyUser'] is None: d['proxyPassword'] = None d['enableProxyAuth'] = None # means no change else: d['enableProxyAuth'] = 1 return d
def writeClientConfigOverrides(options): """ write our "overrides" configuration file This generated file is a configuration mapping file that is used to map settings in up2date and rhn_register when run through a seperate script. """ up2dateConfMap = { # some are directly mapped, others are handled more delicately 'http_proxy': 'httpProxy', 'http_proxy_username': '******', 'http_proxy_password': '******', 'hostname': 'serverURL', 'ssl_cert': 'sslCACert', 'no_gpg': 'useGPG', } _bootstrapDir = cleanupAbsPath(os.path.join(options.pub_tree, 'bootstrap')) if not os.path.exists(_bootstrapDir): print "* creating '%s'" % _bootstrapDir os.makedirs(_bootstrapDir) # permissions should be fine d = {} if options.hostname: scheme = 'https' if options.no_ssl: scheme = 'http' d['serverURL'] = scheme + '://' + options.hostname + '/XMLRPC' d['noSSLServerURL'] = 'http://' + options.hostname + '/XMLRPC' # if proxy, enable it # if "", disable it if options.http_proxy: d['enableProxy'] = '1' d[up2dateConfMap['http_proxy']] = options.http_proxy else: d['enableProxy'] = '0' d[up2dateConfMap['http_proxy']] = "" # if proxy username, enable auth proxy # if "", disable it if options.http_proxy_username: d['enableProxyAuth'] = '1' d[up2dateConfMap['http_proxy_username']] = options.http_proxy_username d[up2dateConfMap['http_proxy_password']] = options.http_proxy_password else: d['enableProxyAuth'] = '0' d[up2dateConfMap['http_proxy_username']] = "" d[up2dateConfMap['http_proxy_password']] = "" # CA SSL certificate is a bit complicated. options.ssl_cert may be a file # or it may be an RPM or it may be "", which means "try to figure it out # by searching through the --pub-tree on your own. _isRpmYN = processCACertPath(options) if not options.ssl_cert: sys.stderr.write( "WARNING: no SSL CA certificate or RPM found in %s\n" % options.pub_tree) if not options.no_ssl: sys.stderr.write( " Fix it by hand or turn off SSL in the clients (--no-ssl)\n" ) _certname = os.path.basename(options.ssl_cert) or CA_CRT_NAME _certdir = os.path.dirname(DEFAULT_CA_CERT_PATH) if _isRpmYN: hdr = rhn_rpm.get_package_header(options.ssl_cert) # Grab the first file out of the rpm d[up2dateConfMap['ssl_cert']] = hdr[rhn_rpm.rpm.RPMTAG_FILENAMES][ 0] # UGLY! else: d[up2dateConfMap['ssl_cert']] = os.path.join(_certdir, _certname) d[up2dateConfMap['no_gpg']] = int(operator.truth(not options.no_gpg)) writeYN = 1 _overrides = cleanupAbsPath(os.path.join(_bootstrapDir, options.overrides)) if os.path.exists(_overrides): if readConfigFile(_overrides) != d: # only back it up if different backup = rotateFile(_overrides, depth=5, verbosity=options.verbose) if backup and options.verbose >= 0: print """\ * WARNING: if there were hand edits to the rotated (backed up) file, some settings may need to be migrated.""" else: # exactly the same... no need to write writeYN = 0 print """\ * client configuration overrides (old and new are identical; not written): '%s'\n""" % _overrides if writeYN: fout = open(_overrides, 'wb') # header fout.write("""\ # RHN Client (rhn_register/up2date) config-overrides file v4.0 # # To be used only in conjuction with client_config_update.py # # This file was autogenerated. # # The simple rules: # - a setting explicitely overwrites the setting in # /etc/syconfig/rhn/{rhn_register,up2date} on the client system. # - if a setting is removed, the client's state for that setting remains # unchanged. """) keys = d.keys() keys.sort() for key in keys: if d[key] is not None: fout.write("%s=%s\n" % (key, d[key])) fout.close() print """\ * bootstrap overrides (written): '%s'\n""" % _overrides if options.verbose >= 0: print "Values written:" for k, v in d.items(): print k + ' ' * (25 - len(k)) + repr(v)
def writeClientConfigOverrides(options): """ write our "overrides" configuration file This generated file is a configuration mapping file that is used to map settings in up2date and rhn_register when run through a seperate script. """ up2dateConfMap = { # some are directly mapped, others are handled more delicately 'http_proxy': 'httpProxy', 'http_proxy_username': '******', 'http_proxy_password': '******', 'hostname': 'serverURL', 'ssl_cert': 'sslCACert', 'no_gpg': 'useGPG', } _bootstrapDir = cleanupAbsPath(os.path.join(options.pub_tree, 'bootstrap')) if not os.path.exists(_bootstrapDir): print "* creating '%s'" % _bootstrapDir os.makedirs(_bootstrapDir) # permissions should be fine d = {} if options.hostname: scheme = 'https' if options.no_ssl: scheme = 'http' d['serverURL'] = scheme + '://' + options.hostname + '/XMLRPC' d['noSSLServerURL'] = 'http://' + options.hostname + '/XMLRPC' # if proxy, enable it # if "", disable it if options.http_proxy: d['enableProxy'] = '1' d[up2dateConfMap['http_proxy']] = options.http_proxy else: d['enableProxy'] = '0' d[up2dateConfMap['http_proxy']] = "" # if proxy username, enable auth proxy # if "", disable it if options.http_proxy_username: d['enableProxyAuth'] = '1' d[up2dateConfMap['http_proxy_username']] = options.http_proxy_username d[up2dateConfMap['http_proxy_password']] = options.http_proxy_password else: d['enableProxyAuth'] = '0' d[up2dateConfMap['http_proxy_username']] = "" d[up2dateConfMap['http_proxy_password']] = "" # CA SSL certificate is a bit complicated. options.ssl_cert may be a file # or it may be an RPM or it may be "", which means "try to figure it out # by searching through the --pub-tree on your own. _isRpmYN = processCACertPath(options) if not options.ssl_cert: sys.stderr.write("WARNING: no SSL CA certificate or RPM found in %s\n" % options.pub_tree) if not options.no_ssl: sys.stderr.write(" Fix it by hand or turn off SSL in the clients (--no-ssl)\n") _certname = os.path.basename(options.ssl_cert) or CA_CRT_NAME _certdir = os.path.dirname(DEFAULT_CA_CERT_PATH) if _isRpmYN: hdr = rhn_rpm.get_package_header(options.ssl_cert) # Grab the first file out of the rpm d[up2dateConfMap['ssl_cert']] = hdr[rhn_rpm.RPMTAG_FILENAMES][0] # UGLY! else: d[up2dateConfMap['ssl_cert']] = os.path.join(_certdir, _certname) d[up2dateConfMap['no_gpg']] = int(operator.truth(not options.no_gpg)) writeYN = 1 _overrides = cleanupAbsPath(os.path.join(_bootstrapDir, options.overrides)) if os.path.exists(_overrides): if readConfigFile(_overrides) != d: # only back it up if different backup = rotateFile(_overrides, depth=5, verbosity=options.verbose) if backup and options.verbose>=0: print """\ * WARNING: if there were hand edits to the rotated (backed up) file, some settings may need to be migrated.""" else: # exactly the same... no need to write writeYN = 0 print """\ * client configuration overrides (old and new are identical; not written): '%s'\n""" % _overrides if writeYN: fout = open(_overrides, 'wb') # header fout.write("""\ # RHN Client (rhn_register/up2date) config-overrides file v4.0 # # To be used only in conjuction with client_config_update.py # # This file was autogenerated. # # The simple rules: # - a setting explicitely overwrites the setting in # /etc/syconfig/rhn/{rhn_register,up2date} on the client system. # - if a setting is removed, the client's state for that setting remains # unchanged. """) keys = d.keys() keys.sort() for key in keys: if d[key] is not None: fout.write("%s=%s\n" % (key, d[key])) fout.close() print """\ * bootstrap overrides (written): '%s'\n""" % _overrides if options.verbose>=0: print "Values written:" for k, v in d.items(): print k + ' '*(25-len(k)) + repr(v)