annet 2.5.1__py3-none-any.whl → 2.5.3__py3-none-any.whl

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.

@@ -152,5 +152,7 @@ def svi_name(hw: HardwareView, num: int) -> str:
152
152
  return f"irb.{num}"
153
153
  elif hw.Huawei:
154
154
  return f"Vlanif{num}"
155
+ elif hw.Arista or hw.Cisco:
156
+ return f"Vlan{num}"
155
157
  else:
156
158
  return f"vlan{num}"
annet/api/__init__.py CHANGED
@@ -582,43 +582,44 @@ class Deployer:
582
582
  return ans
583
583
 
584
584
  def check_diff(self, result: annet.deploy.DeployResult, loader: ann_gen.Loader):
585
- success_device_ids = []
586
- for host, hres in result.results.items():
587
- device = self.fqdn_to_device[host]
588
- if (
589
- not isinstance(hres, Exception) and
590
- host not in self.empty_diff_hostnames and
591
- device.is_pc()
592
- ):
593
- success_device_ids.append(device.id)
594
585
  diff_args = self.args.copy_from(
595
586
  self.args,
596
587
  config="running",
597
588
  )
589
+ if not diff_args.query:
590
+ return
598
591
 
599
- if diff_args.query:
600
- ann_gen.live_configs = None
601
-
602
- diffs, failed = diff(diff_args, loader, success_device_ids)
603
- for device_id, exc in failed.items():
604
- self.failed_configs[loader.get_device(device_id).fqdn] = exc
605
-
606
- non_pc_diffs = {
607
- loader.get_device(device_id): diff
608
- for device_id, diff in diffs.items()
609
- if not isinstance(diff, PCDiff)
610
- }
611
- devices_to_diff = ann_diff.collapse_diffs(non_pc_diffs)
612
- devices_to_diff.update({
613
- (loader.get_device(device_id),): diff
614
- for device_id, diff in diffs.items()
615
- if isinstance(diff, PCDiff)}
616
- )
617
- else:
618
- devices_to_diff = {}
592
+ # clear cache
593
+ ann_gen.live_configs = None
619
594
 
620
- for devices, diff_obj in devices_to_diff.items():
621
- if diff_obj:
595
+ # collect new diffs for devices on which we had successfully uploaded something
596
+ success_device_ids = []
597
+ for host, hres in result.results.items():
598
+ if (
599
+ not isinstance(hres, Exception) and
600
+ host not in self.empty_diff_hostnames
601
+ ):
602
+ device = self.fqdn_to_device[host]
603
+ success_device_ids.append(device.id)
604
+ diffs, failed = diff(diff_args, loader, success_device_ids)
605
+ for device_id, exc in failed.items():
606
+ self.failed_configs[loader.get_device(device_id).fqdn] = exc
607
+
608
+ # "collapse" non-PC diffs
609
+ diffs_by_device_id = ann_diff.collapse_diffs({
610
+ loader.get_device(device_id): diff
611
+ for device_id, diff in diffs.items()
612
+ if diff and not isinstance(diff, PCDiff)
613
+ })
614
+ # add PC diffs as is
615
+ diffs_by_device_id.update({
616
+ (loader.get_device(device_id),): diff
617
+ for device_id, diff in diffs.items()
618
+ if diff and isinstance(diff, PCDiff)
619
+ })
620
+ if diffs_by_device_id:
621
+ print("The diff is still present:")
622
+ for devices, diff_obj in diffs_by_device_id.items():
622
623
  for dev in devices:
623
624
  self.failed_configs[dev.fqdn] = Warning("Deploy OK, but diff still exists")
624
625
  if isinstance(diff_obj, PCDiff):
