diff options
-rw-r--r-- | contrib/rhel/update_debug_levels.py | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/contrib/rhel/update_debug_levels.py b/contrib/rhel/update_debug_levels.py new file mode 100644 index 00000000..a9462625 --- /dev/null +++ b/contrib/rhel/update_debug_levels.py @@ -0,0 +1,100 @@ +import os +import sys +import shutil +import traceback +from optparse import OptionParser +import SSSDConfig + + +# Older versions of SSSD (1.5 and earlier) would take a debug_level +# value set in the [sssd] section as authoritative for all other +# sections where not explicitly overridden. We changed this so that +# all sections need to set it if they want debug logs set. +# This script can be run to make the new version continue to produce +# the same logs as the old versions did, by explicitly adding +# debug_level to all domains and services that did not have it set +# already. + +def parse_options(): + parser = OptionParser() + parser.add_option("", "--no-backup", action="store_false", + dest="backup", default=True, + help="""Do not provide backup file after conversion. +The script copies the original file with the suffix .bak.<timestamp> +by default""") + parser.add_option("-v", "--verbose", action="store_true", + dest="verbose", default=False, + help="Be verbose") + (options, args) = parser.parse_args() + if len(args) > 0: + print >>sys.stderr, "Stray arguments: %s" % ' '.join([a for a in args]) + return None + + return options + +def verbose(msg, verbosity): + if verbosity: + print msg + +def main(): + options = parse_options() + if not options: + print >> sys.stderr, "Cannot parse options" + return 1 + + # Import the current config file + try: + sssdconfig = SSSDConfig.SSSDConfig() + sssdconfig.import_config() + + except Exception, e: + print "Error: %s" % e + verbose(traceback.format_exc(), options.verbose) + return 2 + + # Check the [sssd] section for debug_level + sssd_service = sssdconfig.get_service('sssd') + + if not 'debug_level' in sssd_service.options.keys(): + # Nothing to do, just return success + verbose("No changes required, no backup necessary", + options.verbose) + return 0 + + debug_level = sssd_service.options['debug_level'] + verbose("Setting all sections to debug_level = %d" % debug_level, + options.verbose) + + # Loop through services + for service in sssdconfig.list_services(): + svc = sssdconfig.get_service(service) + if not 'debug_level' in svc.options.keys(): + # Not explicitly set, so add it + svc.set_option('debug_level', debug_level) + sssdconfig.save_service(svc) + + # Loop through domains (active AND inactive) + for domain in sssdconfig.list_domains(): + dom = sssdconfig.get_domain(domain) + if not 'debug_level' in dom.options.keys(): + # Not explicitly set, so add it + dom.set_option('debug_level', debug_level) + sssdconfig.save_domain(dom) + + # Save the original file + if options.backup: + import datetime + currenttime = datetime.datetime.utcnow() + newfile = "/etc/sssd/sssd.conf.bak.%s" % currenttime.isoformat() + verbose("Backing up existing configuration to %s" % newfile, + options.verbose) + shutil.copy2("/etc/sssd/sssd.conf", newfile) + + # Save the changes + sssdconfig.write() + +if __name__ == "__main__": + ret = main() + sys.exit(ret) +else: + raise ImportError |