annet 1.0.3__py3-none-any.whl → 1.1.0__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/annlib/netdev/devdb/data/devdb.json +3 -0
- annet/annlib/patching.py +8 -5
- annet/annlib/rbparser/ordering.py +5 -0
- annet/annlib/rbparser/platform.py +2 -2
- annet/annlib/tabparser.py +83 -29
- annet/bgp_models.py +83 -1
- annet/executor.py +1 -358
- annet/mesh/device_models.py +12 -0
- annet/mesh/models_converter.py +3 -1
- annet/rulebook/arista/aaa.py +63 -0
- annet/rulebook/juniper/__init__.py +90 -41
- annet/rulebook/texts/arista.order +12 -12
- annet/rulebook/texts/arista.rul +1 -1
- annet/rulebook/texts/huawei.order +2 -2
- annet/rulebook/texts/juniper.order +4 -0
- {annet-1.0.3.dist-info → annet-1.1.0.dist-info}/METADATA +1 -2
- {annet-1.0.3.dist-info → annet-1.1.0.dist-info}/RECORD +22 -21
- {annet-1.0.3.dist-info → annet-1.1.0.dist-info}/WHEEL +1 -1
- annet/rulebook/ribbon/__init__.py +0 -12
- {annet-1.0.3.dist-info → annet-1.1.0.dist-info}/AUTHORS +0 -0
- {annet-1.0.3.dist-info → annet-1.1.0.dist-info}/LICENSE +0 -0
- {annet-1.0.3.dist-info → annet-1.1.0.dist-info}/entry_points.txt +0 -0
- {annet-1.0.3.dist-info → annet-1.1.0.dist-info}/top_level.txt +0 -0
|
@@ -1,73 +1,122 @@
|
|
|
1
1
|
import re
|
|
2
2
|
from collections import OrderedDict as odict
|
|
3
|
-
|
|
3
|
+
import functools
|
|
4
4
|
|
|
5
5
|
from annet.annlib.lib import jun_activate, jun_is_inactive, merge_dicts
|
|
6
6
|
from annet.annlib.types import Op
|
|
7
|
-
|
|
7
|
+
from annet.tabparser import JuniperFormatter
|
|
8
8
|
from annet.rulebook import common
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
def
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
def comment_processor(item: common.DiffItem):
|
|
12
|
+
if item.op in (Op.REMOVED, Op.ADDED) and item.row.startswith(JuniperFormatter.Comment.begin):
|
|
13
|
+
comment = JuniperFormatter.Comment.loads(item.row)
|
|
14
|
+
|
|
15
|
+
item.diff_pre["attrs"]["context"]["row"] = comment.row
|
|
16
|
+
item.diff_pre["attrs"]["context"]["comment"] = comment.comment
|
|
17
|
+
item.diff_pre["key"] = item.diff_pre["raw_rule"] = (
|
|
18
|
+
f"{JuniperFormatter.Comment.begin} {comment.row} {JuniperFormatter.Comment.end}"
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
return common.DiffItem(
|
|
22
|
+
item.op,
|
|
23
|
+
f"{JuniperFormatter.Comment.begin} {comment.comment} {JuniperFormatter.Comment.end}",
|
|
24
|
+
item.children,
|
|
25
|
+
item.diff_pre,
|
|
26
|
+
)
|
|
27
|
+
else:
|
|
28
|
+
return item
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def inactive_blocks(diff_foo):
|
|
32
|
+
@functools.wraps(diff_foo)
|
|
33
|
+
def wrapper(old: odict, new: odict, diff_pre, *args, **kwargs):
|
|
14
34
|
old_inactives = list(map(jun_activate, filter(jun_is_inactive, old)))
|
|
15
35
|
new_inactives = list(map(jun_activate, filter(jun_is_inactive, new)))
|
|
36
|
+
|
|
37
|
+
diff: list[common.DiffItem]
|
|
38
|
+
|
|
16
39
|
if len(old_inactives) == 0 and len(new_inactives) == 0:
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
40
|
+
diff = diff_foo(old, new, diff_pre, *args, **kwargs)
|
|
41
|
+
else:
|
|
42
|
+
inactive_pre = odict([(jun_activate(k), v) for k, v in diff_pre.items() if jun_is_inactive(k)])
|
|
43
|
+
merged_pre = merge_dicts(diff_pre, inactive_pre)
|
|
44
|
+
|
|
45
|
+
diff = diff_foo(
|
|
46
|
+
strip_toplevel_inactives(old),
|
|
47
|
+
strip_toplevel_inactives(new),
|
|
48
|
+
merged_pre,
|
|
49
|
+
*args, **kwargs
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
for activated in [k for k in old_inactives if k in new]:
|
|
53
|
+
diff.append(
|
|
54
|
+
common.DiffItem(
|
|
55
|
+
Op.ADDED,
|
|
56
|
+
activate_cmd(activated, merged_pre),
|
|
57
|
+
[],
|
|
58
|
+
diff_pre[activated]["match"]
|
|
59
|
+
)
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
for deactivated in [k for k in new_inactives if k not in old_inactives]:
|
|
63
|
+
# если деактивуруемого блока не существует - ставим один deactivate, глубже не идем
|
|
64
|
+
if deactivated not in diff_pre:
|
|
65
|
+
diff = [
|
|
66
|
+
common.DiffItem(
|
|
67
|
+
Op.ADDED,
|
|
68
|
+
deactivate_cmd(deactivated, merged_pre),
|
|
69
|
+
[],
|
|
70
|
+
inactive_pre[deactivated]["match"]
|
|
71
|
+
)
|
|
72
|
+
]
|
|
73
|
+
else:
|
|
74
|
+
diff.append(
|
|
75
|
+
common.DiffItem(
|
|
76
|
+
Op.ADDED,
|
|
77
|
+
deactivate_cmd(deactivated, merged_pre),
|
|
78
|
+
[],
|
|
79
|
+
diff_pre[deactivated]["match"]
|
|
80
|
+
)
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
return list(map(comment_processor, diff))
|
|
84
|
+
|
|
36
85
|
return wrapper
|
|
37
86
|
|
|
38
87
|
|
|
39
|
-
@
|
|
88
|
+
@inactive_blocks
|
|
40
89
|
def default_diff(old, new, diff_pre, _pops=(Op.AFFECTED,)):
|
|
41
90
|
diff = common.default_diff(old, new, diff_pre, _pops)
|
|
42
|
-
diff =
|
|
43
|
-
diff =
|
|
91
|
+
diff = ignore_quotes(diff)
|
|
92
|
+
diff = strip_inactive_removed(diff)
|
|
44
93
|
return diff
|
|
45
94
|
|
|
46
95
|
|
|
47
|
-
@
|
|
96
|
+
@inactive_blocks
|
|
48
97
|
def ordered_diff(old, new, diff_pre, _pops=(Op.AFFECTED,)):
|
|
49
98
|
diff = common.ordered_diff(old, new, diff_pre, _pops)
|
|
50
|
-
diff =
|
|
51
|
-
diff =
|
|
99
|
+
diff = ignore_quotes(diff)
|
|
100
|
+
diff = strip_inactive_removed(diff)
|
|
52
101
|
return diff
|
|
53
102
|
|
|
54
103
|
|
|
55
104
|
# =====
|
|
56
|
-
def
|
|
105
|
+
def strip_toplevel_inactives(tree):
|
|
57
106
|
for inactive in filter(jun_is_inactive, tree):
|
|
58
107
|
assert jun_activate(inactive) not in tree
|
|
59
108
|
return odict([(k, v) if not jun_is_inactive(k) else (jun_activate(k), v) for k, v in tree.items()])
|
|
60
109
|
|
|
61
110
|
|
|
62
|
-
def
|
|
63
|
-
return
|
|
111
|
+
def activate_cmd(active_key, diff_pre):
|
|
112
|
+
return cmd(active_key, diff_pre, "activate")
|
|
64
113
|
|
|
65
114
|
|
|
66
|
-
def
|
|
67
|
-
return
|
|
115
|
+
def deactivate_cmd(active_key, diff_pre):
|
|
116
|
+
return cmd(active_key, diff_pre, "deactivate")
|
|
68
117
|
|
|
69
118
|
|
|
70
|
-
def
|
|
119
|
+
def cmd(active_key, diff_pre, cmd):
|
|
71
120
|
assert not jun_is_inactive(active_key)
|
|
72
121
|
if not diff_pre[active_key]["subtree"]:
|
|
73
122
|
# Если конанда не имеет подблоков И имеет агрументы то надо их отбросить
|
|
@@ -75,7 +124,7 @@ def _cmd(active_key, diff_pre, cmd):
|
|
|
75
124
|
return " ".join([cmd, active_key])
|
|
76
125
|
|
|
77
126
|
|
|
78
|
-
def
|
|
127
|
+
def ignore_quotes(diff):
|
|
79
128
|
"""
|
|
80
129
|
Фильтрует из diff строки которые различаются
|
|
81
130
|
только наличием/отсутсвием кавычек
|
|
@@ -86,19 +135,19 @@ def _ignore_quotes(diff):
|
|
|
86
135
|
"""
|
|
87
136
|
equivs = {}
|
|
88
137
|
for elem in diff:
|
|
89
|
-
key =
|
|
138
|
+
key = strip_quotes(elem[1])
|
|
90
139
|
if key not in equivs:
|
|
91
140
|
equivs[key] = 0
|
|
92
141
|
equivs[key] += 1
|
|
93
|
-
filtered_diff = [elem for elem in diff if equivs[
|
|
142
|
+
filtered_diff = [elem for elem in diff if equivs[strip_quotes(elem[1])] == 1]
|
|
94
143
|
return filtered_diff
|
|
95
144
|
|
|
96
145
|
|
|
97
|
-
def
|
|
146
|
+
def strip_quotes(key):
|
|
98
147
|
return re.sub(r"\"(?P<quoted_text>[^\"]+)\"$", r"\g<quoted_text>", key)
|
|
99
148
|
|
|
100
149
|
|
|
101
|
-
def
|
|
150
|
+
def strip_inactive_removed(diff):
|
|
102
151
|
for elem in diff:
|
|
103
152
|
if elem[0] == Op.REMOVED and elem[3]["key"]:
|
|
104
153
|
key = elem[3]["key"][0]
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# vim: set syntax=annrulebook:
|
|
1
2
|
# В этом файле определяется порядок команд, в котором их следует подавать на устройство.
|
|
2
3
|
# - Если порядок команды не важен - ее можно не писать сюда совсем.
|
|
3
4
|
# - Если команда начинается с undo и прописан параметр %order_reverse - команда считается
|
|
@@ -29,7 +30,7 @@ ntp
|
|
|
29
30
|
|
|
30
31
|
|
|
31
32
|
qos profile *
|
|
32
|
-
~
|
|
33
|
+
~
|
|
33
34
|
|
|
34
35
|
|
|
35
36
|
snmp-server
|
|
@@ -49,7 +50,7 @@ tacacs-server
|
|
|
49
50
|
|
|
50
51
|
|
|
51
52
|
aaa group
|
|
52
|
-
~
|
|
53
|
+
~
|
|
53
54
|
|
|
54
55
|
|
|
55
56
|
aaa
|
|
@@ -59,7 +60,7 @@ username
|
|
|
59
60
|
|
|
60
61
|
|
|
61
62
|
role
|
|
62
|
-
~
|
|
63
|
+
~
|
|
63
64
|
|
|
64
65
|
|
|
65
66
|
vlan
|
|
@@ -73,14 +74,14 @@ mpls ip
|
|
|
73
74
|
mpls ldp
|
|
74
75
|
|
|
75
76
|
router isis
|
|
76
|
-
~
|
|
77
|
+
~
|
|
77
78
|
|
|
78
79
|
interface
|
|
79
|
-
~
|
|
80
|
+
~
|
|
80
81
|
|
|
81
82
|
|
|
82
83
|
(?:ip|ipv6) access-list
|
|
83
|
-
~
|
|
84
|
+
~
|
|
84
85
|
|
|
85
86
|
|
|
86
87
|
(?:ip|ipv6) route
|
|
@@ -101,15 +102,15 @@ qos map
|
|
|
101
102
|
|
|
102
103
|
|
|
103
104
|
route-map * (?:permit|deny) *
|
|
104
|
-
~
|
|
105
|
+
~
|
|
105
106
|
|
|
106
107
|
|
|
107
108
|
router bfd
|
|
108
|
-
~
|
|
109
|
+
~
|
|
109
110
|
|
|
110
111
|
|
|
111
112
|
router bgp
|
|
112
|
-
~
|
|
113
|
+
~
|
|
113
114
|
|
|
114
115
|
|
|
115
116
|
router multicast
|
|
@@ -119,8 +120,7 @@ ip tacacs
|
|
|
119
120
|
|
|
120
121
|
|
|
121
122
|
management
|
|
122
|
-
~
|
|
123
|
+
~
|
|
123
124
|
|
|
124
125
|
|
|
125
|
-
|
|
126
|
-
~ %global
|
|
126
|
+
~
|
annet/rulebook/texts/arista.rul
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# vim: set syntax=annrulebook:
|
|
1
2
|
# В этом файле определяется порядок команд, в котором их следует подавать на устройство.
|
|
2
3
|
# - Если порядок команды не важен - ее можно не писать сюда совсем.
|
|
3
4
|
# - Если команда начинается с undo и прописан параметр %order_reverse - команда считается
|
|
@@ -384,5 +385,4 @@ undo sflow %order_reverse
|
|
|
384
385
|
# индекс референсится в логике патчинга префикс-листа huawei.misc.prefix_list
|
|
385
386
|
undo ip */(ip|ipv6)/-prefix * index 99999999 %order_reverse
|
|
386
387
|
|
|
387
|
-
|
|
388
|
-
~ %global
|
|
388
|
+
~
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: annet
|
|
3
|
-
Version: 1.0
|
|
3
|
+
Version: 1.1.0
|
|
4
4
|
Summary: annet
|
|
5
5
|
Home-page: https://github.com/annetutil/annet
|
|
6
6
|
License: MIT
|
|
@@ -15,7 +15,6 @@ Requires-Dist: PyYAML>=6.0.1
|
|
|
15
15
|
Requires-Dist: Pygments>=2.14.0
|
|
16
16
|
Requires-Dist: Mako>=1.2.4
|
|
17
17
|
Requires-Dist: Jinja2>=3.1.2
|
|
18
|
-
Requires-Dist: psutil>=5.8.0
|
|
19
18
|
Requires-Dist: packaging>=23.2
|
|
20
19
|
Requires-Dist: contextlog>=1.1
|
|
21
20
|
Requires-Dist: valkit>=0.1.4
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
annet/__init__.py,sha256=0OKkFkqog8As7B6ApdpKQkrEAcEELUREWp82D8WvGA8,1846
|
|
2
2
|
annet/annet.py,sha256=TMdEuM7GJQ4TjRVmuK3bCTZN-21lxjQ9sXqEdILUuBk,725
|
|
3
3
|
annet/argparse.py,sha256=v1MfhjR0B8qahza0WinmXClpR8UiDFhmwDDWtNroJPA,12855
|
|
4
|
-
annet/bgp_models.py,sha256=
|
|
4
|
+
annet/bgp_models.py,sha256=oibTSdipNkGL4t8Xn94bhyKHMOtwbPBqmYaAy4FmTxQ,12361
|
|
5
5
|
annet/cli.py,sha256=hDpjIr3w47lgQ_CvCQS1SXFDK-SJrf5slbT__5u6GIA,12342
|
|
6
6
|
annet/cli_args.py,sha256=KQlihxSl-Phhq1-9oJDdNSbIllEX55LlPfH6viEKOuw,13483
|
|
7
7
|
annet/connectors.py,sha256=aoiDVLPizx8CW2p8SAwGCzyO_WW8H9xc2aujbGC4bDg,4882
|
|
8
8
|
annet/deploy.py,sha256=3O96k17FbVt8KCvxF4gujXAB81U2-XRJyHLpbc9ekSQ,7529
|
|
9
9
|
annet/deploy_ui.py,sha256=SDTJ-CF6puW0KHQ0g_NDp61Tqh6xkTBMxv8PrBhGyNI,27977
|
|
10
10
|
annet/diff.py,sha256=zLcaCnb4lZRUb7frpH1CstQ3kacRcCblZs1uLG8J5lk,3391
|
|
11
|
-
annet/executor.py,sha256=
|
|
11
|
+
annet/executor.py,sha256=ZOuexyr2k7CtUttaP1mAZMRoSA-ja_AHaH6inQji24A,5575
|
|
12
12
|
annet/filtering.py,sha256=ZtqxPsKdV9reZoRxtQyBg22BqyMqd-2SotYcxZ-68AQ,903
|
|
13
13
|
annet/gen.py,sha256=A718tYqIcxAa8tQEdjR6PjQ2ovWBnwPH7STKh38lmFY,33567
|
|
14
14
|
annet/hardware.py,sha256=_iR28dWiPtt6ZYdk-qg1sxazkSRJE3ukqKB-fFFfQak,1141
|
|
@@ -50,21 +50,21 @@ annet/annlib/filter_acl.py,sha256=0w1VF6WcONiTYTQh0yWi6_j9rCTc_kMLAUMr0hbdkNU,72
|
|
|
50
50
|
annet/annlib/jsontools.py,sha256=BS7s4rI8R9c_y3zz0zYl1l6con65oQ0MvfsC1dsXZts,5535
|
|
51
51
|
annet/annlib/lib.py,sha256=eJ4hcVuQ6pdYBzLs4YKCHFtq45idOfZCYp92XfF7_QI,15317
|
|
52
52
|
annet/annlib/output.py,sha256=_SjJ6G6bejvnTKqNHw6xeio0FT9oO3OIkLaOC3cEga4,7569
|
|
53
|
-
annet/annlib/patching.py,sha256=
|
|
54
|
-
annet/annlib/tabparser.py,sha256=
|
|
53
|
+
annet/annlib/patching.py,sha256=5CZOT5RZsOgOPm-NhzJe3YwpbYlw6DLKsOhvZil6pdc,21258
|
|
54
|
+
annet/annlib/tabparser.py,sha256=oGQyf_w6y4mnms0Lybjw1LDf3vD1DuucV00SHYWrpKI,30833
|
|
55
55
|
annet/annlib/types.py,sha256=VHU0CBADfYmO0xzB_c5f-mcuU3dUumuJczQnqGlib9M,852
|
|
56
56
|
annet/annlib/netdev/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
57
57
|
annet/annlib/netdev/db.py,sha256=fI_u5aya4l61mbYSjj4JwlVfi3s7obt2jqERSuXGRUI,1634
|
|
58
58
|
annet/annlib/netdev/devdb/__init__.py,sha256=aKYjjLbJebdKBjnGDpVLQdSqrV2JL24spGm58tmMWVU,892
|
|
59
|
-
annet/annlib/netdev/devdb/data/devdb.json,sha256=
|
|
59
|
+
annet/annlib/netdev/devdb/data/devdb.json,sha256=E9dnmAbAJpg_-F82ZZIjUaKFL02vDC7W7yfMyjaah2Q,6561
|
|
60
60
|
annet/annlib/netdev/views/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
61
61
|
annet/annlib/netdev/views/dump.py,sha256=rIlyvnA3uM8bB_7oq1nS2KDxTp6dQh2hz-FbNhYIpOU,4630
|
|
62
62
|
annet/annlib/netdev/views/hardware.py,sha256=3JCZLH7deIHhCguwPJTUX-WDvWjG_xt6BdSEZSO6zkQ,4226
|
|
63
63
|
annet/annlib/rbparser/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
64
64
|
annet/annlib/rbparser/acl.py,sha256=RR8yPt6t96_IiyuKVbeZ-3x32cyhBAT2wC1y99oWBO8,3931
|
|
65
65
|
annet/annlib/rbparser/deploying.py,sha256=ACT8QNhDAhJx3ZKuGh2nYBOrpdka2qEKuLDxvQAGKLk,1649
|
|
66
|
-
annet/annlib/rbparser/ordering.py,sha256=
|
|
67
|
-
annet/annlib/rbparser/platform.py,sha256=
|
|
66
|
+
annet/annlib/rbparser/ordering.py,sha256=Ux_uIOywzSbYcALK_k_bdzhC9pyYerqETsI63hsutJI,1949
|
|
67
|
+
annet/annlib/rbparser/platform.py,sha256=Q9HtqmhyzV3JK_236_4LjC2wgp5fgxY6seDfWYl1oHU,1558
|
|
68
68
|
annet/annlib/rbparser/syntax.py,sha256=iZ7Y-4QQBw4L3UtjEh54qisiRDhobl7HZxFNdP8mi54,3577
|
|
69
69
|
annet/annlib/rulebook/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
70
70
|
annet/annlib/rulebook/common.py,sha256=hqwmmNofm5q2f-hV2usMY-IPMeiANLth28tZcRBYJTw,16640
|
|
@@ -84,10 +84,10 @@ annet/generators/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG
|
|
|
84
84
|
annet/generators/common/initial.py,sha256=qYBxXFhyOPy34cxc6hsIXseod-lYCmmbuNHpM0uteY0,1244
|
|
85
85
|
annet/mesh/__init__.py,sha256=lcgdnBIxc2MAN7Er1bcErEKPqrjWO4uIp_1FldMXTYg,557
|
|
86
86
|
annet/mesh/basemodel.py,sha256=E6NTOneiMDwB1NCpjDRECoaeQ0f3n_fmTLnKTrSHTU4,4917
|
|
87
|
-
annet/mesh/device_models.py,sha256=
|
|
87
|
+
annet/mesh/device_models.py,sha256=q_E4E_glVZRVUjVbWhvbAt4Qv8wx7IcY689EBx-OKuo,4216
|
|
88
88
|
annet/mesh/executor.py,sha256=z_3e2neRR4GoEQfJlvfbalelKzOz5yb78zm9lIcLYw4,17578
|
|
89
89
|
annet/mesh/match_args.py,sha256=CR3kdIV9NGtyk9E2JbcOQ3TRuYEryTWP3m2yCo2VCWg,5751
|
|
90
|
-
annet/mesh/models_converter.py,sha256=
|
|
90
|
+
annet/mesh/models_converter.py,sha256=itfrxDd5zdTQpFNmo-YXIFQDpYyBuQ6g7xpcjxvK6uA,3221
|
|
91
91
|
annet/mesh/peer_models.py,sha256=Div4o1t6Z0TWvy-8WKg4-n9WOd2PKCmIpfbkILDlDtk,2791
|
|
92
92
|
annet/mesh/port_processor.py,sha256=RHiMS5W8qoDkTKiarQ748bcr8bNx4g_R4Y4vZg2k4TU,478
|
|
93
93
|
annet/mesh/registry.py,sha256=xmWF7yxWXmwqX2_jyMAKrbGd2G9sjb4rYDx4Xk61QKc,9607
|
|
@@ -113,6 +113,7 @@ annet/rulebook/common.py,sha256=zK1s2c5lc5HQbIlMUQ4HARQudXSgOYiZ_Sxc2I_tHqg,721
|
|
|
113
113
|
annet/rulebook/deploying.py,sha256=XV0XQvc3YvwM8SOgOQlc-fCW4bnjQg_1CTZkTwMp14A,2972
|
|
114
114
|
annet/rulebook/patching.py,sha256=ve_D-9lnWs6Qb_NwqOLUWX-b_tI_L3pwQ7cgUPnqndY,4970
|
|
115
115
|
annet/rulebook/arista/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
116
|
+
annet/rulebook/arista/aaa.py,sha256=7fBTwBnz9SOqYbwG8GBeEQTJG0e4uC4HkuZJeMG-kAY,2250
|
|
116
117
|
annet/rulebook/arista/iface.py,sha256=bgj6a3r__-OE6VyYbSfnD6ps2QJKyX028W7IFJww-UY,720
|
|
117
118
|
annet/rulebook/aruba/__init__.py,sha256=ILggeID6kNWcDBGzhXm_mebcfkuLSq5prBFU5DyPFs4,500
|
|
118
119
|
annet/rulebook/aruba/ap_env.py,sha256=5fUVLhXH4-0DAtv8t0yoqJUibaRMuzF8Q7mGFzNsEN8,4692
|
|
@@ -130,15 +131,14 @@ annet/rulebook/huawei/bgp.py,sha256=dN8T3-44ggGEapt4u4sT3bTn_dsoCbS5qdNeSQ8LSTs,
|
|
|
130
131
|
annet/rulebook/huawei/iface.py,sha256=DvLtQ7tfbDQWFmIYV4lxfih13Tdrt24L4-ZS29mCkuc,1126
|
|
131
132
|
annet/rulebook/huawei/misc.py,sha256=Rpwhtm42IgcueDq4K6VOzN2qORoIDYh42Jb7iWL8AII,14424
|
|
132
133
|
annet/rulebook/huawei/vlandb.py,sha256=B4BEUhZetjsNNhIJOp9cXtJSAYKMOgQucO8oAxSkRI0,4658
|
|
133
|
-
annet/rulebook/juniper/__init__.py,sha256=
|
|
134
|
+
annet/rulebook/juniper/__init__.py,sha256=FnVaO7FHYz7O1ExRE6igYX7OKMUgx5_siC-aoHOLx1s,5380
|
|
134
135
|
annet/rulebook/nexus/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
135
136
|
annet/rulebook/nexus/iface.py,sha256=aeog9iSGT2zZ78tsGlrRcfgfOv7yW3jLwryXqdeplRw,2923
|
|
136
|
-
annet/rulebook/ribbon/__init__.py,sha256=TRbkQVvk0-HxkUQW9-LmiG6XIfTZ-8t3SiaDemNCzK4,347
|
|
137
137
|
annet/rulebook/routeros/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
138
138
|
annet/rulebook/routeros/file.py,sha256=zK7RwBk1YaVoDSFSg1u7Pt8u0Fk3nhhu27aJRngemwc,137
|
|
139
139
|
annet/rulebook/texts/arista.deploy,sha256=OS9eFyJpEPztcOHkBwajw_RTJfTT7ivaMHfx4_HXaUg,792
|
|
140
|
-
annet/rulebook/texts/arista.order,sha256=
|
|
141
|
-
annet/rulebook/texts/arista.rul,sha256=
|
|
140
|
+
annet/rulebook/texts/arista.order,sha256=1jbKfF0USYi2b8V5qFlp4LjBAr3QGL9OkmoQqEK3PW8,1385
|
|
141
|
+
annet/rulebook/texts/arista.rul,sha256=fGZe1L-x75rKQuRC5oLJMv1gSt1tJ0htOXfKt-tho64,853
|
|
142
142
|
annet/rulebook/texts/aruba.deploy,sha256=hI432Bq-of_LMXuUflCu7eNSEFpx6qmj0KItEw6sgHI,841
|
|
143
143
|
annet/rulebook/texts/aruba.order,sha256=ZMakkn0EJ9zomgY6VssoptJImrHrUmYnCqivzLBFTRo,1158
|
|
144
144
|
annet/rulebook/texts/aruba.rul,sha256=zvGVpoYyJvMoL0fb1NQ8we_GCLZXno8nwWpZIOScLQQ,2584
|
|
@@ -149,8 +149,9 @@ annet/rulebook/texts/cisco.deploy,sha256=Hu0NkcGv3f1CWUrnbzI3eQOPXJxtH4NNOPRV68I
|
|
|
149
149
|
annet/rulebook/texts/cisco.order,sha256=OvNHMNqkCc-DN2dEjLCTKv_7ZhiaHt4q2X4Y4Z8dvR4,1901
|
|
150
150
|
annet/rulebook/texts/cisco.rul,sha256=jgL5_xnSwd_H4E8cx4gcneSvJC5W1zz6_BWSb64iuxI,3017
|
|
151
151
|
annet/rulebook/texts/huawei.deploy,sha256=uUsZCHUrC5Zyb_MePrR5svnE1QyGQlg7UxcKf00sJyg,10451
|
|
152
|
-
annet/rulebook/texts/huawei.order,sha256=
|
|
152
|
+
annet/rulebook/texts/huawei.order,sha256=_X2LmxD9FGcIcb8ziwc13Imy1tBtQJgafrQGmvHPZLM,10649
|
|
153
153
|
annet/rulebook/texts/huawei.rul,sha256=02Fi1RG4YYea2clHCluBuJDKNbT0hS9jtsk6_h6GK8k,12958
|
|
154
|
+
annet/rulebook/texts/juniper.order,sha256=yUid8mNGQtZSq_WUZisuBtKtdWSKu4_MPVRIHS1neN0,210
|
|
154
155
|
annet/rulebook/texts/juniper.rul,sha256=EmtrEJZesnmc2nXjURRD2G0WOq4zLluI_PNupKhSOJs,2654
|
|
155
156
|
annet/rulebook/texts/nexus.deploy,sha256=9YNAQEw7aQxtYZJbE-dMD6qJrTzs_G92Ifrx3Ft4Wn4,1120
|
|
156
157
|
annet/rulebook/texts/nexus.order,sha256=AZMKCD5Zf_mBOlE36aMDvO4w5rdbepTz1Dsyv7xP9Qs,1834
|
|
@@ -177,10 +178,10 @@ annet_generators/rpl_example/generator.py,sha256=zndIGfV4ZlTxPgAGYs7bMQvTc_tYScO
|
|
|
177
178
|
annet_generators/rpl_example/items.py,sha256=Ez1RF5YhcXNCusBmeApIjRL3rBlMazNZd29Gpw1_IsA,766
|
|
178
179
|
annet_generators/rpl_example/mesh.py,sha256=z_WgfDZZ4xnyh3cSf75igyH09hGvtexEVwy1gCD_DzA,288
|
|
179
180
|
annet_generators/rpl_example/route_policy.py,sha256=z6nPb0VDeQtKD1NIg9sFvmUxBD5tVs2frfNIuKdM-5c,2318
|
|
180
|
-
annet-1.0.
|
|
181
|
-
annet-1.0.
|
|
182
|
-
annet-1.0.
|
|
183
|
-
annet-1.0.
|
|
184
|
-
annet-1.0.
|
|
185
|
-
annet-1.0.
|
|
186
|
-
annet-1.0.
|
|
181
|
+
annet-1.1.0.dist-info/AUTHORS,sha256=rh3w5P6gEgqmuC-bw-HB68vBCr-yIBFhVL0PG4hguLs,878
|
|
182
|
+
annet-1.1.0.dist-info/LICENSE,sha256=yPxl7dno02Pw7gAcFPIFONzx_gapwDoPXsIsh6Y7lC0,1079
|
|
183
|
+
annet-1.1.0.dist-info/METADATA,sha256=sIW7Dw8SLb9IBLPciWoWXTUlq0lx6n_lRsFhTyzOtk0,822
|
|
184
|
+
annet-1.1.0.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
|
|
185
|
+
annet-1.1.0.dist-info/entry_points.txt,sha256=5lIaDGlGi3l6QQ2ry2jZaqViP5Lvt8AmsegdD0Uznck,192
|
|
186
|
+
annet-1.1.0.dist-info/top_level.txt,sha256=QsoTZBsUtwp_FEcmRwuN8QITBmLOZFqjssRfKilGbP8,23
|
|
187
|
+
annet-1.1.0.dist-info/RECORD,,
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
from annet.annlib.rulebook import common
|
|
2
|
-
from annet.annlib.types import Op
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
def default_diff(old, new, diff_pre, _pops=(Op.AFFECTED,)):
|
|
6
|
-
diff = common.default_diff(old, new, diff_pre, _pops)
|
|
7
|
-
return diff
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
def ordered_diff(old, new, diff_pre, _pops=(Op.AFFECTED,)):
|
|
11
|
-
diff = common.ordered_diff(old, new, diff_pre, _pops)
|
|
12
|
-
return diff
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|