annet 0.12.6__tar.gz → 0.12.8__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.6/annet.egg-info → annet-0.12.8}/PKG-INFO +1 -1
- {annet-0.12.6 → annet-0.12.8}/annet/executor.py +18 -13
- {annet-0.12.6 → annet-0.12.8}/annet/gen.py +2 -3
- {annet-0.12.6 → annet-0.12.8}/annet/generators/__init__.py +1 -1
- {annet-0.12.6 → annet-0.12.8}/annet/generators/common/initial.py +2 -2
- {annet-0.12.6 → annet-0.12.8/annet.egg-info}/PKG-INFO +1 -1
- {annet-0.12.6 → annet-0.12.8}/AUTHORS +0 -0
- {annet-0.12.6 → annet-0.12.8}/LICENSE +0 -0
- {annet-0.12.6 → annet-0.12.8}/MANIFEST.in +0 -0
- {annet-0.12.6 → annet-0.12.8}/README.md +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/__init__.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/adapters/__init__.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/adapters/netbox/__init__.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/adapters/netbox/common/__init__.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/adapters/netbox/common/client.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/adapters/netbox/common/manufacturer.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/adapters/netbox/common/models.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/adapters/netbox/common/query.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/adapters/netbox/common/status_client.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/adapters/netbox/common/storage_opts.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/adapters/netbox/provider.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/adapters/netbox/v24/__init__.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/adapters/netbox/v24/api_models.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/adapters/netbox/v24/client.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/adapters/netbox/v24/storage.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/adapters/netbox/v37/__init__.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/adapters/netbox/v37/api_models.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/adapters/netbox/v37/client.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/adapters/netbox/v37/storage.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/annet.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/annlib/__init__.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/annlib/command.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/annlib/diff.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/annlib/errors.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/annlib/filter_acl.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/annlib/jsontools.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/annlib/lib.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/annlib/netdev/__init__.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/annlib/netdev/db.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/annlib/netdev/devdb/__init__.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/annlib/netdev/devdb/data/devdb.json +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/annlib/netdev/views/__init__.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/annlib/netdev/views/dump.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/annlib/netdev/views/hardware.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/annlib/output.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/annlib/patching.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/annlib/rbparser/__init__.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/annlib/rbparser/acl.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/annlib/rbparser/deploying.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/annlib/rbparser/ordering.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/annlib/rbparser/platform.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/annlib/rbparser/syntax.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/annlib/rulebook/__init__.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/annlib/rulebook/common.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/annlib/tabparser.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/annlib/types.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/api/__init__.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/argparse.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/cli.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/cli_args.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/configs/context.yml +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/configs/logging.yaml +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/connectors.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/deploy.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/diff.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/filtering.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/generators/base.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/generators/common/__init__.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/generators/entire.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/generators/exceptions.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/generators/jsonfragment.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/generators/partial.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/generators/perf.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/generators/ref.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/generators/result.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/hardware.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/implicit.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/lib.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/output.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/parallel.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/patching.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/reference.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/__init__.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/arista/__init__.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/arista/iface.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/aruba/__init__.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/aruba/ap_env.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/aruba/misc.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/cisco/__init__.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/cisco/iface.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/cisco/misc.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/cisco/vlandb.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/common.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/deploying.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/huawei/__init__.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/huawei/aaa.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/huawei/bgp.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/huawei/iface.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/huawei/misc.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/huawei/vlandb.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/juniper/__init__.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/nexus/__init__.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/nexus/iface.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/patching.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/ribbon/__init__.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/texts/arista.deploy +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/texts/arista.order +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/texts/arista.rul +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/texts/aruba.deploy +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/texts/aruba.order +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/texts/aruba.rul +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/texts/cisco.deploy +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/texts/cisco.order +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/texts/cisco.rul +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/texts/huawei.deploy +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/texts/huawei.order +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/texts/huawei.rul +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/texts/juniper.rul +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/texts/nexus.deploy +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/texts/nexus.order +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/texts/nexus.rul +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/texts/nokia.rul +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/texts/pc.order +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/texts/pc.rul +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/texts/ribbon.deploy +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/texts/ribbon.rul +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/texts/routeros.order +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/rulebook/texts/routeros.rul +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/storage.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/tabparser.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/text_term_format.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/tracing.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet/types.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet.egg-info/SOURCES.txt +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet.egg-info/dependency_links.txt +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet.egg-info/entry_points.txt +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet.egg-info/requires.txt +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet.egg-info/top_level.txt +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet_generators/__init__.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet_generators/example/__init__.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/annet_generators/example/lldp.py +0 -0
- {annet-0.12.6 → annet-0.12.8}/requirements.txt +0 -0
- {annet-0.12.6 → annet-0.12.8}/setup.cfg +0 -0
- {annet-0.12.6 → annet-0.12.8}/setup.py +0 -0
|
@@ -359,7 +359,7 @@ async def bulk(
|
|
|
359
359
|
tasks = []
|
|
360
360
|
res = {}
|
|
361
361
|
pending = set()
|
|
362
|
-
|
|
362
|
+
tasks_to_device = {}
|
|
363
363
|
time_of_start = {}
|
|
364
364
|
deploy_durations = {}
|
|
365
365
|
now = None
|
|
@@ -391,10 +391,15 @@ async def bulk(
|
|
|
391
391
|
return task.result()
|
|
392
392
|
|
|
393
393
|
for device in devices:
|
|
394
|
-
|
|
394
|
+
try:
|
|
395
|
+
conn = await executor.amake_connection(device=device)
|
|
396
|
+
except Exception as exc:
|
|
397
|
+
_logger.error("failed to connect to %s %r", device.hostname, exc)
|
|
398
|
+
res[device] = exc
|
|
399
|
+
continue
|
|
395
400
|
start_hook(device)
|
|
396
401
|
task = asyncio.create_task(coro_gen(conn=conn, device=device, **kwargs))
|
|
397
|
-
|
|
402
|
+
tasks_to_device[task] = device
|
|
398
403
|
tasks.append(task)
|
|
399
404
|
try:
|
|
400
405
|
ndone = 0
|
|
@@ -415,21 +420,21 @@ async def bulk(
|
|
|
415
420
|
|
|
416
421
|
now = time.monotonic()
|
|
417
422
|
for task in done:
|
|
418
|
-
|
|
419
|
-
res[
|
|
423
|
+
device = tasks_to_device[task]
|
|
424
|
+
res[device] = end_hook(device, task)
|
|
420
425
|
ndone += 1
|
|
421
426
|
except CancelAllTasks:
|
|
422
427
|
exc = asyncio.CancelledError()
|
|
423
428
|
|
|
424
429
|
now = time.monotonic()
|
|
425
|
-
for
|
|
426
|
-
res[
|
|
430
|
+
for device, task in _get_remaining(tasks, pending, tasks_to_device):
|
|
431
|
+
res[device] = exc
|
|
427
432
|
|
|
428
|
-
if hostname in time_of_start:
|
|
429
|
-
duration = now - time_of_start[hostname]
|
|
433
|
+
if device.hostname in time_of_start:
|
|
434
|
+
duration = now - time_of_start[device.hostname]
|
|
430
435
|
else:
|
|
431
436
|
duration = None
|
|
432
|
-
deploy_durations[hostname] = duration
|
|
437
|
+
deploy_durations[device.hostname] = duration
|
|
433
438
|
|
|
434
439
|
if not asyncio.iscoroutine(task):
|
|
435
440
|
_logger.info("task %s", task)
|
|
@@ -471,11 +476,11 @@ class CancelAllTasks(Exception):
|
|
|
471
476
|
pass
|
|
472
477
|
|
|
473
478
|
|
|
474
|
-
def _get_remaining(tasks, pending,
|
|
479
|
+
def _get_remaining(tasks, pending, tasks_to_device):
|
|
475
480
|
for task in pending:
|
|
476
|
-
yield (
|
|
481
|
+
yield (tasks_to_device[task], task)
|
|
477
482
|
for task in tasks:
|
|
478
|
-
yield (
|
|
483
|
+
yield (tasks_to_device[task], task)
|
|
479
484
|
|
|
480
485
|
|
|
481
486
|
_platform = platform.system()
|
|
@@ -709,10 +709,9 @@ def _old_new_get_config_cli(ctx: OldNewDeviceContext, device: Device) -> str:
|
|
|
709
709
|
elif ctx.config == "running":
|
|
710
710
|
text = ctx.running.get(device)
|
|
711
711
|
if text is None:
|
|
712
|
-
exc = (ctx.failed_running.get(device
|
|
713
|
-
ctx.failed_running.get(device.hostname) or
|
|
712
|
+
exc = (ctx.failed_running.get(device) or
|
|
714
713
|
Exception("I can't get device config and I don't know why"))
|
|
715
|
-
get_logger(host=device.hostname).error("config error %
|
|
714
|
+
get_logger(host=device.hostname).error("config error %r", exc)
|
|
716
715
|
raise exc
|
|
717
716
|
elif ctx.config == "-":
|
|
718
717
|
text = ctx.stdin["config"]
|
|
@@ -120,7 +120,7 @@ def run_partial_initial(device):
|
|
|
120
120
|
tracing_connector.get().set_device_attributes(tracing_connector.get().get_current_span(), device)
|
|
121
121
|
|
|
122
122
|
run_args = GeneratorPartialRunArgs(device)
|
|
123
|
-
return run_partial_generators([InitialConfig(storage=device.storage)], [], run_args)
|
|
123
|
+
return run_partial_generators([InitialConfig(storage=device.storage, do_run=True)], [], run_args)
|
|
124
124
|
|
|
125
125
|
|
|
126
126
|
@tracing.function
|
|
@@ -12,9 +12,9 @@ class InitialConfig(PartialGenerator):
|
|
|
12
12
|
Acl для данного генератора не нужен, он будет генерировать
|
|
13
13
|
конфиг целиком.
|
|
14
14
|
"""
|
|
15
|
-
def __init__(self, storage=
|
|
16
|
-
self._do_run = not storage
|
|
15
|
+
def __init__(self, storage, do_run: bool = False):
|
|
17
16
|
super().__init__(storage=storage)
|
|
17
|
+
self._do_run = do_run
|
|
18
18
|
|
|
19
19
|
def run_huawei(self, device):
|
|
20
20
|
if not self._do_run:
|
|
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
|