annet 0.16.31__tar.gz → 0.16.32__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.

Files changed (191) hide show
  1. {annet-0.16.31/annet.egg-info → annet-0.16.32}/PKG-INFO +1 -1
  2. {annet-0.16.31 → annet-0.16.32}/annet/adapters/netbox/common/models.py +1 -1
  3. {annet-0.16.31 → annet-0.16.32}/annet/bgp_models.py +8 -2
  4. {annet-0.16.31 → annet-0.16.32}/annet/mesh/device_models.py +4 -0
  5. {annet-0.16.31 → annet-0.16.32}/annet/mesh/peer_models.py +3 -3
  6. {annet-0.16.31 → annet-0.16.32}/annet/rpl_generators/cumulus_frr.py +1 -1
  7. {annet-0.16.31 → annet-0.16.32}/annet/rpl_generators/prefix_lists.py +2 -2
  8. {annet-0.16.31 → annet-0.16.32/annet.egg-info}/PKG-INFO +1 -1
  9. {annet-0.16.31 → annet-0.16.32}/AUTHORS +0 -0
  10. {annet-0.16.31 → annet-0.16.32}/LICENSE +0 -0
  11. {annet-0.16.31 → annet-0.16.32}/MANIFEST.in +0 -0
  12. {annet-0.16.31 → annet-0.16.32}/README.md +0 -0
  13. {annet-0.16.31 → annet-0.16.32}/annet/__init__.py +0 -0
  14. {annet-0.16.31 → annet-0.16.32}/annet/adapters/__init__.py +0 -0
  15. {annet-0.16.31 → annet-0.16.32}/annet/adapters/fetchers/__init__.py +0 -0
  16. {annet-0.16.31 → annet-0.16.32}/annet/adapters/fetchers/stub/__init__.py +0 -0
  17. {annet-0.16.31 → annet-0.16.32}/annet/adapters/fetchers/stub/fetcher.py +0 -0
  18. {annet-0.16.31 → annet-0.16.32}/annet/adapters/file/__init__.py +0 -0
  19. {annet-0.16.31 → annet-0.16.32}/annet/adapters/file/provider.py +0 -0
  20. {annet-0.16.31 → annet-0.16.32}/annet/adapters/netbox/__init__.py +0 -0
  21. {annet-0.16.31 → annet-0.16.32}/annet/adapters/netbox/common/__init__.py +0 -0
  22. {annet-0.16.31 → annet-0.16.32}/annet/adapters/netbox/common/client.py +0 -0
  23. {annet-0.16.31 → annet-0.16.32}/annet/adapters/netbox/common/manufacturer.py +0 -0
  24. {annet-0.16.31 → annet-0.16.32}/annet/adapters/netbox/common/query.py +0 -0
  25. {annet-0.16.31 → annet-0.16.32}/annet/adapters/netbox/common/status_client.py +0 -0
  26. {annet-0.16.31 → annet-0.16.32}/annet/adapters/netbox/common/storage_opts.py +0 -0
  27. {annet-0.16.31 → annet-0.16.32}/annet/adapters/netbox/provider.py +0 -0
  28. {annet-0.16.31 → annet-0.16.32}/annet/adapters/netbox/v24/__init__.py +0 -0
  29. {annet-0.16.31 → annet-0.16.32}/annet/adapters/netbox/v24/storage.py +0 -0
  30. {annet-0.16.31 → annet-0.16.32}/annet/adapters/netbox/v37/__init__.py +0 -0
  31. {annet-0.16.31 → annet-0.16.32}/annet/adapters/netbox/v37/storage.py +0 -0
  32. {annet-0.16.31 → annet-0.16.32}/annet/annet.py +0 -0
  33. {annet-0.16.31 → annet-0.16.32}/annet/annlib/__init__.py +0 -0
  34. {annet-0.16.31 → annet-0.16.32}/annet/annlib/command.py +0 -0
  35. {annet-0.16.31 → annet-0.16.32}/annet/annlib/diff.py +0 -0
  36. {annet-0.16.31 → annet-0.16.32}/annet/annlib/errors.py +0 -0
  37. {annet-0.16.31 → annet-0.16.32}/annet/annlib/filter_acl.py +0 -0
  38. {annet-0.16.31 → annet-0.16.32}/annet/annlib/jsontools.py +0 -0
  39. {annet-0.16.31 → annet-0.16.32}/annet/annlib/lib.py +0 -0
  40. {annet-0.16.31 → annet-0.16.32}/annet/annlib/netdev/__init__.py +0 -0
  41. {annet-0.16.31 → annet-0.16.32}/annet/annlib/netdev/db.py +0 -0
  42. {annet-0.16.31 → annet-0.16.32}/annet/annlib/netdev/devdb/__init__.py +0 -0
  43. {annet-0.16.31 → annet-0.16.32}/annet/annlib/netdev/devdb/data/devdb.json +0 -0
  44. {annet-0.16.31 → annet-0.16.32}/annet/annlib/netdev/views/__init__.py +0 -0
  45. {annet-0.16.31 → annet-0.16.32}/annet/annlib/netdev/views/dump.py +0 -0
  46. {annet-0.16.31 → annet-0.16.32}/annet/annlib/netdev/views/hardware.py +0 -0
  47. {annet-0.16.31 → annet-0.16.32}/annet/annlib/output.py +0 -0
  48. {annet-0.16.31 → annet-0.16.32}/annet/annlib/patching.py +0 -0
  49. {annet-0.16.31 → annet-0.16.32}/annet/annlib/rbparser/__init__.py +0 -0
  50. {annet-0.16.31 → annet-0.16.32}/annet/annlib/rbparser/acl.py +0 -0
  51. {annet-0.16.31 → annet-0.16.32}/annet/annlib/rbparser/deploying.py +0 -0
  52. {annet-0.16.31 → annet-0.16.32}/annet/annlib/rbparser/ordering.py +0 -0
  53. {annet-0.16.31 → annet-0.16.32}/annet/annlib/rbparser/platform.py +0 -0
  54. {annet-0.16.31 → annet-0.16.32}/annet/annlib/rbparser/syntax.py +0 -0
  55. {annet-0.16.31 → annet-0.16.32}/annet/annlib/rulebook/__init__.py +0 -0
  56. {annet-0.16.31 → annet-0.16.32}/annet/annlib/rulebook/common.py +0 -0
  57. {annet-0.16.31 → annet-0.16.32}/annet/annlib/tabparser.py +0 -0
  58. {annet-0.16.31 → annet-0.16.32}/annet/annlib/types.py +0 -0
  59. {annet-0.16.31 → annet-0.16.32}/annet/api/__init__.py +0 -0
  60. {annet-0.16.31 → annet-0.16.32}/annet/argparse.py +0 -0
  61. {annet-0.16.31 → annet-0.16.32}/annet/cli.py +0 -0
  62. {annet-0.16.31 → annet-0.16.32}/annet/cli_args.py +0 -0
  63. {annet-0.16.31 → annet-0.16.32}/annet/configs/context.yml +0 -0
  64. {annet-0.16.31 → annet-0.16.32}/annet/configs/logging.yaml +0 -0
  65. {annet-0.16.31 → annet-0.16.32}/annet/connectors.py +0 -0
  66. {annet-0.16.31 → annet-0.16.32}/annet/deploy.py +0 -0
  67. {annet-0.16.31 → annet-0.16.32}/annet/diff.py +0 -0
  68. {annet-0.16.31 → annet-0.16.32}/annet/executor.py +0 -0
  69. {annet-0.16.31 → annet-0.16.32}/annet/filtering.py +0 -0
  70. {annet-0.16.31 → annet-0.16.32}/annet/gen.py +0 -0
  71. {annet-0.16.31 → annet-0.16.32}/annet/generators/__init__.py +0 -0
  72. {annet-0.16.31 → annet-0.16.32}/annet/generators/base.py +0 -0
  73. {annet-0.16.31 → annet-0.16.32}/annet/generators/common/__init__.py +0 -0
  74. {annet-0.16.31 → annet-0.16.32}/annet/generators/common/initial.py +0 -0
  75. {annet-0.16.31 → annet-0.16.32}/annet/generators/entire.py +0 -0
  76. {annet-0.16.31 → annet-0.16.32}/annet/generators/exceptions.py +0 -0
  77. {annet-0.16.31 → annet-0.16.32}/annet/generators/jsonfragment.py +0 -0
  78. {annet-0.16.31 → annet-0.16.32}/annet/generators/partial.py +0 -0
  79. {annet-0.16.31 → annet-0.16.32}/annet/generators/perf.py +0 -0
  80. {annet-0.16.31 → annet-0.16.32}/annet/generators/ref.py +0 -0
  81. {annet-0.16.31 → annet-0.16.32}/annet/generators/result.py +0 -0
  82. {annet-0.16.31 → annet-0.16.32}/annet/hardware.py +0 -0
  83. {annet-0.16.31 → annet-0.16.32}/annet/implicit.py +0 -0
  84. {annet-0.16.31 → annet-0.16.32}/annet/lib.py +0 -0
  85. {annet-0.16.31 → annet-0.16.32}/annet/mesh/__init__.py +0 -0
  86. {annet-0.16.31 → annet-0.16.32}/annet/mesh/basemodel.py +0 -0
  87. {annet-0.16.31 → annet-0.16.32}/annet/mesh/executor.py +0 -0
  88. {annet-0.16.31 → annet-0.16.32}/annet/mesh/match_args.py +0 -0
  89. {annet-0.16.31 → annet-0.16.32}/annet/mesh/models_converter.py +0 -0
  90. {annet-0.16.31 → annet-0.16.32}/annet/mesh/port_processor.py +0 -0
  91. {annet-0.16.31 → annet-0.16.32}/annet/mesh/registry.py +0 -0
  92. {annet-0.16.31 → annet-0.16.32}/annet/output.py +0 -0
  93. {annet-0.16.31 → annet-0.16.32}/annet/parallel.py +0 -0
  94. {annet-0.16.31 → annet-0.16.32}/annet/patching.py +0 -0
  95. {annet-0.16.31 → annet-0.16.32}/annet/reference.py +0 -0
  96. {annet-0.16.31 → annet-0.16.32}/annet/rpl/__init__.py +0 -0
  97. {annet-0.16.31 → annet-0.16.32}/annet/rpl/action.py +0 -0
  98. {annet-0.16.31 → annet-0.16.32}/annet/rpl/condition.py +0 -0
  99. {annet-0.16.31 → annet-0.16.32}/annet/rpl/match_builder.py +0 -0
  100. {annet-0.16.31 → annet-0.16.32}/annet/rpl/policy.py +0 -0
  101. {annet-0.16.31 → annet-0.16.32}/annet/rpl/result.py +0 -0
  102. {annet-0.16.31 → annet-0.16.32}/annet/rpl/routemap.py +0 -0
  103. {annet-0.16.31 → annet-0.16.32}/annet/rpl/statement_builder.py +0 -0
  104. {annet-0.16.31 → annet-0.16.32}/annet/rpl_generators/__init__.py +0 -0
  105. {annet-0.16.31 → annet-0.16.32}/annet/rpl_generators/aspath.py +0 -0
  106. {annet-0.16.31 → annet-0.16.32}/annet/rpl_generators/community.py +0 -0
  107. {annet-0.16.31 → annet-0.16.32}/annet/rpl_generators/entities.py +0 -0
  108. {annet-0.16.31 → annet-0.16.32}/annet/rpl_generators/execute.py +0 -0
  109. {annet-0.16.31 → annet-0.16.32}/annet/rpl_generators/policy.py +0 -0
  110. {annet-0.16.31 → annet-0.16.32}/annet/rpl_generators/rd.py +0 -0
  111. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/__init__.py +0 -0
  112. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/arista/__init__.py +0 -0
  113. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/arista/iface.py +0 -0
  114. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/aruba/__init__.py +0 -0
  115. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/aruba/ap_env.py +0 -0
  116. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/aruba/misc.py +0 -0
  117. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/b4com/__init__.py +0 -0
  118. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/b4com/file.py +0 -0
  119. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/cisco/__init__.py +0 -0
  120. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/cisco/iface.py +0 -0
  121. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/cisco/misc.py +0 -0
  122. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/cisco/vlandb.py +0 -0
  123. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/common.py +0 -0
  124. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/deploying.py +0 -0
  125. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/huawei/__init__.py +0 -0
  126. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/huawei/aaa.py +0 -0
  127. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/huawei/bgp.py +0 -0
  128. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/huawei/iface.py +0 -0
  129. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/huawei/misc.py +0 -0
  130. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/huawei/vlandb.py +0 -0
  131. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/juniper/__init__.py +0 -0
  132. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/nexus/__init__.py +0 -0
  133. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/nexus/iface.py +0 -0
  134. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/patching.py +0 -0
  135. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/ribbon/__init__.py +0 -0
  136. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/routeros/__init__.py +0 -0
  137. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/routeros/file.py +0 -0
  138. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/texts/arista.deploy +0 -0
  139. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/texts/arista.order +0 -0
  140. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/texts/arista.rul +0 -0
  141. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/texts/aruba.deploy +0 -0
  142. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/texts/aruba.order +0 -0
  143. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/texts/aruba.rul +0 -0
  144. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/texts/b4com.deploy +0 -0
  145. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/texts/b4com.order +0 -0
  146. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/texts/b4com.rul +0 -0
  147. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/texts/cisco.deploy +0 -0
  148. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/texts/cisco.order +0 -0
  149. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/texts/cisco.rul +0 -0
  150. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/texts/huawei.deploy +0 -0
  151. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/texts/huawei.order +0 -0
  152. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/texts/huawei.rul +0 -0
  153. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/texts/juniper.rul +0 -0
  154. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/texts/nexus.deploy +0 -0
  155. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/texts/nexus.order +0 -0
  156. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/texts/nexus.rul +0 -0
  157. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/texts/nokia.rul +0 -0
  158. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/texts/optixtrans.deploy +0 -0
  159. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/texts/optixtrans.order +0 -0
  160. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/texts/optixtrans.rul +0 -0
  161. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/texts/pc.deploy +0 -0
  162. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/texts/pc.order +0 -0
  163. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/texts/pc.rul +0 -0
  164. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/texts/ribbon.deploy +0 -0
  165. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/texts/ribbon.rul +0 -0
  166. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/texts/routeros.order +0 -0
  167. {annet-0.16.31 → annet-0.16.32}/annet/rulebook/texts/routeros.rul +0 -0
  168. {annet-0.16.31 → annet-0.16.32}/annet/storage.py +0 -0
  169. {annet-0.16.31 → annet-0.16.32}/annet/tabparser.py +0 -0
  170. {annet-0.16.31 → annet-0.16.32}/annet/text_term_format.py +0 -0
  171. {annet-0.16.31 → annet-0.16.32}/annet/tracing.py +0 -0
  172. {annet-0.16.31 → annet-0.16.32}/annet/types.py +0 -0
  173. {annet-0.16.31 → annet-0.16.32}/annet.egg-info/SOURCES.txt +0 -0
  174. {annet-0.16.31 → annet-0.16.32}/annet.egg-info/dependency_links.txt +0 -0
  175. {annet-0.16.31 → annet-0.16.32}/annet.egg-info/entry_points.txt +0 -0
  176. {annet-0.16.31 → annet-0.16.32}/annet.egg-info/requires.txt +0 -0
  177. {annet-0.16.31 → annet-0.16.32}/annet.egg-info/top_level.txt +0 -0
  178. {annet-0.16.31 → annet-0.16.32}/annet_generators/__init__.py +0 -0
  179. {annet-0.16.31 → annet-0.16.32}/annet_generators/example/__init__.py +0 -0
  180. {annet-0.16.31 → annet-0.16.32}/annet_generators/example/lldp.py +0 -0
  181. {annet-0.16.31 → annet-0.16.32}/annet_generators/mesh_example/__init__.py +0 -0
  182. {annet-0.16.31 → annet-0.16.32}/annet_generators/mesh_example/bgp.py +0 -0
  183. {annet-0.16.31 → annet-0.16.32}/annet_generators/mesh_example/mesh_logic.py +0 -0
  184. {annet-0.16.31 → annet-0.16.32}/annet_generators/rpl_example/__init__.py +0 -0
  185. {annet-0.16.31 → annet-0.16.32}/annet_generators/rpl_example/generator.py +0 -0
  186. {annet-0.16.31 → annet-0.16.32}/annet_generators/rpl_example/items.py +0 -0
  187. {annet-0.16.31 → annet-0.16.32}/annet_generators/rpl_example/mesh.py +0 -0
  188. {annet-0.16.31 → annet-0.16.32}/annet_generators/rpl_example/route_policy.py +0 -0
  189. {annet-0.16.31 → annet-0.16.32}/requirements.txt +0 -0
  190. {annet-0.16.31 → annet-0.16.32}/setup.cfg +0 -0
  191. {annet-0.16.31 → annet-0.16.32}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: annet