@@ -12,7 +12,6 @@ from typing import (
12
12
 
13
13
  from annet.storage import Device, Storage
14
14
  from .base import TreeGenerator, _filter_str
15
- from .exceptions import NotSupportedDevice
16
15
 
17
16
 
18
17
  class JSONFragment(TreeGenerator):
@@ -115,13 +114,17 @@ class JSONFragment(TreeGenerator):
115
114
  return self.process_scalar_value(value)
116
115
 
117
116
  def _set_dict(self, cfg, pointer, value):
117
+ processed_value = self.process_value(value)
118
118
  # pointer has at least one key
119
119
  if len(pointer) == 1:
120
120
  if pointer[0] in cfg:
121
- cfg[pointer[0]] = [cfg[pointer[0]], self.process_value(value)]
122
- else:
123
- cfg[pointer[0]] = self.process_value(value)
121
+ # conflict, generator tries to insert key that already exists
122
+ raise ValueError(
123
+ f"Key {pointer[0]} already exists in config. "
124
+ f"Existing value: {cfg[pointer[0]]}, new value: {processed_value}"
125
+ )
126
+ cfg[pointer[0]] = processed_value
124
127
  else:
125
128
  if pointer[0] not in cfg:
126
129
  cfg[pointer[0]] = {}
127
- self._set_dict(cfg[pointer[0]], pointer[1:], self.process_value(value))
130
+ self._set_dict(cfg[pointer[0]], pointer[1:], processed_value)
@@ -13,6 +13,16 @@ def mtu(rule, key, diff, **kwargs):
13
13
  yield from common.default(rule, key, diff, **kwargs)
14
14
 
15
15
 
16
+ def description(rule, key, diff, **kwargs):
17
+ """
18
+ Удаляем description без указания значения
19
+ """
20
+ if diff[Op.REMOVED]:
21
+ yield (False, "no description", None)
22
+ elif diff[Op.ADDED]:
23
+ yield from common.default(rule, key, diff, **kwargs)
24
+
25
+
16
26
  def sflow(rule, key, diff, **kwargs):
17
27
  """
18
28
  Команда sflow sampling-rate * direction ingress max-header-size *
@@ -6,3 +6,14 @@
6
6
  # Фичи должны быть включены прежде всего
7
7
  feature
8
8
  # Далее нужно будет указать команды и их порядок
9
+ interface *
10
+ description
11
+ ip vrf forwarding
12
+ ipv6 address
13
+ mtu
14
+ lldp-agent
15
+ set lldp
16
+ lldp tlv
17
+ dcbx
18
+ exit
19
+ sflow
@@ -13,7 +13,10 @@
13
13
  # Physical
14
14
  sflow *
15
15
 
16
- interface */(ce|xe)[0-9\/]+$/ %logic=common.permanent %diff_logic=cisco.iface.diff
16
+ interface */(ce|xe|eth)[0-9\/]+$/ %logic=common.permanent %diff_logic=cisco.iface.diff
17
+ description * %logic=b4com.iface.description
18
+ ip vrf forwarding *
19
+ ip address *
17
20
  ipv6 address *
18
21
  mtu * %logic=b4com.iface.mtu
19
22
  sflow * %logic=b4com.iface.sflow
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: annet
3
- Version: 2.5.1
3
+ Version: 2.5.3
4
4
  Summary: annet
5
5
  Home-page: https://github.com/annetutil/annet
6
6
  License: MIT
@@ -69,7 +69,7 @@ annet/annlib/netdev/devdb/__init__.py,sha256=aKYjjLbJebdKBjnGDpVLQdSqrV2JL24spGm
69
69
  annet/annlib/netdev/devdb/data/devdb.json,sha256=4RTRg9PbRiUfi-kVIalim7Rtdkdu_48MGGtrZ6XmXmg,6677
70
70
  annet/annlib/netdev/views/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
71
71
  annet/annlib/netdev/views/dump.py,sha256=rIlyvnA3uM8bB_7oq1nS2KDxTp6dQh2hz-FbNhYIpOU,4630
72
- annet/annlib/netdev/views/hardware.py,sha256=3JCZLH7deIHhCguwPJTUX-WDvWjG_xt6BdSEZSO6zkQ,4226
72
+ annet/annlib/netdev/views/hardware.py,sha256=R22iXYjGkfLaBbDMEMpcEfqgwLsB1u5VJwF8tyPtJb0,4286
73
73
  annet/annlib/rbparser/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
74
  annet/annlib/rbparser/acl.py,sha256=RR8yPt6t96_IiyuKVbeZ-3x32cyhBAT2wC1y99oWBO8,3931
75
75
  annet/annlib/rbparser/deploying.py,sha256=ACT8QNhDAhJx3ZKuGh2nYBOrpdka2qEKuLDxvQAGKLk,1649
@@ -78,14 +78,14 @@ annet/annlib/rbparser/platform.py,sha256=65-r9mboRA3gaz9DRkSwPCdCRQneItqxppdMB6z
78
78
  annet/annlib/rbparser/syntax.py,sha256=iZ7Y-4QQBw4L3UtjEh54qisiRDhobl7HZxFNdP8mi54,3577
79
79
  annet/annlib/rulebook/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
80
  annet/annlib/rulebook/common.py,sha256=hqwmmNofm5q2f-hV2usMY-IPMeiANLth28tZcRBYJTw,16640
81
- annet/api/__init__.py,sha256=BnFu1BbGZVgiT4GKa5x8reIHV40hl8UGR4vtwD8VREI,32992
81
+ annet/api/__init__.py,sha256=DU88rY4sQLUoBE9g0WxgqF6GdL7CIUAak01Ejuf63qc,33098
82
82
  annet/configs/context.yml,sha256=RVLrKLIHpCty7AGwOnmqf7Uu0iZQCn-AjYhophDJer8,259
83
83
  annet/configs/logging.yaml,sha256=EUagfir99QqA73Scc3k7sfQccbU3E1SvEQdyhLFtCl4,997
84
84
  annet/generators/__init__.py,sha256=rVHHDTPKHPZsml1eNEAj3o-8RweFTN8J7LX3tKMXdIY,16402
85
85
  annet/generators/base.py,sha256=rgQLcQBPZm4ecbKmRhVOpBR-GFJAiVfdb_y5f2-LUR8,3670
86
86
  annet/generators/entire.py,sha256=Oe7d0VuIn2sLcOKuRVQW9uR8Vuirg0edekFMSZCMnI4,2786
87
87
  annet/generators/exceptions.py,sha256=GPXTBgn2xZ3Ev_bdOPlfCLGRC1kQHe_dEq88S-uyi5s,151
88
- annet/generators/jsonfragment.py,sha256=s7zOjX6JR43sIA9wse13GEPU06aeOa75uiA8WBOVDa8,4207
88
+ annet/generators/jsonfragment.py,sha256=Cl43t9_OtNWRxesk3B69h60KvD37tiK9W7sLLmppAT4,4379
89
89
  annet/generators/partial.py,sha256=XI01KDA--XwjSEU33SOQCCJZRXFq5boRz1uJA8lVA1g,3502
90
90
  annet/generators/perf.py,sha256=K72ivUuXbNXrsHrLeKWhGmczGYWsB7kUDdDzqOX6j3c,2370
91
91
  annet/generators/ref.py,sha256=QVdeL8po1D0kBsVLOpCjFR81D8yNTk-kaQj5WUM4hng,438
@@ -130,7 +130,7 @@ annet/rulebook/aruba/ap_env.py,sha256=5fUVLhXH4-0DAtv8t0yoqJUibaRMuzF8Q7mGFzNsEN
130
130
  annet/rulebook/aruba/misc.py,sha256=O0p_wsR07gtB8rm1eJvJ7VYnGm5T8Uau_SVKR9FVInI,234
131
131
  annet/rulebook/b4com/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
132
132
  annet/rulebook/b4com/file.py,sha256=zK7RwBk1YaVoDSFSg1u7Pt8u0Fk3nhhu27aJRngemwc,137
133
- annet/rulebook/b4com/iface.py,sha256=0MXq01fhgd0ZxrS99TMxEP9qqIW2ofadsIBthCZVPTc,1392
133
+ annet/rulebook/b4com/iface.py,sha256=FGOYeeL3ZcogT8bDrmMYPG0KiZ5Q7iz5R19e1zrE0P8,1683
134
134
  annet/rulebook/cisco/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
135
135
  annet/rulebook/cisco/iface.py,sha256=WISkzjp_G7WKPpg098FCIm4b7ipOxtRLOQbu-7gMUL0,1792
136
136
  annet/rulebook/cisco/misc.py,sha256=zgKdWGmjRYmvq58dh7Lbn7ofwSYZoISgXsUh5lkGKF8,2318
@@ -153,8 +153,8 @@ annet/rulebook/texts/aruba.deploy,sha256=hI432Bq-of_LMXuUflCu7eNSEFpx6qmj0KItEw6
153
153
  annet/rulebook/texts/aruba.order,sha256=ZMakkn0EJ9zomgY6VssoptJImrHrUmYnCqivzLBFTRo,1158
154
154
  annet/rulebook/texts/aruba.rul,sha256=zvGVpoYyJvMoL0fb1NQ8we_GCLZXno8nwWpZIOScLQQ,2584
155
155
  annet/rulebook/texts/b4com.deploy,sha256=SVX8-yLHM90tJC4M-ekpGuGM1aQZW3euSGyg67l--R0,781
156
- annet/rulebook/texts/b4com.order,sha256=G3aToAIHHzKzDCM3q7_lyr9wJvuVOXVbVvF3wm5PiTE,707
157
- annet/rulebook/texts/b4com.rul,sha256=OiQroBySk33he1YNN3jOn5sGL_WDBJEejDI6F7jIWo0,1224
156
+ annet/rulebook/texts/b4com.order,sha256=nzPSPpq8f6WnVazOekJUEgt7ueEtf3Ietdl1m1X2qF8,867
157
+ annet/rulebook/texts/b4com.rul,sha256=JhnaGx6Hc7sEMUGgFyru2PfmTNgFhcF-lgckopMMSP8,1334
158
158
  annet/rulebook/texts/cisco.deploy,sha256=Hu0NkcGv3f1CWUrnbzI3eQOPXJxtH4NNOPRV68IrW4U,1226
159
159
  annet/rulebook/texts/cisco.order,sha256=OvNHMNqkCc-DN2dEjLCTKv_7ZhiaHt4q2X4Y4Z8dvR4,1901
160
160
  annet/rulebook/texts/cisco.rul,sha256=jgL5_xnSwd_H4E8cx4gcneSvJC5W1zz6_BWSb64iuxI,3017
@@ -177,8 +177,8 @@ annet/rulebook/texts/ribbon.deploy,sha256=hCq2XeAcwaYanyQ8lTdnez6Pgq-gRqpNuR8dAl
177
177
  annet/rulebook/texts/ribbon.rul,sha256=609LyLTDCtXPVQNAzqS-VEyCpW3byHP8TCMJLFMn5cc,2108
178
178
  annet/rulebook/texts/routeros.order,sha256=M71uy_hf0KAjLNS3zZY3uih4m2xLUcu26FEoVVjC6k0,905
179
179
  annet/rulebook/texts/routeros.rul,sha256=ipfxjj0mjFef6IsUlupqx4BY_Je_OUb8u_U1019O1DE,1203
180
- annet-2.5.1.dist-info/licenses/AUTHORS,sha256=rh3w5P6gEgqmuC-bw-HB68vBCr-yIBFhVL0PG4hguLs,878
181
- annet-2.5.1.dist-info/licenses/LICENSE,sha256=yPxl7dno02Pw7gAcFPIFONzx_gapwDoPXsIsh6Y7lC0,1079
180
+ annet-2.5.3.dist-info/licenses/AUTHORS,sha256=rh3w5P6gEgqmuC-bw-HB68vBCr-yIBFhVL0PG4hguLs,878
181
+ annet-2.5.3.dist-info/licenses/LICENSE,sha256=yPxl7dno02Pw7gAcFPIFONzx_gapwDoPXsIsh6Y7lC0,1079
182
182
  annet_generators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
183
183
  annet_generators/example/__init__.py,sha256=1z030I00c9KeqW0ntkT1IRLYKD5LZAHYjiNHrOLen1Q,221
184
184
  annet_generators/example/lldp.py,sha256=24bGvShxbio-JxUdaehyPRu31LhH9YwSwFDrWVRn6yo,2100
@@ -190,8 +190,8 @@ annet_generators/rpl_example/generator.py,sha256=zndIGfV4ZlTxPgAGYs7bMQvTc_tYScO
190
190
  annet_generators/rpl_example/items.py,sha256=d99HSXDHFjZq511EvGhIqRTWK3F4ZsCWfdUqFYQcyhE,772
191
191
  annet_generators/rpl_example/mesh.py,sha256=z_WgfDZZ4xnyh3cSf75igyH09hGvtexEVwy1gCD_DzA,288
192
192
  annet_generators/rpl_example/route_policy.py,sha256=z6nPb0VDeQtKD1NIg9sFvmUxBD5tVs2frfNIuKdM-5c,2318
193
- annet-2.5.1.dist-info/METADATA,sha256=yV5XEXm3TVL8ONqDFzOU1Gfw1aKGTDkKLAaZhtWg5Wc,815
194
- annet-2.5.1.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
195
- annet-2.5.1.dist-info/entry_points.txt,sha256=5lIaDGlGi3l6QQ2ry2jZaqViP5Lvt8AmsegdD0Uznck,192
196
- annet-2.5.1.dist-info/top_level.txt,sha256=QsoTZBsUtwp_FEcmRwuN8QITBmLOZFqjssRfKilGbP8,23
197
- annet-2.5.1.dist-info/RECORD,,
193
+ annet-2.5.3.dist-info/METADATA,sha256=BdGFeD779806YbIpVm9lyPy5egBoglx5bQjBlZnkH-o,815
194
+ annet-2.5.3.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
195
+ annet-2.5.3.dist-info/entry_points.txt,sha256=5lIaDGlGi3l6QQ2ry2jZaqViP5Lvt8AmsegdD0Uznck,192
196
+ annet-2.5.3.dist-info/top_level.txt,sha256=QsoTZBsUtwp_FEcmRwuN8QITBmLOZFqjssRfKilGbP8,23
197
+ annet-2.5.3.dist-info/RECORD,,
File without changes