annet 0.16.33__py3-none-any.whl → 0.16.34__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/v37/storage.py +38 -13
- annet/annlib/netdev/devdb/data/devdb.json +3 -1
- annet/annlib/rulebook/common.py +2 -2
- annet/bgp_models.py +12 -16
- annet/mesh/device_models.py +1 -2
- annet/mesh/executor.py +9 -0
- annet/mesh/registry.py +12 -12
- annet/rulebook/b4com/iface.py +42 -0
- annet/rulebook/texts/b4com.rul +9 -4
- {annet-0.16.33.dist-info → annet-0.16.34.dist-info}/METADATA +2 -2
- {annet-0.16.33.dist-info → annet-0.16.34.dist-info}/RECORD +16 -15
- {annet-0.16.33.dist-info → annet-0.16.34.dist-info}/AUTHORS +0 -0
- {annet-0.16.33.dist-info → annet-0.16.34.dist-info}/LICENSE +0 -0
- {annet-0.16.33.dist-info → annet-0.16.34.dist-info}/WHEEL +0 -0
- {annet-0.16.33.dist-info → annet-0.16.34.dist-info}/entry_points.txt +0 -0
- {annet-0.16.33.dist-info → annet-0.16.34.dist-info}/top_level.txt +0 -0
|
@@ -165,17 +165,28 @@ class NetboxStorageV37(Storage):
|
|
|
165
165
|
def _load_devices(self, query: NetboxQuery) -> List[api_models.Device]:
|
|
166
166
|
if not query.globs:
|
|
167
167
|
return []
|
|
168
|
+
devices = []
|
|
169
|
+
device_ids = set()
|
|
170
|
+
query_groups = parse_glob(query.globs)
|
|
168
171
|
if self.exact_host_filter:
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
172
|
+
name_ies = [_hostname_dot_hack(query) for query in query_groups.pop("name__ic", [])]
|
|
173
|
+
query_groups["name__ie"].extend(name_ies)
|
|
174
|
+
for grp, params in query_groups.items():
|
|
175
|
+
if not params:
|
|
176
|
+
continue
|
|
177
|
+
try:
|
|
178
|
+
new_devices = self.netbox.dcim_all_devices(**{grp: params}).results
|
|
179
|
+
except Exception as e:
|
|
180
|
+
# tag and site lookup returns 400 in case of unknown tag or site
|
|
181
|
+
if "is not one of the available choices" in str(e):
|
|
182
|
+
continue
|
|
183
|
+
raise
|
|
184
|
+
if grp == "name__ic":
|
|
185
|
+
new_devices = [device for device in new_devices if _match_query(query, device)]
|
|
186
|
+
for device in new_devices:
|
|
187
|
+
if device.id not in device_ids:
|
|
188
|
+
device_ids.add(device.id)
|
|
189
|
+
devices.extend(new_devices)
|
|
179
190
|
return devices
|
|
180
191
|
|
|
181
192
|
def _extend_interfaces(self, interfaces: List[models.Interface]) -> List[models.Interface]:
|
|
@@ -268,7 +279,7 @@ def _match_query(query: NetboxQuery, device_data: api_models.Device) -> bool:
|
|
|
268
279
|
return False
|
|
269
280
|
|
|
270
281
|
|
|
271
|
-
def _hostname_dot_hack(
|
|
282
|
+
def _hostname_dot_hack(raw_query: str) -> str:
|
|
272
283
|
# there is no proper way to lookup host by its hostname
|
|
273
284
|
# ie find "host" with fqdn "host.example.com"
|
|
274
285
|
# besides using name__ic (ie startswith)
|
|
@@ -280,9 +291,23 @@ def _hostname_dot_hack(netbox_query: NetboxQuery) -> NetboxQuery:
|
|
|
280
291
|
raw_query = raw_query + "."
|
|
281
292
|
return raw_query
|
|
282
293
|
|
|
283
|
-
raw_query = netbox_query.query
|
|
284
294
|
if isinstance(raw_query, list):
|
|
285
295
|
for i, name in enumerate(raw_query):
|
|
286
296
|
raw_query[i] = add_dot(name)
|
|
287
297
|
|
|
288
|
-
return
|
|
298
|
+
return raw_query
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
def parse_glob(globs: list[str]) -> dict[str, list[str]]:
|
|
302
|
+
query_groups: dict[str, list[str]] = {"tag": [], "site": [], "name__ic": []}
|
|
303
|
+
for q in globs:
|
|
304
|
+
if ":" in q:
|
|
305
|
+
glob_type, param = q.split(":", 2)
|
|
306
|
+
if glob_type not in query_groups:
|
|
307
|
+
raise Exception(f"unknown query type: '{glob_type}'")
|
|
308
|
+
if not param:
|
|
309
|
+
raise Exception(f"empty param for '{glob_type}'")
|
|
310
|
+
query_groups[glob_type].append(param)
|
|
311
|
+
else:
|
|
312
|
+
query_groups["name__ic"].append(q)
|
|
313
|
+
return query_groups
|
|
@@ -166,6 +166,8 @@
|
|
|
166
166
|
|
|
167
167
|
"B4com": "^[Bb]4com",
|
|
168
168
|
"B4com.CS2148P": "^[Bb]4com B4T-CS2148P.*",
|
|
169
|
+
"B4com.CS4100": "^[Bb]4com B4T-CS41.*",
|
|
170
|
+
"B4com.CS4132U": "^[Bb]4com B4T-CS4132U.*",
|
|
169
171
|
"B4com.CS4148Q": "^[Bb]4com B4T-CS4148Q.*",
|
|
170
|
-
"B4com.
|
|
172
|
+
"B4com.CS4164U": "^[Bb]4com B4T-CS4164U.*"
|
|
171
173
|
}
|
annet/annlib/rulebook/common.py
CHANGED
|
@@ -346,14 +346,14 @@ def apply(hw, do_commit, do_finalize, **_):
|
|
|
346
346
|
after.add_cmd(Command("exit"))
|
|
347
347
|
elif hw.B4com.CS2148P:
|
|
348
348
|
before.add_cmd(Command("conf t"))
|
|
349
|
-
after.add_cmd(Command("
|
|
349
|
+
after.add_cmd(Command("end"))
|
|
350
350
|
if do_finalize:
|
|
351
351
|
after.add_cmd(Command("write", timeout=40))
|
|
352
352
|
elif hw.B4com:
|
|
353
353
|
before.add_cmd(Command("conf t"))
|
|
354
|
-
after.add_cmd(Command("exit"))
|
|
355
354
|
if do_commit:
|
|
356
355
|
after.add_cmd(Command("commit"))
|
|
356
|
+
after.add_cmd(Command("end"))
|
|
357
357
|
if do_finalize:
|
|
358
358
|
after.add_cmd(Command("write", timeout=40))
|
|
359
359
|
elif hw.H3C:
|
annet/bgp_models.py
CHANGED
|
@@ -142,7 +142,6 @@ class Peer:
|
|
|
142
142
|
class Aggregate:
|
|
143
143
|
policy: str = ""
|
|
144
144
|
routes: tuple[str, ...] = () # "182.168.1.0/24",
|
|
145
|
-
export_policy: str = ""
|
|
146
145
|
as_path: str = ""
|
|
147
146
|
reference: str = ""
|
|
148
147
|
suppress: bool = False
|
|
@@ -290,21 +289,18 @@ def _used_policies(peer: Union[Peer, PeerGroup]) -> Iterable[str]:
|
|
|
290
289
|
|
|
291
290
|
|
|
292
291
|
def _used_redistribute_policies(opts: Union[GlobalOptions, VrfOptions]) -> Iterable[str]:
|
|
293
|
-
for
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
if
|
|
304
|
-
yield
|
|
305
|
-
for red in opts.l2vpn_evpn.redistributes:
|
|
306
|
-
if red.policy:
|
|
307
|
-
yield red.policy
|
|
292
|
+
for family_opts in (
|
|
293
|
+
opts.ipv4_unicast,
|
|
294
|
+
opts.ipv6_unicast,
|
|
295
|
+
opts.ipv4_labeled_unicast,
|
|
296
|
+
opts.ipv6_labeled_unicast,
|
|
297
|
+
opts.l2vpn_evpn,
|
|
298
|
+
):
|
|
299
|
+
for red in family_opts.redistributes:
|
|
300
|
+
if red.policy:
|
|
301
|
+
yield red.policy
|
|
302
|
+
if family_opts.aggregate and family_opts.aggregate.policy:
|
|
303
|
+
yield family_opts.aggregate.policy
|
|
308
304
|
|
|
309
305
|
|
|
310
306
|
def extract_policies(config: BgpConfig) -> Sequence[str]:
|
annet/mesh/device_models.py
CHANGED
|
@@ -8,7 +8,6 @@ from .peer_models import MeshPeerGroup
|
|
|
8
8
|
class Aggregate(BaseMeshModel):
|
|
9
9
|
policy: str
|
|
10
10
|
routes: Annotated[tuple[str, ...], Concat()]
|
|
11
|
-
export_policy: str
|
|
12
11
|
as_path: str
|
|
13
12
|
reference: str
|
|
14
13
|
suppress: bool
|
|
@@ -22,7 +21,7 @@ class FamilyOptions(BaseMeshModel):
|
|
|
22
21
|
super().__init__(**kwargs)
|
|
23
22
|
family: Family
|
|
24
23
|
vrf_name: str
|
|
25
|
-
multipath: int
|
|
24
|
+
multipath: int
|
|
26
25
|
global_multipath: int
|
|
27
26
|
aggregate: Annotated[Aggregate, Merge()]
|
|
28
27
|
redistributes: Annotated[tuple[Redistribute, ...], Concat()]
|
annet/mesh/executor.py
CHANGED
|
@@ -144,8 +144,17 @@ class MeshExecutor:
|
|
|
144
144
|
for rule in rules:
|
|
145
145
|
handler_name = self._handler_name(rule.handler)
|
|
146
146
|
if rule.direct_order:
|
|
147
|
+
if rule.name_right not in neigbors:
|
|
148
|
+
print(list(neigbors), flush=True)
|
|
149
|
+
raise ValueError(
|
|
150
|
+
f"Device `{device.fqdn}` has no neighbor `{rule.name_right}` required for `{handler_name}`. {list(neigbors)}",
|
|
151
|
+
)
|
|
147
152
|
neighbor_device = neigbors[rule.name_right]
|
|
148
153
|
else:
|
|
154
|
+
if rule.name_left not in neigbors:
|
|
155
|
+
raise ValueError(
|
|
156
|
+
f"Device `{device.fqdn}` has no neighbor `{rule.name_left}` required for `{handler_name}`",
|
|
157
|
+
)
|
|
149
158
|
neighbor_device = neigbors[rule.name_left]
|
|
150
159
|
all_connected_ports = [
|
|
151
160
|
(p1.name, p2.name)
|
annet/mesh/registry.py
CHANGED
|
@@ -208,11 +208,11 @@ class MeshRulesRegistry:
|
|
|
208
208
|
|
|
209
209
|
def lookup_direct(self, device: str, neighbors: list[str]) -> list[MatchedDirectPair]:
|
|
210
210
|
found = []
|
|
211
|
-
|
|
211
|
+
device_norm = self._normalize_host(device)
|
|
212
212
|
for neighbor in neighbors:
|
|
213
|
-
|
|
213
|
+
neighbor_norm = self._normalize_host(neighbor)
|
|
214
214
|
for rule in self.direct_rules:
|
|
215
|
-
if args := rule.matcher.match_pair(
|
|
215
|
+
if args := rule.matcher.match_pair(device_norm, neighbor_norm):
|
|
216
216
|
found.append(MatchedDirectPair(
|
|
217
217
|
handler=rule.handler,
|
|
218
218
|
port_processor=rule.port_processor,
|
|
@@ -222,7 +222,7 @@ class MeshRulesRegistry:
|
|
|
222
222
|
match_left=args[0],
|
|
223
223
|
match_right=args[1],
|
|
224
224
|
))
|
|
225
|
-
if args := rule.matcher.match_pair(
|
|
225
|
+
if args := rule.matcher.match_pair(neighbor_norm, device_norm):
|
|
226
226
|
found.append(MatchedDirectPair(
|
|
227
227
|
handler=rule.handler,
|
|
228
228
|
port_processor=rule.port_processor,
|
|
@@ -238,11 +238,11 @@ class MeshRulesRegistry:
|
|
|
238
238
|
|
|
239
239
|
def lookup_indirect(self, device: str, devices: list[str]) -> list[MatchedIndirectPair]:
|
|
240
240
|
found = []
|
|
241
|
-
|
|
241
|
+
device_norm = self._normalize_host(device)
|
|
242
242
|
for other_device in devices:
|
|
243
|
-
|
|
243
|
+
other_device_norm = self._normalize_host(other_device)
|
|
244
244
|
for rule in self.indirect_rules:
|
|
245
|
-
if args := rule.matcher.match_pair(
|
|
245
|
+
if args := rule.matcher.match_pair(device_norm, other_device_norm):
|
|
246
246
|
found.append(MatchedIndirectPair(
|
|
247
247
|
handler=rule.handler,
|
|
248
248
|
direct_order=True,
|
|
@@ -251,7 +251,7 @@ class MeshRulesRegistry:
|
|
|
251
251
|
match_left=args[0],
|
|
252
252
|
match_right=args[1],
|
|
253
253
|
))
|
|
254
|
-
if args := rule.matcher.match_pair(
|
|
254
|
+
if args := rule.matcher.match_pair(other_device_norm, device_norm):
|
|
255
255
|
found.append(MatchedIndirectPair(
|
|
256
256
|
handler=rule.handler,
|
|
257
257
|
direct_order=False,
|
|
@@ -266,9 +266,9 @@ class MeshRulesRegistry:
|
|
|
266
266
|
|
|
267
267
|
def lookup_virtual(self, device: str) -> list[MatchedVirtualPair]:
|
|
268
268
|
found = []
|
|
269
|
-
|
|
269
|
+
device_norm = self._normalize_host(device)
|
|
270
270
|
for rule in self.virtual_rules:
|
|
271
|
-
if args := rule.matcher.match_one(
|
|
271
|
+
if args := rule.matcher.match_one(device_norm):
|
|
272
272
|
found.append(MatchedVirtualPair(
|
|
273
273
|
handler=rule.handler,
|
|
274
274
|
match=args,
|
|
@@ -280,9 +280,9 @@ class MeshRulesRegistry:
|
|
|
280
280
|
|
|
281
281
|
def lookup_global(self, device: str) -> list[MatchedGlobal]:
|
|
282
282
|
found = []
|
|
283
|
-
|
|
283
|
+
device_norm = self._normalize_host(device)
|
|
284
284
|
for rule in self.global_rules:
|
|
285
|
-
if args := rule.matcher.match_one(
|
|
285
|
+
if args := rule.matcher.match_one(device_norm):
|
|
286
286
|
found.append(MatchedGlobal(
|
|
287
287
|
handler=rule.handler,
|
|
288
288
|
match=args,
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
from annet.annlib.types import Op
|
|
2
|
+
|
|
3
|
+
from annet.rulebook import common
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def mtu(rule, key, diff, **kwargs):
|
|
7
|
+
"""
|
|
8
|
+
Удаляем mtu без указания значения
|
|
9
|
+
"""
|
|
10
|
+
if diff[Op.REMOVED]:
|
|
11
|
+
yield (False, "no mtu", None)
|
|
12
|
+
elif diff[Op.ADDED]:
|
|
13
|
+
yield from common.default(rule, key, diff, **kwargs)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def sflow(rule, key, diff, **kwargs):
|
|
17
|
+
"""
|
|
18
|
+
Команда sflow sampling-rate * direction ingress max-header-size *
|
|
19
|
+
сносится без указания sampling-rate и max-header-size
|
|
20
|
+
"""
|
|
21
|
+
result = common.default(rule, key, diff, **kwargs)
|
|
22
|
+
for op, cmd, ch in result:
|
|
23
|
+
if diff[Op.REMOVED]:
|
|
24
|
+
if "ingress" in diff[Op.REMOVED][0]["row"]:
|
|
25
|
+
yield (op, "no sflow sampling-rate direction ingress", ch)
|
|
26
|
+
elif "egress" in diff[Op.REMOVED][0]["row"]:
|
|
27
|
+
yield (op, "no sflow sampling-rate direction egress", ch)
|
|
28
|
+
else:
|
|
29
|
+
yield (op, cmd, ch)
|
|
30
|
+
return result
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def lldp(rule, key, diff, **kwargs):
|
|
34
|
+
"""
|
|
35
|
+
Не удаляем все что начинается с set, т.к. set перезаписывает предыдущий конфиг
|
|
36
|
+
"""
|
|
37
|
+
result = common.default(rule, key, diff, **kwargs)
|
|
38
|
+
for op, cmd, ch in result:
|
|
39
|
+
if diff[Op.REMOVED] and "set lldp" in cmd:
|
|
40
|
+
pass
|
|
41
|
+
else:
|
|
42
|
+
yield (op, cmd, ch)
|
annet/rulebook/texts/b4com.rul
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Операторы:
|
|
2
|
-
# * Один аргумент в
|
|
3
|
-
# ~ Несколько аргументов (минимум один) в
|
|
2
|
+
# * Один аргумент в no
|
|
3
|
+
# ~ Несколько аргументов (минимум один) в no
|
|
4
4
|
#
|
|
5
5
|
# Параметры:
|
|
6
6
|
# %global Команда действует на любом уровне ниже
|
|
@@ -11,8 +11,13 @@
|
|
|
11
11
|
# Сделано в основном для того чтобы генерировать специальные команды для наливки
|
|
12
12
|
# -----
|
|
13
13
|
# Physical
|
|
14
|
+
sflow *
|
|
15
|
+
|
|
14
16
|
interface */(ce|xe)[0-9\/]+$/ %logic=common.permanent %diff_logic=cisco.iface.diff
|
|
15
17
|
ipv6 address *
|
|
16
|
-
mtu *
|
|
18
|
+
mtu * %logic=b4com.iface.mtu
|
|
19
|
+
sflow * %logic=b4com.iface.sflow
|
|
17
20
|
lldp-agent
|
|
18
|
-
|
|
21
|
+
~ %global %logic=b4com.iface.lldp
|
|
22
|
+
!dcbx *
|
|
23
|
+
!exit
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: annet
|
|
3
|
-
Version: 0.16.
|
|
3
|
+
Version: 0.16.34
|
|
4
4
|
Summary: annet
|
|
5
5
|
Home-page: https://github.com/annetutil/annet
|
|
6
6
|
License: MIT
|
|
@@ -23,7 +23,7 @@ Requires-Dist: yarl>=1.8.2
|
|
|
23
23
|
Requires-Dist: adaptix==3.0.0b7
|
|
24
24
|
Requires-Dist: dataclass-rest==0.4
|
|
25
25
|
Provides-Extra: netbox
|
|
26
|
-
Requires-Dist: annetbox[sync]>=0.1.
|
|
26
|
+
Requires-Dist: annetbox[sync]>=0.1.12; extra == "netbox"
|
|
27
27
|
Dynamic: home-page
|
|
28
28
|
Dynamic: license
|
|
29
29
|
Dynamic: provides-extra
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
annet/__init__.py,sha256=W8kkZ3Axu-6VJwgQ0cn4UeOVNy6jab0cqgHKLQny1D0,2141
|
|
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=M2gtOJMsua8SlUySc57VtG71-TmydxP1bthQEcUVpNo,9528
|
|
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=-Lghz3PtWCBU8Ohrp0KKQcmm1AUZtN0EnOaZ6IQgCQI,5105
|
|
@@ -40,7 +40,7 @@ annet/adapters/netbox/common/storage_opts.py,sha256=5tt6wxUUJTIzNbOVXMnYBwZedNAI
|
|
|
40
40
|
annet/adapters/netbox/v24/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
41
41
|
annet/adapters/netbox/v24/storage.py,sha256=THI592VLx3ehixsPZQ1Ko3mYIAZQbnDY-toIziqBbL8,6005
|
|
42
42
|
annet/adapters/netbox/v37/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
43
|
-
annet/adapters/netbox/v37/storage.py,sha256=
|
|
43
|
+
annet/adapters/netbox/v37/storage.py,sha256=fBs7bUyk-3KnGpuygf8skPwHZfzxPJmCVCpfzifRrYo,11458
|
|
44
44
|
annet/annlib/__init__.py,sha256=fT1l4xV5fqqg8HPw9HqmZVN2qwS8i6X1aIm2zGDjxKY,252
|
|
45
45
|
annet/annlib/command.py,sha256=uuBddMQphtn8P5MO5kzIa8_QrtMns-k05VeKv1bcAuA,1043
|
|
46
46
|
annet/annlib/diff.py,sha256=MZ6eQAU3cadQp8KaSE6uAYFtcfMDCIe_eNuVROnYkCk,4496
|
|
@@ -55,7 +55,7 @@ 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=DBl8iU2K_tydteB_a8mXUlgrv_Na3UXSJschuhyjsqs,6284
|
|
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
|
|
@@ -66,7 +66,7 @@ annet/annlib/rbparser/ordering.py,sha256=DiKqyY8Khz-5MTxNF1GSNtZgtyKwT3YYCXpahIP
|
|
|
66
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=hqwmmNofm5q2f-hV2usMY-IPMeiANLth28tZcRBYJTw,16640
|
|
70
70
|
annet/api/__init__.py,sha256=WGpVMfIxVy9F_jH6nqHSQypEEcsSNa9yF2WFEwhUVwI,34156
|
|
71
71
|
annet/configs/context.yml,sha256=RVLrKLIHpCty7AGwOnmqf7Uu0iZQCn-AjYhophDJer8,259
|
|
72
72
|
annet/configs/logging.yaml,sha256=EUagfir99QqA73Scc3k7sfQccbU3E1SvEQdyhLFtCl4,997
|
|
@@ -83,13 +83,13 @@ annet/generators/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG
|
|
|
83
83
|
annet/generators/common/initial.py,sha256=qYBxXFhyOPy34cxc6hsIXseod-lYCmmbuNHpM0uteY0,1244
|
|
84
84
|
annet/mesh/__init__.py,sha256=lcgdnBIxc2MAN7Er1bcErEKPqrjWO4uIp_1FldMXTYg,557
|
|
85
85
|
annet/mesh/basemodel.py,sha256=E6NTOneiMDwB1NCpjDRECoaeQ0f3n_fmTLnKTrSHTU4,4917
|
|
86
|
-
annet/mesh/device_models.py,sha256=
|
|
87
|
-
annet/mesh/executor.py,sha256=
|
|
86
|
+
annet/mesh/device_models.py,sha256=aFbwVWNSDBcph_Kvv6qZT-uUz0Tbg3z45EvP4i1z2ao,3600
|
|
87
|
+
annet/mesh/executor.py,sha256=6NBi7KBZzKf_92TgxypkoBN0WhZt1egXx0qALzo9Cq8,17497
|
|
88
88
|
annet/mesh/match_args.py,sha256=CR3kdIV9NGtyk9E2JbcOQ3TRuYEryTWP3m2yCo2VCWg,5751
|
|
89
89
|
annet/mesh/models_converter.py,sha256=3q2zs7K8S3pfYSUKKRdtl5CJGbeg4TtYxofAVs_MBsk,3085
|
|
90
90
|
annet/mesh/peer_models.py,sha256=9vn5ENiEZqOZFRFSOJReT8E3E2GzBte628mkmS3cplI,2770
|
|
91
91
|
annet/mesh/port_processor.py,sha256=RHiMS5W8qoDkTKiarQ748bcr8bNx4g_R4Y4vZg2k4TU,478
|
|
92
|
-
annet/mesh/registry.py,sha256=
|
|
92
|
+
annet/mesh/registry.py,sha256=xmWF7yxWXmwqX2_jyMAKrbGd2G9sjb4rYDx4Xk61QKc,9607
|
|
93
93
|
annet/rpl/__init__.py,sha256=0kcIktE3AmS0rlm9xzVDf53xk08OeZXgD-6ZLCt_KCs,731
|
|
94
94
|
annet/rpl/action.py,sha256=PY6W66j908RuqQ1_ioxayqVN-70rxDk5Z59EGHtxI98,1246
|
|
95
95
|
annet/rpl/condition.py,sha256=MJri4MbWtPkLHIsLMAtsIEF7e8IAS9dIImjmJs5vS5U,3418
|
|
@@ -118,6 +118,7 @@ annet/rulebook/aruba/ap_env.py,sha256=5fUVLhXH4-0DAtv8t0yoqJUibaRMuzF8Q7mGFzNsEN
|
|
|
118
118
|
annet/rulebook/aruba/misc.py,sha256=O0p_wsR07gtB8rm1eJvJ7VYnGm5T8Uau_SVKR9FVInI,234
|
|
119
119
|
annet/rulebook/b4com/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
120
120
|
annet/rulebook/b4com/file.py,sha256=zK7RwBk1YaVoDSFSg1u7Pt8u0Fk3nhhu27aJRngemwc,137
|
|
121
|
+
annet/rulebook/b4com/iface.py,sha256=0MXq01fhgd0ZxrS99TMxEP9qqIW2ofadsIBthCZVPTc,1392
|
|
121
122
|
annet/rulebook/cisco/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
122
123
|
annet/rulebook/cisco/iface.py,sha256=WISkzjp_G7WKPpg098FCIm4b7ipOxtRLOQbu-7gMUL0,1792
|
|
123
124
|
annet/rulebook/cisco/misc.py,sha256=zgKdWGmjRYmvq58dh7Lbn7ofwSYZoISgXsUh5lkGKF8,2318
|
|
@@ -142,7 +143,7 @@ annet/rulebook/texts/aruba.order,sha256=ZMakkn0EJ9zomgY6VssoptJImrHrUmYnCqivzLBF
|
|
|
142
143
|
annet/rulebook/texts/aruba.rul,sha256=zvGVpoYyJvMoL0fb1NQ8we_GCLZXno8nwWpZIOScLQQ,2584
|
|
143
144
|
annet/rulebook/texts/b4com.deploy,sha256=SVX8-yLHM90tJC4M-ekpGuGM1aQZW3euSGyg67l--R0,781
|
|
144
145
|
annet/rulebook/texts/b4com.order,sha256=G3aToAIHHzKzDCM3q7_lyr9wJvuVOXVbVvF3wm5PiTE,707
|
|
145
|
-
annet/rulebook/texts/b4com.rul,sha256=
|
|
146
|
+
annet/rulebook/texts/b4com.rul,sha256=OiQroBySk33he1YNN3jOn5sGL_WDBJEejDI6F7jIWo0,1224
|
|
146
147
|
annet/rulebook/texts/cisco.deploy,sha256=Hu0NkcGv3f1CWUrnbzI3eQOPXJxtH4NNOPRV68IrW4U,1226
|
|
147
148
|
annet/rulebook/texts/cisco.order,sha256=OvNHMNqkCc-DN2dEjLCTKv_7ZhiaHt4q2X4Y4Z8dvR4,1901
|
|
148
149
|
annet/rulebook/texts/cisco.rul,sha256=jgL5_xnSwd_H4E8cx4gcneSvJC5W1zz6_BWSb64iuxI,3017
|
|
@@ -175,10 +176,10 @@ annet_generators/rpl_example/generator.py,sha256=zndIGfV4ZlTxPgAGYs7bMQvTc_tYScO
|
|
|
175
176
|
annet_generators/rpl_example/items.py,sha256=Ez1RF5YhcXNCusBmeApIjRL3rBlMazNZd29Gpw1_IsA,766
|
|
176
177
|
annet_generators/rpl_example/mesh.py,sha256=z_WgfDZZ4xnyh3cSf75igyH09hGvtexEVwy1gCD_DzA,288
|
|
177
178
|
annet_generators/rpl_example/route_policy.py,sha256=z6nPb0VDeQtKD1NIg9sFvmUxBD5tVs2frfNIuKdM-5c,2318
|
|
178
|
-
annet-0.16.
|
|
179
|
-
annet-0.16.
|
|
180
|
-
annet-0.16.
|
|
181
|
-
annet-0.16.
|
|
182
|
-
annet-0.16.
|
|
183
|
-
annet-0.16.
|
|
184
|
-
annet-0.16.
|
|
179
|
+
annet-0.16.34.dist-info/AUTHORS,sha256=rh3w5P6gEgqmuC-bw-HB68vBCr-yIBFhVL0PG4hguLs,878
|
|
180
|
+
annet-0.16.34.dist-info/LICENSE,sha256=yPxl7dno02Pw7gAcFPIFONzx_gapwDoPXsIsh6Y7lC0,1079
|
|
181
|
+
annet-0.16.34.dist-info/METADATA,sha256=C2fqE9miXLSOMaYpyOLpD0LfEOsFpbFvndCqLqdOEhw,854
|
|
182
|
+
annet-0.16.34.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
|
183
|
+
annet-0.16.34.dist-info/entry_points.txt,sha256=5lIaDGlGi3l6QQ2ry2jZaqViP5Lvt8AmsegdD0Uznck,192
|
|
184
|
+
annet-0.16.34.dist-info/top_level.txt,sha256=QsoTZBsUtwp_FEcmRwuN8QITBmLOZFqjssRfKilGbP8,23
|
|
185
|
+
annet-0.16.34.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|