3
- Version: 0.16.31
3
+ Version: 0.16.32
4
4
  Summary: annet
5
5
  Home-page: https://github.com/annetutil/annet
6
6
  License: MIT
@@ -214,7 +214,7 @@ class NetboxDevice(Entity):
214
214
  return type(self) is type(other) and self.url == other.url
215
215
 
216
216
  def is_pc(self) -> bool:
217
- return self.device_type.manufacturer.name in ("Mellanox", "Moxa") or self.breed == "pc"
217
+ return self.device_type.manufacturer.name in ("Mellanox", "NVIDIA", "Moxa") or self.breed == "pc"
218
218
 
219
219
  def _make_interface(self, name: str, type: InterfaceType) -> Interface:
220
220
  return Interface(
@@ -68,7 +68,7 @@ class BFDTimers:
68
68
  multiplier: int = 4
69
69
 
70
70
 
71
- Family = Literal["ipv4_unicast", "ipv6_unicast", "ipv4_labeled_unicast", "ipv6_labeled_unicast"]
71
+ Family = Literal["ipv4_unicast", "ipv6_unicast", "ipv4_labeled_unicast", "ipv6_labeled_unicast", "l2vpn_evpn"]
72
72
 
73
73
 
74
74
  @dataclass(frozen=True)
@@ -207,7 +207,7 @@ class PeerGroup:
207
207
  auth_key: bool = False
208
208
  add_path: bool = False
209
209
  multipath: bool = False
210
- multihop: bool = False
210
+ multihop: Optional[int] = None
211
211
  multihop_no_nexthop_change: bool = False
212
212
  af_no_install: bool = False
213
213
  bfd: bool = False
@@ -243,8 +243,10 @@ class VrfOptions:
243
243
  ipv6_unicast: FamilyOptions
244
244
  ipv4_labeled_unicast: FamilyOptions
245
245
  ipv6_labeled_unicast: FamilyOptions
246
+ l2vpn_evpn: FamilyOptions
246
247
 
247
248
  vrf_name_global: Optional[str] = None
249
+ l3vni: Optional[int] = None
248
250
  as_path_relax: bool = False
249
251
  rt_import: list[str] = field(default_factory=list)
250
252
  rt_export: list[str] = field(default_factory=list)
@@ -262,6 +264,7 @@ class GlobalOptions:
262
264
  ipv6_unicast: FamilyOptions
263
265
  ipv4_labeled_unicast: FamilyOptions
264
266
  ipv6_labeled_unicast: FamilyOptions
267
+ l2vpn_evpn: FamilyOptions
265
268
 
266
269
  as_path_relax: bool = False
267
270
  local_as: ASN = ASN(None)
@@ -299,6 +302,9 @@ def _used_redistribute_policies(opts: Union[GlobalOptions, VrfOptions]) -> Itera
299
302
  for red in opts.ipv6_labeled_unicast.redistributes:
300
303
  if red.policy:
301
304
  yield red.policy
305
+ for red in opts.l2vpn_evpn.redistributes:
306
+ if red.policy:
307
+ yield red.policy
302
308
 
303
309
 
304
310
  def extract_policies(config: BgpConfig) -> Sequence[str]:
@@ -43,11 +43,13 @@ class _FamiliesMixin:
43
43
  kwargs.setdefault("ipv6_unicast", FamilyOptions(family="ipv6_unicast"))
44
44
  kwargs.setdefault("ipv4_labeled_unicast", FamilyOptions(family="ipv4_labeled_unicast"))
45
45
  kwargs.setdefault("ipv6_labeled_unicast", FamilyOptions(family="ipv6_labeled_unicast"))
46
+ kwargs.setdefault("l2vpn_evpn", FamilyOptions(family="l2vpn_evpn"))
46
47
  super().__init__(**kwargs)
47
48
  ipv4_unicast: Annotated[FamilyOptions, Merge()]
48
49
  ipv6_unicast: Annotated[FamilyOptions, Merge()]
49
50
  ipv4_labeled_unicast: Annotated[FamilyOptions, Merge()]
50
51
  ipv6_labeled_unicast: Annotated[FamilyOptions, Merge()]
52
+ l2vpn_evpn: Annotated[FamilyOptions, Merge()]
51
53
 
52
54
 
53
55
  class VrfOptions(_FamiliesMixin, BaseMeshModel):
@@ -56,6 +58,7 @@ class VrfOptions(_FamiliesMixin, BaseMeshModel):
56
58
  kwargs.setdefault("ipv6_unicast", FamilyOptions(family="ipv6_unicast", vrf_name=vrf_name))
57
59
  kwargs.setdefault("ipv4_labeled_unicast", FamilyOptions(family="ipv4_labeled_unicast", vrf_name=vrf_name))
58
60
  kwargs.setdefault("ipv6_labeled_unicast", FamilyOptions(family="ipv6_labeled_unicast", vrf_name=vrf_name))
61
+ kwargs.setdefault("l2vpn_evpn", FamilyOptions(family="l2vpn_evpn", vrf_name=vrf_name))
59
62
  kwargs.setdefault("groups", KeyDefaultDict(lambda x: MeshPeerGroup(name=x)))
60
63
  super().__init__(vrf_name=vrf_name, **kwargs)
61
64
 
@@ -64,6 +67,7 @@ class VrfOptions(_FamiliesMixin, BaseMeshModel):
64
67
  as_path_relax: bool
65
68
  import_policy: Optional[str]
66
69
  export_policy: Optional[str]
70
+ l3vni: Optional[int]
67
71
  rt_import: Annotated[tuple[str, ...], Concat()]
68
72
  rt_export: Annotated[tuple[str, ...], Concat()]
69
73
  rt_import_v4: Annotated[tuple[str, ...], Concat()]
@@ -3,7 +3,7 @@ from typing import Literal, Annotated, Union, Optional
3
3
  from .basemodel import BaseMeshModel, Concat, Unite
4
4
  from ..bgp_models import BFDTimers
5
5
 
6
- FamilyName = Literal["ipv4_unicast", "ipv6_unicast", "ipv4_labeled_unicast", "ipv6_labeled_unicast"]
6
+ FamilyName = Literal["ipv4_unicast", "ipv6_unicast", "ipv4_labeled_unicast", "ipv6_labeled_unicast", "l2vpn_evpn"]
7
7
 
8
8
 
9
9
  class _SharedOptionsDTO(BaseMeshModel):
@@ -53,7 +53,7 @@ class _OptionsDTO(_SharedOptionsDTO):
53
53
  advertise_bgp_static: bool
54
54
  allowas_in: bool
55
55
  auth_key: bool
56
- multihop: bool
56
+ multihop: Optional[int]
57
57
  multihop_no_nexthop_change: bool
58
58
  af_no_install: bool
59
59
  rib: bool
@@ -101,7 +101,7 @@ class IndirectPeerDTO(MeshSession, _OptionsDTO):
101
101
 
102
102
 
103
103
  class VirtualLocalDTO(_OptionsDTO):
104
- asnum: int
104
+ asnum: Union[int, str]
105
105
  pod: int
106
106
  addr: str
107
107
  description: str
@@ -278,7 +278,7 @@ class CumulusPolicyGenerator(ABC):
278
278
  action: SingleAction[CommunityActionValue],
279
279
  ) -> Iterator[Sequence[str]]:
