|
@@ -11,7 +11,6 @@ from borgmatic.config import convert, generate, legacy, validate
|
|
|
|
|
|
|
|
|
|
DEFAULT_SOURCE_CONFIG_FILENAME = '/etc/borgmatic/config'
|
|
DEFAULT_SOURCE_CONFIG_FILENAME = '/etc/borgmatic/config'
|
|
-# TODO: Fold excludes into the YAML config file.
|
|
|
|
DEFAULT_SOURCE_EXCLUDES_FILENAME = '/etc/borgmatic/excludes'
|
|
DEFAULT_SOURCE_EXCLUDES_FILENAME = '/etc/borgmatic/excludes'
|
|
DEFAULT_DESTINATION_CONFIG_FILENAME = '/etc/borgmatic/config.yaml'
|
|
DEFAULT_DESTINATION_CONFIG_FILENAME = '/etc/borgmatic/config.yaml'
|
|
|
|
|
|
@@ -21,16 +20,27 @@ def parse_arguments(*arguments):
|
|
Given command-line arguments with which this script was invoked, parse the arguments and return
|
|
Given command-line arguments with which this script was invoked, parse the arguments and return
|
|
them as an ArgumentParser instance.
|
|
them as an ArgumentParser instance.
|
|
'''
|
|
'''
|
|
- parser = ArgumentParser(description='Convert a legacy INI-style borgmatic configuration file to YAML. Does not preserve comments.')
|
|
|
|
|
|
+ parser = ArgumentParser(
|
|
|
|
+ description='''
|
|
|
|
+ Convert legacy INI-style borgmatic configuration and excludes files to a single YAML
|
|
|
|
+ configuration file. Note that this replaces any comments from the source files.
|
|
|
|
+ '''
|
|
|
|
+ )
|
|
parser.add_argument(
|
|
parser.add_argument(
|
|
- '-s', '--source',
|
|
|
|
- dest='source_filename',
|
|
|
|
|
|
+ '-s', '--source-config',
|
|
|
|
+ dest='source_config_filename',
|
|
default=DEFAULT_SOURCE_CONFIG_FILENAME,
|
|
default=DEFAULT_SOURCE_CONFIG_FILENAME,
|
|
help='Source INI-style configuration filename. Default: {}'.format(DEFAULT_SOURCE_CONFIG_FILENAME),
|
|
help='Source INI-style configuration filename. Default: {}'.format(DEFAULT_SOURCE_CONFIG_FILENAME),
|
|
)
|
|
)
|
|
parser.add_argument(
|
|
parser.add_argument(
|
|
- '-d', '--destination',
|
|
|
|
- dest='destination_filename',
|
|
|
|
|
|
+ '-e', '--source-excludes',
|
|
|
|
+ dest='source_excludes_filename',
|
|
|
|
+ default=DEFAULT_SOURCE_EXCLUDES_FILENAME if os.path.exists(DEFAULT_SOURCE_EXCLUDES_FILENAME) else None,
|
|
|
|
+ help='Excludes filename',
|
|
|
|
+ )
|
|
|
|
+ parser.add_argument(
|
|
|
|
+ '-d', '--destination-config',
|
|
|
|
+ dest='destination_config_filename',
|
|
default=DEFAULT_DESTINATION_CONFIG_FILENAME,
|
|
default=DEFAULT_DESTINATION_CONFIG_FILENAME,
|
|
help='Destination YAML configuration filename. Default: {}'.format(DEFAULT_DESTINATION_CONFIG_FILENAME),
|
|
help='Destination YAML configuration filename. Default: {}'.format(DEFAULT_DESTINATION_CONFIG_FILENAME),
|
|
)
|
|
)
|
|
@@ -41,12 +51,17 @@ def parse_arguments(*arguments):
|
|
def main(): # pragma: no cover
|
|
def main(): # pragma: no cover
|
|
try:
|
|
try:
|
|
args = parse_arguments(*sys.argv[1:])
|
|
args = parse_arguments(*sys.argv[1:])
|
|
- source_config = legacy.parse_configuration(args.source_filename, legacy.CONFIG_FORMAT)
|
|
|
|
schema = yaml.round_trip_load(open(validate.schema_filename()).read())
|
|
schema = yaml.round_trip_load(open(validate.schema_filename()).read())
|
|
|
|
+ source_config = legacy.parse_configuration(args.source_config_filename, legacy.CONFIG_FORMAT)
|
|
|
|
+ source_excludes = (
|
|
|
|
+ open(args.source_excludes_filename).read().splitlines()
|
|
|
|
+ if args.source_excludes_filename
|
|
|
|
+ else []
|
|
|
|
+ )
|
|
|
|
|
|
- destination_config = convert.convert_legacy_parsed_config(source_config, schema)
|
|
|
|
|
|
+ destination_config = convert.convert_legacy_parsed_config(source_config, source_excludes, schema)
|
|
|
|
|
|
- generate.write_configuration(args.destination_filename, destination_config)
|
|
|
|
|
|
+ generate.write_configuration(args.destination_config_filename, destination_config)
|
|
|
|
|
|
# TODO: As a backstop, check that the written config can actually be read and parsed, and
|
|
# TODO: As a backstop, check that the written config can actually be read and parsed, and
|
|
# that it matches the destination config data structure that was written.
|
|
# that it matches the destination config data structure that was written.
|