diff --git a/octodns/cmds/dump.py b/octodns/cmds/dump.py index 9f5e0aa..9927468 100755 --- a/octodns/cmds/dump.py +++ b/octodns/cmds/dump.py @@ -21,6 +21,9 @@ def main(): parser.add_argument('--lenient', action='store_true', default=False, help='Ignore record validations and do a best effort ' 'dump') + parser.add_argument('--split', action='store_true', default=False, + help='Split the dumped zone into a YAML file per ' + 'record') parser.add_argument('zone', help='Zone to dump') parser.add_argument('source', nargs='+', help='Source(s) to pull data from') @@ -28,7 +31,8 @@ def main(): args = parser.parse_args() manager = Manager(args.config_file) - manager.dump(args.zone, args.output_dir, args.lenient, *args.source) + manager.dump(args.zone, args.output_dir, args.lenient, args.split, + *args.source) if __name__ == '__main__': diff --git a/octodns/manager.py b/octodns/manager.py index eade87a..4952315 100644 --- a/octodns/manager.py +++ b/octodns/manager.py @@ -12,7 +12,7 @@ import logging from .provider.base import BaseProvider from .provider.plan import Plan -from .provider.yaml import YamlProvider +from .provider.yaml import SplitYamlProvider, YamlProvider from .record import Record from .yaml import safe_load from .zone import Zone @@ -357,7 +357,7 @@ class Manager(object): return zb.changes(za, _AggregateTarget(a + b)) - def dump(self, zone, output_dir, lenient, source, *sources): + def dump(self, zone, output_dir, lenient, split, source, *sources): ''' Dump zone data from the specified source ''' @@ -372,7 +372,10 @@ class Manager(object): except KeyError as e: raise Exception('Unknown source: {}'.format(e.args[0])) - target = YamlProvider('dump', output_dir) + clz = YamlProvider + if split: + clz = SplitYamlProvider + target = clz('dump', output_dir) zone = Zone(zone, self.configured_sub_zones(zone)) for source in sources: