annet 0.12.8__tar.gz → 0.12.10__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of annet might be problematic. Click here for more details.
- {annet-0.12.8/annet.egg-info → annet-0.12.10}/PKG-INFO +1 -1
- {annet-0.12.8 → annet-0.12.10}/annet/api/__init__.py +10 -9
- {annet-0.12.8 → annet-0.12.10}/annet/gen.py +21 -8
- {annet-0.12.8 → annet-0.12.10}/annet/lib.py +1 -0
- {annet-0.12.8 → annet-0.12.10/annet.egg-info}/PKG-INFO +1 -1
- {annet-0.12.8 → annet-0.12.10}/AUTHORS +0 -0
- {annet-0.12.8 → annet-0.12.10}/LICENSE +0 -0
- {annet-0.12.8 → annet-0.12.10}/MANIFEST.in +0 -0
- {annet-0.12.8 → annet-0.12.10}/README.md +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/__init__.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/adapters/__init__.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/adapters/netbox/__init__.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/adapters/netbox/common/__init__.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/adapters/netbox/common/client.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/adapters/netbox/common/manufacturer.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/adapters/netbox/common/models.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/adapters/netbox/common/query.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/adapters/netbox/common/status_client.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/adapters/netbox/common/storage_opts.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/adapters/netbox/provider.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/adapters/netbox/v24/__init__.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/adapters/netbox/v24/api_models.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/adapters/netbox/v24/client.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/adapters/netbox/v24/storage.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/adapters/netbox/v37/__init__.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/adapters/netbox/v37/api_models.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/adapters/netbox/v37/client.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/adapters/netbox/v37/storage.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/annet.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/annlib/__init__.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/annlib/command.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/annlib/diff.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/annlib/errors.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/annlib/filter_acl.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/annlib/jsontools.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/annlib/lib.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/annlib/netdev/__init__.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/annlib/netdev/db.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/annlib/netdev/devdb/__init__.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/annlib/netdev/devdb/data/devdb.json +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/annlib/netdev/views/__init__.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/annlib/netdev/views/dump.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/annlib/netdev/views/hardware.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/annlib/output.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/annlib/patching.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/annlib/rbparser/__init__.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/annlib/rbparser/acl.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/annlib/rbparser/deploying.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/annlib/rbparser/ordering.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/annlib/rbparser/platform.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/annlib/rbparser/syntax.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/annlib/rulebook/__init__.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/annlib/rulebook/common.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/annlib/tabparser.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/annlib/types.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/argparse.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/cli.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/cli_args.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/configs/context.yml +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/configs/logging.yaml +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/connectors.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/deploy.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/diff.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/executor.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/filtering.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/generators/__init__.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/generators/base.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/generators/common/__init__.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/generators/common/initial.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/generators/entire.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/generators/exceptions.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/generators/jsonfragment.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/generators/partial.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/generators/perf.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/generators/ref.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/generators/result.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/hardware.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/implicit.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/output.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/parallel.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/patching.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/reference.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/__init__.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/arista/__init__.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/arista/iface.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/aruba/__init__.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/aruba/ap_env.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/aruba/misc.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/cisco/__init__.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/cisco/iface.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/cisco/misc.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/cisco/vlandb.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/common.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/deploying.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/huawei/__init__.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/huawei/aaa.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/huawei/bgp.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/huawei/iface.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/huawei/misc.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/huawei/vlandb.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/juniper/__init__.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/nexus/__init__.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/nexus/iface.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/patching.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/ribbon/__init__.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/arista.deploy +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/arista.order +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/arista.rul +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/aruba.deploy +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/aruba.order +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/aruba.rul +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/cisco.deploy +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/cisco.order +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/cisco.rul +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/huawei.deploy +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/huawei.order +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/huawei.rul +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/juniper.rul +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/nexus.deploy +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/nexus.order +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/nexus.rul +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/nokia.rul +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/pc.order +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/pc.rul +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/ribbon.deploy +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/ribbon.rul +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/routeros.order +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/routeros.rul +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/storage.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/tabparser.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/text_term_format.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/tracing.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet/types.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet.egg-info/SOURCES.txt +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet.egg-info/dependency_links.txt +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet.egg-info/entry_points.txt +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet.egg-info/requires.txt +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet.egg-info/top_level.txt +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet_generators/__init__.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet_generators/example/__init__.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/annet_generators/example/lldp.py +0 -0
- {annet-0.12.8 → annet-0.12.10}/requirements.txt +0 -0
- {annet-0.12.8 → annet-0.12.10}/setup.cfg +0 -0
- {annet-0.12.8 → annet-0.12.10}/setup.py +0 -0
|
@@ -347,21 +347,22 @@ def diff(
|
|
|
347
347
|
acl_rules = res.get_acl_rules(args.acl_safe)
|
|
348
348
|
new_files = res.get_new_files(args.acl_safe)
|
|
349
349
|
new_json_fragment_files = res.get_new_file_fragments()
|
|
350
|
+
|
|
351
|
+
pc_diff_files = []
|
|
350
352
|
if res.old_files or new_files:
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
diff_files=list(_json_fragment_diff(device.hostname, res.old_json_fragment_files, new_json_fragment_files)),
|
|
359
|
-
)
|
|
353
|
+
pc_diff_files.extend(_pc_diff(device.hostname, res.old_files, new_files))
|
|
354
|
+
if res.old_json_fragment_files or new_json_fragment_files:
|
|
355
|
+
pc_diff_files.extend(_json_fragment_diff(device.hostname, res.old_json_fragment_files, new_json_fragment_files))
|
|
356
|
+
|
|
357
|
+
if pc_diff_files:
|
|
358
|
+
pc_diff_files.sort(key=lambda f: f.label)
|
|
359
|
+
ret[device] = PCDiff(hostname=device.hostname, diff_files=pc_diff_files)
|
|
360
360
|
elif old is not None:
|
|
361
361
|
rb = rulebook.get_rulebook(device.hw)
|
|
362
362
|
diff_tree = patching.make_diff(old, new, rb, [acl_rules, res.filter_acl_rules])
|
|
363
363
|
diff_tree = patching.strip_unchanged(diff_tree)
|
|
364
364
|
ret[device] = diff_tree
|
|
365
|
+
|
|
365
366
|
return ret
|
|
366
367
|
|
|
367
368
|
|
|
@@ -79,6 +79,19 @@ class DeviceGenerators:
|
|
|
79
79
|
for gen in gen_list:
|
|
80
80
|
yield gen
|
|
81
81
|
|
|
82
|
+
def for_devices(self, devices: Iterable[Device]) -> "DeviceGenerators":
|
|
83
|
+
result = DeviceGenerators()
|
|
84
|
+
for device in devices:
|
|
85
|
+
if device in self.partial:
|
|
86
|
+
result.partial[device] = self.partial[device]
|
|
87
|
+
if device in self.ref:
|
|
88
|
+
result.ref[device] = self.ref[device]
|
|
89
|
+
if device in self.entire:
|
|
90
|
+
result.entire[device] = self.entire[device]
|
|
91
|
+
if device in self.json_fragment:
|
|
92
|
+
result.json_fragment[device] = self.json_fragment[device]
|
|
93
|
+
return result
|
|
94
|
+
|
|
82
95
|
def file_gens(self, device: Any) -> Iterator[Union[Entire, JSONFragment]]:
|
|
83
96
|
"""Iterate over generators that generate files or file parts."""
|
|
84
97
|
yield from itertools.chain(
|
|
@@ -514,7 +527,7 @@ def worker(device_id, args: ShowGenOptions, stdin, loader: "Loader", filterer: F
|
|
|
514
527
|
|
|
515
528
|
|
|
516
529
|
def old_new_worker(device_id, args: DeployOptions, config, stdin, loader: "Loader", filterer: Filterer):
|
|
517
|
-
|
|
530
|
+
for res in old_new(
|
|
518
531
|
args,
|
|
519
532
|
config=config,
|
|
520
533
|
loader=loader,
|
|
@@ -523,7 +536,10 @@ def old_new_worker(device_id, args: DeployOptions, config, stdin, loader: "Loade
|
|
|
523
536
|
device_ids=[device_id],
|
|
524
537
|
no_new=args.clear,
|
|
525
538
|
do_files_download=True,
|
|
526
|
-
)
|
|
539
|
+
):
|
|
540
|
+
if res.err is not None and not args.tolerate_fails:
|
|
541
|
+
raise res.err
|
|
542
|
+
yield res
|
|
527
543
|
|
|
528
544
|
|
|
529
545
|
class OldNewParallel(Parallel):
|
|
@@ -538,12 +554,13 @@ class OldNewParallel(Parallel):
|
|
|
538
554
|
filterer=filterer,
|
|
539
555
|
)
|
|
540
556
|
self.tune_args(args)
|
|
557
|
+
self.tolerate_fails = args.tolerate_fails
|
|
541
558
|
|
|
542
559
|
def generated_configs(self, devices: List[Device]) -> Generator[OldNewResult, None, None]:
|
|
543
560
|
devices_by_id = {device.id: device for device in devices}
|
|
544
561
|
device_ids = list(devices_by_id)
|
|
545
562
|
|
|
546
|
-
for task_result in self.irun(device_ids):
|
|
563
|
+
for task_result in self.irun(device_ids, self.tolerate_fails):
|
|
547
564
|
if task_result.exc is not None:
|
|
548
565
|
device = devices_by_id.pop(task_result.device_id)
|
|
549
566
|
yield OldNewResult(device=device, err=task_result.exc)
|
|
@@ -868,8 +885,4 @@ class Loader:
|
|
|
868
885
|
return []
|
|
869
886
|
|
|
870
887
|
def resolve_gens(self, devices: Iterable[Device]) -> DeviceGenerators:
|
|
871
|
-
|
|
872
|
-
return self._gens
|
|
873
|
-
|
|
874
|
-
with tracing_connector.get().start_as_current_span("Resolve gens"):
|
|
875
|
-
return _old_resolve_gens(self._args, self._storage, devices)
|
|
888
|
+
return self._gens.for_devices(devices)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|