validate_config.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import logging
  2. import sys
  3. from argparse import ArgumentParser
  4. from borgmatic.config import collect, validate
  5. logger = logging.getLogger(__name__)
  6. def parse_arguments(*arguments):
  7. '''
  8. Given command-line arguments with which this script was invoked, parse the arguments and return
  9. them as an ArgumentParser instance.
  10. '''
  11. config_paths = collect.get_default_config_paths()
  12. parser = ArgumentParser(description='Validate borgmatic configuration file(s).')
  13. parser.add_argument(
  14. '-c',
  15. '--config',
  16. nargs='+',
  17. dest='config_paths',
  18. default=config_paths,
  19. help=f'Configuration filenames or directories, defaults to: {config_paths}',
  20. )
  21. return parser.parse_args(arguments)
  22. def main(): # pragma: no cover
  23. args = parse_arguments(*sys.argv[1:])
  24. logging.basicConfig(level=logging.INFO, format='%(message)s')
  25. config_filenames = tuple(collect.collect_config_filenames(args.config_paths))
  26. if len(config_filenames) == 0:
  27. logger.critical('No files to validate found')
  28. sys.exit(1)
  29. found_issues = False
  30. for config_filename in config_filenames:
  31. try:
  32. validate.parse_configuration(config_filename, validate.schema_filename())
  33. except (ValueError, OSError, validate.Validation_error) as error:
  34. logging.critical(f'{config_filename}: Error parsing configuration file')
  35. logging.critical(error)
  36. found_issues = True
  37. if found_issues:
  38. sys.exit(1)
  39. else:
  40. logger.info(f"All given configuration files are valid: {', '.join(config_filenames)}")