annet 0.16.18__py3-none-any.whl → 0.16.19__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.
- annet/adapters/netbox/common/manufacturer.py +4 -1
- annet/annlib/netdev/devdb/data/devdb.json +1 -0
- annet/annlib/rbparser/platform.py +6 -0
- annet/annlib/rulebook/common.py +4 -0
- annet/annlib/tabparser.py +57 -2
- annet/rulebook/__init__.py +3 -2
- annet/rulebook/cisco/misc.py +0 -90
- annet/rulebook/texts/cisco.rul +1 -1
- annet/tabparser.py +2 -0
- {annet-0.16.18.dist-info → annet-0.16.19.dist-info}/METADATA +1 -1
- {annet-0.16.18.dist-info → annet-0.16.19.dist-info}/RECORD +16 -16
- {annet-0.16.18.dist-info → annet-0.16.19.dist-info}/AUTHORS +0 -0
- {annet-0.16.18.dist-info → annet-0.16.19.dist-info}/LICENSE +0 -0
- {annet-0.16.18.dist-info → annet-0.16.19.dist-info}/WHEEL +0 -0
- {annet-0.16.18.dist-info → annet-0.16.19.dist-info}/entry_points.txt +0 -0
- {annet-0.16.18.dist-info → annet-0.16.19.dist-info}/top_level.txt +0 -0
|
@@ -17,7 +17,8 @@ _VENDORS = {
|
|
|
17
17
|
"aruba": "Aruba",
|
|
18
18
|
"routeros": "RouterOS",
|
|
19
19
|
"ribbon": "Ribbon",
|
|
20
|
-
"b4com": "B4com"
|
|
20
|
+
"b4com": "B4com",
|
|
21
|
+
"h3c": "H3C",
|
|
21
22
|
}
|
|
22
23
|
|
|
23
24
|
|
|
@@ -37,6 +38,8 @@ def get_breed(manufacturer: str, model: str):
|
|
|
37
38
|
return "vrp85"
|
|
38
39
|
elif manufacturer == "Huawei":
|
|
39
40
|
return "vrp55"
|
|
41
|
+
elif manufacturer == "H3C":
|
|
42
|
+
return "h3c"
|
|
40
43
|
elif manufacturer in ("Mellanox", "NVIDIA"):
|
|
41
44
|
return "cuml2"
|
|
42
45
|
elif manufacturer == "Juniper":
|
|
@@ -53,6 +53,7 @@
|
|
|
53
53
|
"Huawei.CE.CE8800.CE8850": " CE8850",
|
|
54
54
|
"Huawei.CE.CE8800.CE8851": " CE8851",
|
|
55
55
|
"Huawei.CE.CE8800.CE8855": " CE8855",
|
|
56
|
+
"Huawei.CE.CE8800.CE8875": " CE8875",
|
|
56
57
|
"Huawei.CE.CE9800": " CE98\\d\\d",
|
|
57
58
|
"Huawei.CE.CE9800.CE9855": " CE9855",
|
|
58
59
|
"Huawei.CE.CE9800.CE9860": " CE9860",
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
VENDOR_REVERSES = {
|
|
2
2
|
"huawei": "undo",
|
|
3
|
+
"h3c": "undo",
|
|
3
4
|
"optixtrans": "undo",
|
|
4
5
|
"cisco": "no",
|
|
5
6
|
"nexus": "no",
|
|
@@ -45,6 +46,7 @@ VENDOR_DIFF_ORDERED = {
|
|
|
45
46
|
|
|
46
47
|
VENDOR_EXIT = {
|
|
47
48
|
"huawei": "quit",
|
|
49
|
+
"h3c": "quit",
|
|
48
50
|
"optixtrans": "quit",
|
|
49
51
|
"cisco": "exit",
|
|
50
52
|
"nexus": "exit",
|
|
@@ -57,3 +59,7 @@ VENDOR_EXIT = {
|
|
|
57
59
|
"ribbon": "exit",
|
|
58
60
|
"b4com": "exit",
|
|
59
61
|
}
|
|
62
|
+
|
|
63
|
+
VENDOR_ALIASES = {
|
|
64
|
+
"h3c": "huawei",
|
|
65
|
+
}
|
annet/annlib/rulebook/common.py
CHANGED
|
@@ -356,6 +356,10 @@ def apply(hw, do_commit, do_finalize, **_):
|
|
|
356
356
|
after.add_cmd(Command("commit"))
|
|
357
357
|
if do_finalize:
|
|
358
358
|
after.add_cmd(Command("write", timeout=40))
|
|
359
|
+
elif hw.H3C:
|
|
360
|
+
before.add_cmd(Command("system-view"))
|
|
361
|
+
if do_finalize:
|
|
362
|
+
after.add_cmd(Command("save force", timeout=20))
|
|
359
363
|
else:
|
|
360
364
|
raise Exception("unknown hw %s" % hw)
|
|
361
365
|
|
annet/annlib/tabparser.py
CHANGED
|
@@ -2,7 +2,7 @@ import dataclasses
|
|
|
2
2
|
import itertools
|
|
3
3
|
import re
|
|
4
4
|
from collections import OrderedDict as odict
|
|
5
|
-
from typing import TYPE_CHECKING, Any, Dict, Iterable, Optional, Tuple, Union
|
|
5
|
+
from typing import TYPE_CHECKING, Any, Dict, Iterable, Optional, Tuple, Union, List
|
|
6
6
|
|
|
7
7
|
from .types import Op
|
|
8
8
|
|
|
@@ -271,8 +271,63 @@ class CiscoFormatter(BlockExitFormatter):
|
|
|
271
271
|
def __init__(self, indent=" "):
|
|
272
272
|
super().__init__("exit", indent)
|
|
273
273
|
|
|
274
|
+
def _split_indent(
|
|
275
|
+
self, line: str, indent: int, block_exit_strings: List[str]
|
|
276
|
+
) -> Tuple[List[str], int]:
|
|
277
|
+
"""
|
|
278
|
+
The small helper calculates indent shift based on block exit string.
|
|
279
|
+
If configuration line has non-default block exit string it means that
|
|
280
|
+
new subsection is started and indent should be increased.
|
|
281
|
+
If configuration line exists in list of block exit strings,
|
|
282
|
+
it means that subsection is finished and indent should be decreased
|
|
283
|
+
|
|
284
|
+
Args:
|
|
285
|
+
line: just configuration line
|
|
286
|
+
indent: current indent
|
|
287
|
+
block_exit_strings: list of previously seen block exit strings
|
|
288
|
+
Returns:
|
|
289
|
+
new indent and list of previously seen block exit strings
|
|
290
|
+
"""
|
|
291
|
+
|
|
292
|
+
if line.strip() in block_exit_strings:
|
|
293
|
+
indent -= 1
|
|
294
|
+
block_exit_strings.remove(line.strip())
|
|
295
|
+
return block_exit_strings, indent
|
|
296
|
+
|
|
297
|
+
block_exit_wrapped = [
|
|
298
|
+
v for v in self.block_exit(FormatterContext(current=(line.strip(), {})))
|
|
299
|
+
]
|
|
300
|
+
|
|
301
|
+
if not block_exit_wrapped or len(block_exit_wrapped) != 3:
|
|
302
|
+
return block_exit_strings, indent
|
|
303
|
+
if not isinstance(block_exit_wrapped[1], str):
|
|
304
|
+
return block_exit_strings, indent
|
|
305
|
+
if block_exit_wrapped[1] == self._block_exit:
|
|
306
|
+
return block_exit_strings, indent
|
|
307
|
+
|
|
308
|
+
indent += 1
|
|
309
|
+
block_exit_strings.append(block_exit_wrapped[1])
|
|
310
|
+
return block_exit_strings, indent
|
|
311
|
+
|
|
274
312
|
def split(self, text):
|
|
275
|
-
|
|
313
|
+
additional_indent = 0
|
|
314
|
+
block_exit_strings = [self._block_exit]
|
|
315
|
+
tree = self.split_remove_spaces(text)
|
|
316
|
+
for i, item in enumerate(tree):
|
|
317
|
+
block_exit_strings, new_indent = self._split_indent(
|
|
318
|
+
item, additional_indent, block_exit_strings
|
|
319
|
+
)
|
|
320
|
+
tree[i] = f"{' ' * additional_indent}{item}"
|
|
321
|
+
additional_indent = new_indent
|
|
322
|
+
return tree
|
|
323
|
+
|
|
324
|
+
def block_exit(self, context: Optional[FormatterContext]) -> str:
|
|
325
|
+
current = context and context.row or ""
|
|
326
|
+
|
|
327
|
+
if current.startswith(("address-family")):
|
|
328
|
+
yield from block_wrapper("exit-address-family")
|
|
329
|
+
else:
|
|
330
|
+
yield from super().block_exit(context)
|
|
276
331
|
|
|
277
332
|
|
|
278
333
|
class AsrFormatter(BlockExitFormatter):
|
annet/rulebook/__init__.py
CHANGED
|
@@ -5,7 +5,7 @@ from typing import Iterable, Union
|
|
|
5
5
|
|
|
6
6
|
from annet.annlib.lib import mako_render
|
|
7
7
|
from annet.annlib.rbparser.ordering import compile_ordering_text
|
|
8
|
-
from annet.annlib.rbparser.platform import VENDOR_REVERSES
|
|
8
|
+
from annet.annlib.rbparser.platform import VENDOR_REVERSES, VENDOR_ALIASES
|
|
9
9
|
|
|
10
10
|
from annet.connectors import CachedConnector
|
|
11
11
|
from annet.rulebook.deploying import compile_deploying_text
|
|
@@ -64,7 +64,8 @@ class DefaultRulebookProvider(RulebookProvider):
|
|
|
64
64
|
return self._rulebook_cache[hw]
|
|
65
65
|
|
|
66
66
|
assert hw.vendor in VENDOR_REVERSES, "Unknown vendor: %s" % (hw.vendor)
|
|
67
|
-
|
|
67
|
+
rul_vendor_name = VENDOR_ALIASES.get(hw.vendor, hw.vendor)
|
|
68
|
+
patching = compile_patching_text(self._render_rul(rul_vendor_name + ".rul", hw), rul_vendor_name)
|
|
68
69
|
|
|
69
70
|
try:
|
|
70
71
|
ordering_text = self._render_rul(hw.vendor + ".order", hw)
|
annet/rulebook/cisco/misc.py
CHANGED
|
@@ -57,93 +57,3 @@ def banner_login(rule, key, diff, **_):
|
|
|
57
57
|
yield (False, f"banner login {key}", None)
|
|
58
58
|
else:
|
|
59
59
|
yield from common.default(rule, key, diff)
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
def bgp_diff(old, new, diff_pre, _pops=(Op.AFFECTED,)):
|
|
63
|
-
"""
|
|
64
|
-
Some oder versions of Cisco IOS doesn't create subsection for address family block.
|
|
65
|
-
|
|
66
|
-
it looks like:
|
|
67
|
-
|
|
68
|
-
router bgp 65111
|
|
69
|
-
bgp router-id 1.1.1.1
|
|
70
|
-
bgp log-neighbor-changes
|
|
71
|
-
neighbor SPINE peer-group
|
|
72
|
-
!
|
|
73
|
-
address-family ipv4
|
|
74
|
-
neighbor SPINE send-community both
|
|
75
|
-
neighbor SPINE soft-reconfiguration inbound
|
|
76
|
-
neighbor SPINE route-map TOR_IMPORT_SPINE in
|
|
77
|
-
neighbor SPINE route-map TOR_EXPORT_SPINE out
|
|
78
|
-
exit-address-family
|
|
79
|
-
|
|
80
|
-
but should be
|
|
81
|
-
|
|
82
|
-
router bgp 65111
|
|
83
|
-
bgp router-id 1.1.1.1
|
|
84
|
-
bgp log-neighbor-changes
|
|
85
|
-
neighbor SPINE peer-group
|
|
86
|
-
!
|
|
87
|
-
address-family ipv4
|
|
88
|
-
neighbor SPINE send-community both
|
|
89
|
-
neighbor SPINE soft-reconfiguration inbound
|
|
90
|
-
neighbor SPINE route-map TOR_IMPORT_SPINE in
|
|
91
|
-
neighbor SPINE route-map TOR_EXPORT_SPINE out
|
|
92
|
-
exit-address-family
|
|
93
|
-
|
|
94
|
-
The diff_logic func do it before make diff.
|
|
95
|
-
"""
|
|
96
|
-
corrected_old = _create_subsections(old, "address-family")
|
|
97
|
-
|
|
98
|
-
yield from common.default_diff(corrected_old, new, diff_pre, _pops)
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
def _create_subsections(data: OrderedDict[str, Any], sub_section_prefix: str) -> OrderedDict[str, Any]:
|
|
102
|
-
"""
|
|
103
|
-
Reorganizes the given OrderedDict to nest commands under their respective
|
|
104
|
-
sub_section_prefix keys.
|
|
105
|
-
|
|
106
|
-
This function traverses the entries in the provided OrderedDict and groups
|
|
107
|
-
together all entries that are between keys with sub_section_prefix under those
|
|
108
|
-
keys as nested OrderedDicts. The reorganization keeps the order of entries
|
|
109
|
-
stable, only adding nesting where appropriate.
|
|
110
|
-
|
|
111
|
-
Args:
|
|
112
|
-
data (OrderedDict): The original configuration to be transformed.
|
|
113
|
-
sub_section_prefix (str): Prefix of subsection key
|
|
114
|
-
|
|
115
|
-
Returns:
|
|
116
|
-
OrderedDict: A new OrderedDict with nested 'address-family' sections.
|
|
117
|
-
"""
|
|
118
|
-
|
|
119
|
-
result = OrderedDict()
|
|
120
|
-
sub_section = None
|
|
121
|
-
temp: OrderedDict = OrderedDict()
|
|
122
|
-
|
|
123
|
-
for key, value in data.items():
|
|
124
|
-
# make nested loop if found nested values
|
|
125
|
-
if value:
|
|
126
|
-
fixed_value: OrderedDict[str, Any] = _create_subsections(value, sub_section_prefix)
|
|
127
|
-
else:
|
|
128
|
-
fixed_value = value
|
|
129
|
-
if key.startswith(sub_section_prefix):
|
|
130
|
-
# in case of data has already had subsections
|
|
131
|
-
if value:
|
|
132
|
-
result[key] = fixed_value
|
|
133
|
-
continue
|
|
134
|
-
# if previous subsection present save collected data from temporary dict
|
|
135
|
-
if sub_section:
|
|
136
|
-
result[sub_section] = temp
|
|
137
|
-
# find a new subsection and initialize new dict
|
|
138
|
-
sub_section = key
|
|
139
|
-
temp = OrderedDict()
|
|
140
|
-
# put found data to temporary dict
|
|
141
|
-
elif sub_section:
|
|
142
|
-
temp[key] = fixed_value
|
|
143
|
-
else:
|
|
144
|
-
result[key] = fixed_value
|
|
145
|
-
# if data is finished save collected data from temporary dict
|
|
146
|
-
if sub_section:
|
|
147
|
-
result[sub_section] = temp
|
|
148
|
-
|
|
149
|
-
return result
|
annet/rulebook/texts/cisco.rul
CHANGED
annet/tabparser.py
CHANGED
|
@@ -18,7 +18,7 @@ annet/parallel.py,sha256=hLkzEht0KhzmzUWDdO4QFYQHzhxs3wPlTA8DxbB2ziw,17160
|
|
|
18
18
|
annet/patching.py,sha256=nILbY5oJajN0b1j3f0HEJm05H3HVThnWvB7vDVh7UQw,559
|
|
19
19
|
annet/reference.py,sha256=B8mH8VUMcecPnzULiTVb_kTQ7jQrCL7zp4pfIZQa5fk,4035
|
|
20
20
|
annet/storage.py,sha256=eAHEvPbRuKDUJdnkzSrHmW_lBJS3Y0g93Y2VJ4qzifQ,3941
|
|
21
|
-
annet/tabparser.py,sha256=
|
|
21
|
+
annet/tabparser.py,sha256=hf-_9R14C-_Q17lxUqbyT377QkrKhJLnaL-cG_YpUIQ,1016
|
|
22
22
|
annet/text_term_format.py,sha256=CHb6viv45vmYl-SK1A1vyPHGhaEni6jVybBusaQnct8,2813
|
|
23
23
|
annet/tracing.py,sha256=ndpM-au1c88uBBpOuH_z52qWZL773edYozNyys_wA68,4044
|
|
24
24
|
annet/types.py,sha256=f2HwqoKa6AucwFwDMszoouB6m1B8n6VmdjHMktO30Kc,7175
|
|
@@ -32,7 +32,7 @@ annet/adapters/netbox/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
|
|
|
32
32
|
annet/adapters/netbox/provider.py,sha256=3IrfZ6CfCxf-lTnJlIC2TQ8M_rDxOB_B7HGXZ92vAgA,1643
|
|
33
33
|
annet/adapters/netbox/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
34
34
|
annet/adapters/netbox/common/client.py,sha256=PaxHG4W9H8_uunIwMBNYkLq4eQJYoO6p6gY-ciQs7Nc,2563
|
|
35
|
-
annet/adapters/netbox/common/manufacturer.py,sha256=
|
|
35
|
+
annet/adapters/netbox/common/manufacturer.py,sha256=1kmw3YzitXwOh4zitsWfZda4CQiMr4CnAxkUkUm_z3A,1678
|
|
36
36
|
annet/adapters/netbox/common/models.py,sha256=JAAtbUB6UOzA3-VF5Fa33XktgKC3C2csareTZnHyqd0,7177
|
|
37
37
|
annet/adapters/netbox/common/query.py,sha256=ziUFM7cUEbEIf3k1szTll4aO-OCUa-2Ogxbebi7Tegs,646
|
|
38
38
|
annet/adapters/netbox/common/status_client.py,sha256=W4nTb2yvBlJ2UkWUmUhKQ2PaSQb1shjhHj5ebb4s2s4,591
|
|
@@ -50,12 +50,12 @@ annet/annlib/jsontools.py,sha256=4-2r_mPNbecKreuUr3vlLv3ykJdhRmyUD8AdF2nSAxc,543
|
|
|
50
50
|
annet/annlib/lib.py,sha256=eJ4hcVuQ6pdYBzLs4YKCHFtq45idOfZCYp92XfF7_QI,15317
|
|
51
51
|
annet/annlib/output.py,sha256=_SjJ6G6bejvnTKqNHw6xeio0FT9oO3OIkLaOC3cEga4,7569
|
|
52
52
|
annet/annlib/patching.py,sha256=2CpAT3T43IUFJR57qTYSwjQ0smg0uHWN43df4n1WArs,19937
|
|
53
|
-
annet/annlib/tabparser.py,sha256=
|
|
53
|
+
annet/annlib/tabparser.py,sha256=OrRAkXv0vb0erZ3YLM2_LzoOo-A8qXTnaTHHyI1WYKY,28175
|
|
54
54
|
annet/annlib/types.py,sha256=VHU0CBADfYmO0xzB_c5f-mcuU3dUumuJczQnqGlib9M,852
|
|
55
55
|
annet/annlib/netdev/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
56
56
|
annet/annlib/netdev/db.py,sha256=fI_u5aya4l61mbYSjj4JwlVfi3s7obt2jqERSuXGRUI,1634
|
|
57
57
|
annet/annlib/netdev/devdb/__init__.py,sha256=aKYjjLbJebdKBjnGDpVLQdSqrV2JL24spGm58tmMWVU,892
|
|
58
|
-
annet/annlib/netdev/devdb/data/devdb.json,sha256=
|
|
58
|
+
annet/annlib/netdev/devdb/data/devdb.json,sha256=sv8c-Uwx6ByM5ZMvMCwwDtPZU3CmIzkti76bTtN7bnk,6066
|
|
59
59
|
annet/annlib/netdev/views/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
60
60
|
annet/annlib/netdev/views/dump.py,sha256=rIlyvnA3uM8bB_7oq1nS2KDxTp6dQh2hz-FbNhYIpOU,4630
|
|
61
61
|
annet/annlib/netdev/views/hardware.py,sha256=3JCZLH7deIHhCguwPJTUX-WDvWjG_xt6BdSEZSO6zkQ,4226
|
|
@@ -63,10 +63,10 @@ annet/annlib/rbparser/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
|
|
|
63
63
|
annet/annlib/rbparser/acl.py,sha256=RR8yPt6t96_IiyuKVbeZ-3x32cyhBAT2wC1y99oWBO8,3931
|
|
64
64
|
annet/annlib/rbparser/deploying.py,sha256=ACT8QNhDAhJx3ZKuGh2nYBOrpdka2qEKuLDxvQAGKLk,1649
|
|
65
65
|
annet/annlib/rbparser/ordering.py,sha256=DiKqyY8Khz-5MTxNF1GSNtZgtyKwT3YYCXpahIPB6Ps,1779
|
|
66
|
-
annet/annlib/rbparser/platform.py,sha256=
|
|
66
|
+
annet/annlib/rbparser/platform.py,sha256=hnxznTfV9txXi1PkR1hZrprTrQJvlwgqXVL8vXkYmv4,1558
|
|
67
67
|
annet/annlib/rbparser/syntax.py,sha256=iZ7Y-4QQBw4L3UtjEh54qisiRDhobl7HZxFNdP8mi54,3577
|
|
68
68
|
annet/annlib/rulebook/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
69
|
-
annet/annlib/rulebook/common.py,sha256=
|
|
69
|
+
annet/annlib/rulebook/common.py,sha256=bx_Iwui-JJeyctUPF1OsEll0Aa-IQZadBPQjaeuoWgw,16638
|
|
70
70
|
annet/api/__init__.py,sha256=7EB3d89kGXKf4Huw7cqyOULTGC9ydL4sHiVw8K0Aeqg,33722
|
|
71
71
|
annet/configs/context.yml,sha256=RVLrKLIHpCty7AGwOnmqf7Uu0iZQCn-AjYhophDJer8,259
|
|
72
72
|
annet/configs/logging.yaml,sha256=EUagfir99QqA73Scc3k7sfQccbU3E1SvEQdyhLFtCl4,997
|
|
@@ -97,7 +97,7 @@ annet/rpl/policy.py,sha256=P1Kt-8fHFxEczeP-RwkK_wrGN0p7IR-hOApEd2vC55E,448
|
|
|
97
97
|
annet/rpl/result.py,sha256=PHFn1zhDeqLBn07nkYw5vsoXew4nTwkklOwqvFWzBLg,141
|
|
98
98
|
annet/rpl/routemap.py,sha256=ZxYSRXWtk3CG5OQuVVVYePpPP9Zbwk-ajWvQ0wqWP_8,2422
|
|
99
99
|
annet/rpl/statement_builder.py,sha256=dSYrLosInUb4ewHzX4PeEzbRlIaz6Df4N1EytIJGccQ,8442
|
|
100
|
-
annet/rulebook/__init__.py,sha256=
|
|
100
|
+
annet/rulebook/__init__.py,sha256=oafL5HC8QHdkO9CH2q_fxohPMxOgjn-dNQa5kPjuqsA,3942
|
|
101
101
|
annet/rulebook/common.py,sha256=zK1s2c5lc5HQbIlMUQ4HARQudXSgOYiZ_Sxc2I_tHqg,721
|
|
102
102
|
annet/rulebook/deploying.py,sha256=XV0XQvc3YvwM8SOgOQlc-fCW4bnjQg_1CTZkTwMp14A,2972
|
|
103
103
|
annet/rulebook/patching.py,sha256=ve_D-9lnWs6Qb_NwqOLUWX-b_tI_L3pwQ7cgUPnqndY,4970
|
|
@@ -110,7 +110,7 @@ annet/rulebook/b4com/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
|
|
|
110
110
|
annet/rulebook/b4com/file.py,sha256=zK7RwBk1YaVoDSFSg1u7Pt8u0Fk3nhhu27aJRngemwc,137
|
|
111
111
|
annet/rulebook/cisco/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
112
112
|
annet/rulebook/cisco/iface.py,sha256=WISkzjp_G7WKPpg098FCIm4b7ipOxtRLOQbu-7gMUL0,1792
|
|
113
|
-
annet/rulebook/cisco/misc.py,sha256=
|
|
113
|
+
annet/rulebook/cisco/misc.py,sha256=zgKdWGmjRYmvq58dh7Lbn7ofwSYZoISgXsUh5lkGKF8,2318
|
|
114
114
|
annet/rulebook/cisco/vlandb.py,sha256=pdQ0Ca976_5_cNBbTI6ADN1SP8aAngVBs1AZWltmpsw,3319
|
|
115
115
|
annet/rulebook/huawei/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
116
116
|
annet/rulebook/huawei/aaa.py,sha256=Xi8nWyBFaUz4SgoN1NQeOcXzBGCfINQDNiC-crq08uA,3445
|
|
@@ -135,7 +135,7 @@ annet/rulebook/texts/b4com.order,sha256=G3aToAIHHzKzDCM3q7_lyr9wJvuVOXVbVvF3wm5P
|
|
|
135
135
|
annet/rulebook/texts/b4com.rul,sha256=5mqyUg_oLRSny2iH6QdhfDWVu6kzgDURtlSATD7DFno,1056
|
|
136
136
|
annet/rulebook/texts/cisco.deploy,sha256=XvXWeOMahE8Uc9RF0xkJj8jGknD4vit8H_f24ubPX7w,1226
|
|
137
137
|
annet/rulebook/texts/cisco.order,sha256=OvNHMNqkCc-DN2dEjLCTKv_7ZhiaHt4q2X4Y4Z8dvR4,1901
|
|
138
|
-
annet/rulebook/texts/cisco.rul,sha256=
|
|
138
|
+
annet/rulebook/texts/cisco.rul,sha256=jgL5_xnSwd_H4E8cx4gcneSvJC5W1zz6_BWSb64iuxI,3017
|
|
139
139
|
annet/rulebook/texts/huawei.deploy,sha256=azEC6_jQRzwnTSrNgag0hHh6L7hezS_eMk6ZDZfWyXI,10444
|
|
140
140
|
annet/rulebook/texts/huawei.order,sha256=ENllPX4kO6xNw2mUQcx11yhxo3tKStZ5mUyc0C6s3d0,10657
|
|
141
141
|
annet/rulebook/texts/huawei.rul,sha256=02Fi1RG4YYea2clHCluBuJDKNbT0hS9jtsk6_h6GK8k,12958
|
|
@@ -164,10 +164,10 @@ annet_generators/rpl_example/__init__.py,sha256=z4-gsDv06BBpgTwRohc50VBQYFD26QVu
|
|
|
164
164
|
annet_generators/rpl_example/items.py,sha256=6x7b0wZ7Vjn6yCaJ-aGbpTHm7fyqO77b-LRqzzhEbh4,615
|
|
165
165
|
annet_generators/rpl_example/policy_generator.py,sha256=KFCqn347CIPcnllOHfINYeKgNSr6Wl-bdM5Xj_YKhYM,11183
|
|
166
166
|
annet_generators/rpl_example/route_policy.py,sha256=QjxFjkePHfTo2CpMeRVaDqZXNXLM-gGlE8EocHuOR4Y,1189
|
|
167
|
-
annet-0.16.
|
|
168
|
-
annet-0.16.
|
|
169
|
-
annet-0.16.
|
|
170
|
-
annet-0.16.
|
|
171
|
-
annet-0.16.
|
|
172
|
-
annet-0.16.
|
|
173
|
-
annet-0.16.
|
|
167
|
+
annet-0.16.19.dist-info/AUTHORS,sha256=rh3w5P6gEgqmuC-bw-HB68vBCr-yIBFhVL0PG4hguLs,878
|
|
168
|
+
annet-0.16.19.dist-info/LICENSE,sha256=yPxl7dno02Pw7gAcFPIFONzx_gapwDoPXsIsh6Y7lC0,1079
|
|
169
|
+
annet-0.16.19.dist-info/METADATA,sha256=jVn5a9AeXl48iehZGqytQ9Y96qIXvmou5iRf2wwb3Uo,728
|
|
170
|
+
annet-0.16.19.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
|
171
|
+
annet-0.16.19.dist-info/entry_points.txt,sha256=5lIaDGlGi3l6QQ2ry2jZaqViP5Lvt8AmsegdD0Uznck,192
|
|
172
|
+
annet-0.16.19.dist-info/top_level.txt,sha256=QsoTZBsUtwp_FEcmRwuN8QITBmLOZFqjssRfKilGbP8,23
|
|
173
|
+
annet-0.16.19.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|