update_debug_levels.py revision 341a00311680a440d7f979f06c34c70d86c9367a
from __future__ import print_function
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("Stray arguments: %s" % ' '.join([a for a in args]), file=sys.stderr)
return None
return options
def verbose(msg, verbosity):
if verbosity:
print(msg)
def main():
options = parse_options()
if not options:
print("Cannot parse options", file=sys.stderr)
return 1
# Import the current config file
try:
sssdconfig = SSSDConfig.SSSDConfig()
sssdconfig.import_config()
except Exception as 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