280
280
  if action.value.replaced is not None:
281
- if action.value.added or action.value.replaced:
281
+ if action.value.added or action.value.removed:
282
282
  raise NotImplementedError(
283
283
  "Cannot set community together with add/replace on cumulus",
284
284
  )
@@ -65,7 +65,7 @@ class PrefixListFilterGenerator(PartialGenerator, ABC):
65
65
  "ip",
66
66
  prefix_type,
67
67
  name,
68
- f"index {i * 10 + 5}",
68
+ f"index {i * 5 + 5}",
69
69
  "permit",
70
70
  str(addr_mask.ip).upper(),
71
71
  str(addr_mask.network.prefixlen),
@@ -126,7 +126,7 @@ class PrefixListFilterGenerator(PartialGenerator, ABC):
126
126
  prefix_type,
127
127
  "prefix-list",
128
128
  name,
129
- f"seq {i * 10 + 5}",
129
+ f"seq {i * 5 + 5}",
130
130
  "permit",
131
131
  str(addr_mask.ip).upper(),
132
132
  str(addr_mask.network.prefixlen),
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: annet
3
- Version: 0.16.31
3
+ Version: 0.16.32
4
4
  Summary: annet
5
5
  Home-page: https://github.com/annetutil/annet
6
6
  License: MIT
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