annet 3.11.0__tar.gz → 3.12.0__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 (227) hide show
  1. {annet-3.11.0/annet.egg-info → annet-3.12.0}/PKG-INFO +1 -1
  2. {annet-3.11.0 → annet-3.12.0}/annet/adapters/netbox/common/adapter.py +1 -1
  3. {annet-3.11.0 → annet-3.12.0}/annet/adapters/netbox/common/query.py +16 -13
  4. {annet-3.11.0 → annet-3.12.0}/annet/adapters/netbox/common/storage_base.py +2 -1
  5. {annet-3.11.0 → annet-3.12.0}/annet/adapters/netbox/common/storage_opts.py +9 -0
  6. {annet-3.11.0 → annet-3.12.0}/annet/adapters/netbox/v37/storage.py +3 -2
  7. {annet-3.11.0 → annet-3.12.0}/annet/adapters/netbox/v41/storage.py +3 -2
  8. {annet-3.11.0 → annet-3.12.0}/annet/adapters/netbox/v42/storage.py +3 -2
  9. {annet-3.11.0 → annet-3.12.0}/annet/api/__init__.py +9 -1
  10. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/texts/huawei.rul +2 -0
  11. {annet-3.11.0 → annet-3.12.0/annet.egg-info}/PKG-INFO +1 -1
  12. {annet-3.11.0 → annet-3.12.0}/AUTHORS +0 -0
  13. {annet-3.11.0 → annet-3.12.0}/LICENSE +0 -0
  14. {annet-3.11.0 → annet-3.12.0}/MANIFEST.in +0 -0
  15. {annet-3.11.0 → annet-3.12.0}/README.md +0 -0
  16. {annet-3.11.0 → annet-3.12.0}/annet/__init__.py +0 -0
  17. {annet-3.11.0 → annet-3.12.0}/annet/adapters/__init__.py +0 -0
  18. {annet-3.11.0 → annet-3.12.0}/annet/adapters/fetchers/__init__.py +0 -0
  19. {annet-3.11.0 → annet-3.12.0}/annet/adapters/fetchers/stub/__init__.py +0 -0
  20. {annet-3.11.0 → annet-3.12.0}/annet/adapters/fetchers/stub/fetcher.py +0 -0
  21. {annet-3.11.0 → annet-3.12.0}/annet/adapters/file/__init__.py +0 -0
  22. {annet-3.11.0 → annet-3.12.0}/annet/adapters/file/provider.py +0 -0
  23. {annet-3.11.0 → annet-3.12.0}/annet/adapters/netbox/__init__.py +0 -0
  24. {annet-3.11.0 → annet-3.12.0}/annet/adapters/netbox/common/__init__.py +0 -0
  25. {annet-3.11.0 → annet-3.12.0}/annet/adapters/netbox/common/client.py +0 -0
  26. {annet-3.11.0 → annet-3.12.0}/annet/adapters/netbox/common/manufacturer.py +0 -0
  27. {annet-3.11.0 → annet-3.12.0}/annet/adapters/netbox/common/models.py +0 -0
  28. {annet-3.11.0 → annet-3.12.0}/annet/adapters/netbox/common/status_client.py +0 -0
  29. {annet-3.11.0 → annet-3.12.0}/annet/adapters/netbox/provider.py +0 -0
  30. {annet-3.11.0 → annet-3.12.0}/annet/adapters/netbox/v24/__init__.py +0 -0
  31. {annet-3.11.0 → annet-3.12.0}/annet/adapters/netbox/v24/models.py +0 -0
  32. {annet-3.11.0 → annet-3.12.0}/annet/adapters/netbox/v24/storage.py +0 -0
  33. {annet-3.11.0 → annet-3.12.0}/annet/adapters/netbox/v37/__init__.py +0 -0
  34. {annet-3.11.0 → annet-3.12.0}/annet/adapters/netbox/v37/models.py +0 -0
  35. {annet-3.11.0 → annet-3.12.0}/annet/adapters/netbox/v41/__init__.py +0 -0
  36. {annet-3.11.0 → annet-3.12.0}/annet/adapters/netbox/v41/models.py +0 -0
  37. {annet-3.11.0 → annet-3.12.0}/annet/adapters/netbox/v42/__init__.py +0 -0
  38. {annet-3.11.0 → annet-3.12.0}/annet/adapters/netbox/v42/models.py +0 -0
  39. {annet-3.11.0 → annet-3.12.0}/annet/annet.py +0 -0
  40. {annet-3.11.0 → annet-3.12.0}/annet/annlib/__init__.py +0 -0
  41. {annet-3.11.0 → annet-3.12.0}/annet/annlib/command.py +0 -0
  42. {annet-3.11.0 → annet-3.12.0}/annet/annlib/diff.py +0 -0
  43. {annet-3.11.0 → annet-3.12.0}/annet/annlib/errors.py +0 -0
  44. {annet-3.11.0 → annet-3.12.0}/annet/annlib/filter_acl.py +0 -0
  45. {annet-3.11.0 → annet-3.12.0}/annet/annlib/jsontools.py +0 -0
  46. {annet-3.11.0 → annet-3.12.0}/annet/annlib/lib.py +0 -0
  47. {annet-3.11.0 → annet-3.12.0}/annet/annlib/netdev/__init__.py +0 -0
  48. {annet-3.11.0 → annet-3.12.0}/annet/annlib/netdev/db.py +0 -0
  49. {annet-3.11.0 → annet-3.12.0}/annet/annlib/netdev/devdb/__init__.py +0 -0
  50. {annet-3.11.0 → annet-3.12.0}/annet/annlib/netdev/devdb/data/devdb.json +0 -0
  51. {annet-3.11.0 → annet-3.12.0}/annet/annlib/netdev/views/__init__.py +0 -0
  52. {annet-3.11.0 → annet-3.12.0}/annet/annlib/netdev/views/dump.py +0 -0
  53. {annet-3.11.0 → annet-3.12.0}/annet/annlib/netdev/views/hardware.py +0 -0
  54. {annet-3.11.0 → annet-3.12.0}/annet/annlib/output.py +0 -0
  55. {annet-3.11.0 → annet-3.12.0}/annet/annlib/patching.py +0 -0
  56. {annet-3.11.0 → annet-3.12.0}/annet/annlib/rbparser/__init__.py +0 -0
  57. {annet-3.11.0 → annet-3.12.0}/annet/annlib/rbparser/acl.py +0 -0
  58. {annet-3.11.0 → annet-3.12.0}/annet/annlib/rbparser/deploying.py +0 -0
  59. {annet-3.11.0 → annet-3.12.0}/annet/annlib/rbparser/ordering.py +0 -0
  60. {annet-3.11.0 → annet-3.12.0}/annet/annlib/rbparser/platform.py +0 -0
  61. {annet-3.11.0 → annet-3.12.0}/annet/annlib/rbparser/syntax.py +0 -0
  62. {annet-3.11.0 → annet-3.12.0}/annet/annlib/rulebook/__init__.py +0 -0
  63. {annet-3.11.0 → annet-3.12.0}/annet/annlib/rulebook/common.py +0 -0
  64. {annet-3.11.0 → annet-3.12.0}/annet/annlib/types.py +0 -0
  65. {annet-3.11.0 → annet-3.12.0}/annet/argparse.py +0 -0
  66. {annet-3.11.0 → annet-3.12.0}/annet/bgp_models.py +0 -0
  67. {annet-3.11.0 → annet-3.12.0}/annet/cli.py +0 -0
  68. {annet-3.11.0 → annet-3.12.0}/annet/cli_args.py +0 -0
  69. {annet-3.11.0 → annet-3.12.0}/annet/configs/context.yml +0 -0
  70. {annet-3.11.0 → annet-3.12.0}/annet/configs/logging.yaml +0 -0
  71. {annet-3.11.0 → annet-3.12.0}/annet/connectors.py +0 -0
  72. {annet-3.11.0 → annet-3.12.0}/annet/deploy.py +0 -0
  73. {annet-3.11.0 → annet-3.12.0}/annet/deploy_ui.py +0 -0
  74. {annet-3.11.0 → annet-3.12.0}/annet/diff.py +0 -0
  75. {annet-3.11.0 → annet-3.12.0}/annet/filtering.py +0 -0
  76. {annet-3.11.0 → annet-3.12.0}/annet/gen.py +0 -0
  77. {annet-3.11.0 → annet-3.12.0}/annet/generators/__init__.py +0 -0
  78. {annet-3.11.0 → annet-3.12.0}/annet/generators/base.py +0 -0
  79. {annet-3.11.0 → annet-3.12.0}/annet/generators/common/__init__.py +0 -0
  80. {annet-3.11.0 → annet-3.12.0}/annet/generators/common/initial.py +0 -0
  81. {annet-3.11.0 → annet-3.12.0}/annet/generators/entire.py +0 -0
  82. {annet-3.11.0 → annet-3.12.0}/annet/generators/exceptions.py +0 -0
  83. {annet-3.11.0 → annet-3.12.0}/annet/generators/jsonfragment.py +0 -0
  84. {annet-3.11.0 → annet-3.12.0}/annet/generators/partial.py +0 -0
  85. {annet-3.11.0 → annet-3.12.0}/annet/generators/perf.py +0 -0
  86. {annet-3.11.0 → annet-3.12.0}/annet/generators/ref.py +0 -0
  87. {annet-3.11.0 → annet-3.12.0}/annet/generators/result.py +0 -0
  88. {annet-3.11.0 → annet-3.12.0}/annet/hardware.py +0 -0
  89. {annet-3.11.0 → annet-3.12.0}/annet/implicit.py +0 -0
  90. {annet-3.11.0 → annet-3.12.0}/annet/lib.py +0 -0
  91. {annet-3.11.0 → annet-3.12.0}/annet/mesh/__init__.py +0 -0
  92. {annet-3.11.0 → annet-3.12.0}/annet/mesh/basemodel.py +0 -0
  93. {annet-3.11.0 → annet-3.12.0}/annet/mesh/device_models.py +0 -0
  94. {annet-3.11.0 → annet-3.12.0}/annet/mesh/executor.py +0 -0
  95. {annet-3.11.0 → annet-3.12.0}/annet/mesh/match_args.py +0 -0
  96. {annet-3.11.0 → annet-3.12.0}/annet/mesh/models_converter.py +0 -0
  97. {annet-3.11.0 → annet-3.12.0}/annet/mesh/peer_models.py +0 -0
  98. {annet-3.11.0 → annet-3.12.0}/annet/mesh/port_processor.py +0 -0
  99. {annet-3.11.0 → annet-3.12.0}/annet/mesh/registry.py +0 -0
  100. {annet-3.11.0 → annet-3.12.0}/annet/output.py +0 -0
  101. {annet-3.11.0 → annet-3.12.0}/annet/parallel.py +0 -0
  102. {annet-3.11.0 → annet-3.12.0}/annet/patching.py +0 -0
  103. {annet-3.11.0 → annet-3.12.0}/annet/reference.py +0 -0
  104. {annet-3.11.0 → annet-3.12.0}/annet/rpl/__init__.py +0 -0
  105. {annet-3.11.0 → annet-3.12.0}/annet/rpl/action.py +0 -0
  106. {annet-3.11.0 → annet-3.12.0}/annet/rpl/condition.py +0 -0
  107. {annet-3.11.0 → annet-3.12.0}/annet/rpl/match_builder.py +0 -0
  108. {annet-3.11.0 → annet-3.12.0}/annet/rpl/policy.py +0 -0
  109. {annet-3.11.0 → annet-3.12.0}/annet/rpl/result.py +0 -0
  110. {annet-3.11.0 → annet-3.12.0}/annet/rpl/routemap.py +0 -0
  111. {annet-3.11.0 → annet-3.12.0}/annet/rpl/statement_builder.py +0 -0
  112. {annet-3.11.0 → annet-3.12.0}/annet/rpl_generators/__init__.py +0 -0
  113. {annet-3.11.0 → annet-3.12.0}/annet/rpl_generators/aspath.py +0 -0
  114. {annet-3.11.0 → annet-3.12.0}/annet/rpl_generators/community.py +0 -0
  115. {annet-3.11.0 → annet-3.12.0}/annet/rpl_generators/cumulus_frr.py +0 -0
  116. {annet-3.11.0 → annet-3.12.0}/annet/rpl_generators/entities.py +0 -0
  117. {annet-3.11.0 → annet-3.12.0}/annet/rpl_generators/execute.py +0 -0
  118. {annet-3.11.0 → annet-3.12.0}/annet/rpl_generators/policy.py +0 -0
  119. {annet-3.11.0 → annet-3.12.0}/annet/rpl_generators/prefix_lists.py +0 -0
  120. {annet-3.11.0 → annet-3.12.0}/annet/rpl_generators/rd.py +0 -0
  121. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/__init__.py +0 -0
  122. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/arista/__init__.py +0 -0
  123. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/arista/aaa.py +0 -0
  124. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/arista/iface.py +0 -0
  125. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/aruba/__init__.py +0 -0
  126. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/aruba/ap_env.py +0 -0
  127. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/aruba/misc.py +0 -0
  128. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/b4com/__init__.py +0 -0
  129. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/b4com/file.py +0 -0
  130. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/b4com/iface.py +0 -0
  131. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/cisco/__init__.py +0 -0
  132. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/cisco/iface.py +0 -0
  133. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/cisco/misc.py +0 -0
  134. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/cisco/vlandb.py +0 -0
  135. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/common.py +0 -0
  136. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/deploying.py +0 -0
  137. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/generic/__init__.py +0 -0
  138. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/generic/misc.py +0 -0
  139. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/huawei/__init__.py +0 -0
  140. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/huawei/aaa.py +0 -0
  141. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/huawei/bgp.py +0 -0
  142. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/huawei/iface.py +0 -0
  143. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/huawei/misc.py +0 -0
  144. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/huawei/vlandb.py +0 -0
  145. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/juniper/__init__.py +0 -0
  146. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/juniper/iface.py +0 -0
  147. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/nexus/__init__.py +0 -0
  148. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/nexus/iface.py +0 -0
  149. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/patching.py +0 -0
  150. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/routeros/__init__.py +0 -0
  151. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/routeros/file.py +0 -0
  152. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/texts/arista.deploy +0 -0
  153. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/texts/arista.order +0 -0
  154. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/texts/arista.rul +0 -0
  155. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/texts/aruba.deploy +0 -0
  156. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/texts/aruba.order +0 -0
  157. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/texts/aruba.rul +0 -0
  158. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/texts/b4com.deploy +0 -0
  159. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/texts/b4com.order +0 -0
  160. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/texts/b4com.rul +0 -0
  161. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/texts/cisco.deploy +0 -0
  162. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/texts/cisco.order +0 -0
  163. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/texts/cisco.rul +0 -0
  164. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/texts/huawei.deploy +0 -0
  165. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/texts/huawei.order +0 -0
  166. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/texts/iosxr.deploy +0 -0
  167. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/texts/iosxr.order +0 -0
  168. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/texts/iosxr.rul +0 -0
  169. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/texts/juniper.order +0 -0
  170. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/texts/juniper.rul +0 -0
  171. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/texts/nexus.deploy +0 -0
  172. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/texts/nexus.order +0 -0
  173. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/texts/nexus.rul +0 -0
  174. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/texts/nokia.rul +0 -0
  175. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/texts/optixtrans.deploy +0 -0
  176. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/texts/optixtrans.order +0 -0
  177. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/texts/optixtrans.rul +0 -0
  178. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/texts/pc.deploy +0 -0
  179. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/texts/pc.order +0 -0
  180. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/texts/pc.rul +0 -0
  181. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/texts/ribbon.deploy +0 -0
  182. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/texts/ribbon.rul +0 -0
  183. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/texts/routeros.order +0 -0
  184. {annet-3.11.0 → annet-3.12.0}/annet/rulebook/texts/routeros.rul +0 -0
  185. {annet-3.11.0 → annet-3.12.0}/annet/storage.py +0 -0
  186. {annet-3.11.0 → annet-3.12.0}/annet/text_term_format.py +0 -0
  187. {annet-3.11.0 → annet-3.12.0}/annet/tracing.py +0 -0
  188. {annet-3.11.0 → annet-3.12.0}/annet/types.py +0 -0
  189. {annet-3.11.0 → annet-3.12.0}/annet/vendors/__init__.py +0 -0
  190. {annet-3.11.0 → annet-3.12.0}/annet/vendors/base.py +0 -0
  191. {annet-3.11.0 → annet-3.12.0}/annet/vendors/library/__init__.py +0 -0
  192. {annet-3.11.0 → annet-3.12.0}/annet/vendors/library/arista.py +0 -0
  193. {annet-3.11.0 → annet-3.12.0}/annet/vendors/library/aruba.py +0 -0
  194. {annet-3.11.0 → annet-3.12.0}/annet/vendors/library/b4com.py +0 -0
  195. {annet-3.11.0 → annet-3.12.0}/annet/vendors/library/cisco.py +0 -0
  196. {annet-3.11.0 → annet-3.12.0}/annet/vendors/library/h3c.py +0 -0
  197. {annet-3.11.0 → annet-3.12.0}/annet/vendors/library/huawei.py +0 -0
  198. {annet-3.11.0 → annet-3.12.0}/annet/vendors/library/iosxr.py +0 -0
  199. {annet-3.11.0 → annet-3.12.0}/annet/vendors/library/juniper.py +0 -0
  200. {annet-3.11.0 → annet-3.12.0}/annet/vendors/library/nexus.py +0 -0
  201. {annet-3.11.0 → annet-3.12.0}/annet/vendors/library/nokia.py +0 -0
  202. {annet-3.11.0 → annet-3.12.0}/annet/vendors/library/optixtrans.py +0 -0
  203. {annet-3.11.0 → annet-3.12.0}/annet/vendors/library/pc.py +0 -0
  204. {annet-3.11.0 → annet-3.12.0}/annet/vendors/library/ribbon.py +0 -0
  205. {annet-3.11.0 → annet-3.12.0}/annet/vendors/library/routeros.py +0 -0
  206. {annet-3.11.0 → annet-3.12.0}/annet/vendors/registry.py +0 -0
  207. {annet-3.11.0 → annet-3.12.0}/annet/vendors/tabparser.py +0 -0
  208. {annet-3.11.0 → annet-3.12.0}/annet.egg-info/SOURCES.txt +0 -0
  209. {annet-3.11.0 → annet-3.12.0}/annet.egg-info/dependency_links.txt +0 -0
  210. {annet-3.11.0 → annet-3.12.0}/annet.egg-info/entry_points.txt +0 -0
  211. {annet-3.11.0 → annet-3.12.0}/annet.egg-info/requires.txt +0 -0
  212. {annet-3.11.0 → annet-3.12.0}/annet.egg-info/top_level.txt +0 -0
  213. {annet-3.11.0 → annet-3.12.0}/annet_generators/__init__.py +0 -0
  214. {annet-3.11.0 → annet-3.12.0}/annet_generators/example/__init__.py +0 -0
  215. {annet-3.11.0 → annet-3.12.0}/annet_generators/example/hostname.py +0 -0
  216. {annet-3.11.0 → annet-3.12.0}/annet_generators/example/lldp.py +0 -0
  217. {annet-3.11.0 → annet-3.12.0}/annet_generators/mesh_example/__init__.py +0 -0
  218. {annet-3.11.0 → annet-3.12.0}/annet_generators/mesh_example/bgp.py +0 -0
  219. {annet-3.11.0 → annet-3.12.0}/annet_generators/mesh_example/mesh_logic.py +0 -0
  220. {annet-3.11.0 → annet-3.12.0}/annet_generators/rpl_example/__init__.py +0 -0
  221. {annet-3.11.0 → annet-3.12.0}/annet_generators/rpl_example/generator.py +0 -0
  222. {annet-3.11.0 → annet-3.12.0}/annet_generators/rpl_example/items.py +0 -0
  223. {annet-3.11.0 → annet-3.12.0}/annet_generators/rpl_example/mesh.py +0 -0
  224. {annet-3.11.0 → annet-3.12.0}/annet_generators/rpl_example/route_policy.py +0 -0
  225. {annet-3.11.0 → annet-3.12.0}/requirements.txt +0 -0
  226. {annet-3.11.0 → annet-3.12.0}/setup.cfg +0 -0
  227. {annet-3.11.0 → annet-3.12.0}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: annet
3
- Version: 3.11.0
3
+ Version: 3.12.0
4
4
  Summary: annet
5
5
  Home-page: https://github.com/annetutil/annet
6
6
  License: MIT
@@ -47,7 +47,7 @@ class NetboxAdapter(
47
47
  ],
48
48
  ):
49
49
  @abstractmethod
50
- def list_all_fqdns(self) -> list[str]:
50
+ def list_fqdns(self, query: dict[str, list[str]] | None = None) -> list[str]:
51
51
  raise NotImplementedError()
52
52
 
53
53
  @abstractmethod
@@ -37,19 +37,7 @@ class NetboxQuery(Query):
37
37
  return self.query
38
38
 
39
39
  def parse_query(self) -> Filter:
40
- query_groups = defaultdict(list)
41
- for q in self.globs:
42
- if FIELD_VALUE_SEPARATOR in q:
43
- glob_type, param = q.split(FIELD_VALUE_SEPARATOR, 2)
44
- if glob_type not in ALLOWED_GLOB_GROUPS:
45
- raise Exception(f"unknown query type: '{glob_type}'")
46
- if not param:
47
- raise Exception(f"empty param for '{glob_type}'")
48
- query_groups[glob_type].append(param)
49
- else:
50
- query_groups["name"].append(q)
51
-
52
- query_groups.default_factory = None
40
+ query_groups = parse_query(self.globs)
53
41
  return cast(Filter, query_groups)
54
42
 
55
43
  def is_empty(self) -> bool:
@@ -62,3 +50,18 @@ class NetboxQuery(Query):
62
50
  if FIELD_VALUE_SEPARATOR in q:
63
51
  return False
64
52
  return True
53
+
54
+
55
+ def parse_query(query: list[str]) -> dict[str, list[str]]:
56
+ query_groups = defaultdict(list)
57
+ for q in query:
58
+ if FIELD_VALUE_SEPARATOR in q:
59
+ glob_type, param = q.split(FIELD_VALUE_SEPARATOR, 2)
60
+ if glob_type not in ALLOWED_GLOB_GROUPS:
61
+ raise Exception(f"unknown query type: '{glob_type}'")
62
+ if not param:
63
+ raise Exception(f"empty param for '{glob_type}'")
64
+ query_groups[glob_type].append(param)
65
+ else:
66
+ query_groups["name"].append(q)
67
+ return dict(query_groups)
@@ -54,6 +54,7 @@ class BaseNetboxStorage(
54
54
  token = opts.token
55
55
  threads = opts.threads
56
56
  self.exact_host_filter = opts.exact_host_filter
57
+ self.all_hosts_filter = opts.all_hosts_filter
57
58
  self.netbox = self._init_adapter(url=url, token=token, ssl_context=ctx, threads=threads)
58
59
  self._all_fqdns: Optional[list[str]] = None
59
60
  self._id_devices: dict[int, NetboxDeviceT] = {}
@@ -87,7 +88,7 @@ class BaseNetboxStorage(
87
88
 
88
89
  def resolve_all_fdnds(self) -> list[str]:
89
90
  if self._all_fqdns is None:
90
- self._all_fqdns = self.netbox.list_all_fqdns()
91
+ self._all_fqdns = self.netbox.list_fqdns(self.all_hosts_filter)
91
92
  return self._all_fqdns
92
93
 
93
94
  def make_devices(
@@ -1,5 +1,6 @@
1
1
  import os
2
2
  from typing import Any, Optional
3
+ from .query import parse_query
3
4
 
4
5
  DEFAULT_URL = "http://localhost"
5
6
 
@@ -12,17 +13,24 @@ class NetboxStorageOpts:
12
13
  insecure: bool = False,
13
14
  exact_host_filter: bool = False,
14
15
  threads: int = 1,
16
+ all_hosts_filter: dict[str, list[str]] | None = None,
15
17
  ):
16
18
  self.url = url
17
19
  self.token = token
18
20
  self.insecure = insecure
19
21
  self.exact_host_filter = exact_host_filter
20
22
  self.threads = threads
23
+ self.all_hosts_filter: dict[str, list[str]] = all_hosts_filter or {}
21
24
 
22
25
  @classmethod
23
26
  def parse_params(cls, conf_params: Optional[dict[str, str]], cli_opts: Any):
24
27
  url = os.getenv("NETBOX_URL") or conf_params.get("url") or DEFAULT_URL
25
28
  token = os.getenv("NETBOX_TOKEN", "").strip() or conf_params.get("token") or ""
29
+ all_hosts_filter = None
30
+ if all_hosts_filter_env := os.getenv("NETBOX_ALL_HOSTS_FILTER", "").strip():
31
+ all_hosts_filter = parse_query(all_hosts_filter_env.split(","))
32
+ elif all_hosts_filter_params := conf_params.get("all_hosts_filter"):
33
+ all_hosts_filter = all_hosts_filter_params
26
34
  threads = os.getenv("NETBOX_CLIENT_THREADS", "").strip() or conf_params.get("threads") or "1"
27
35
  insecure = False
28
36
  if insecure_env := os.getenv("NETBOX_INSECURE", "").lower():
@@ -39,4 +47,5 @@ class NetboxStorageOpts:
39
47
  insecure=insecure,
40
48
  exact_host_filter=exact_host_filter,
41
49
  threads=int(threads),
50
+ all_hosts_filter=all_hosts_filter,
42
51
  )
@@ -70,10 +70,11 @@ class NetboxV37Adapter(NetboxAdapter[
70
70
  list[FHRPGroupV37],
71
71
  )
72
72
 
73
- def list_all_fqdns(self) -> list[str]:
73
+ def list_fqdns(self, query: dict[str, list[str]] | None = None) -> list[str]:
74
+ query = query or {}
74
75
  return [
75
76
  d.name
76
- for d in self.netbox.dcim_all_devices_brief().results
77
+ for d in self.netbox.dcim_all_devices_brief(**query).results
77
78
  ]
78
79
 
79
80
  def list_devices(self, query: dict[str, list[str]]) -> list[NetboxDeviceV37]:
@@ -71,10 +71,11 @@ class NetboxV41Adapter(NetboxAdapter[
71
71
  list[FHRPGroupV41],
72
72
  )
73
73
 
74
- def list_all_fqdns(self) -> list[str]:
74
+ def list_fqdns(self, query: dict[str, list[str]] | None = None) -> list[str]:
75
+ query = query or {}
75
76
  return [
76
77
  d.name
77
- for d in self.netbox.dcim_all_devices_brief().results
78
+ for d in self.netbox.dcim_all_devices_brief(**query).results
78
79
  ]
79
80
 
80
81
  def list_devices(self, query: dict[str, list[str]]) -> list[NetboxDeviceV41]:
@@ -72,10 +72,11 @@ class NetboxV42Adapter(NetboxAdapter[
72
72
  list[FHRPGroupV41],
73
73
  )
74
74
 
75
- def list_all_fqdns(self) -> list[str]:
75
+ def list_fqdns(self, query: dict[str, list[str]] | None = None) -> list[str]:
76
+ query = query or {}
76
77
  return [
77
78
  d.name
78
- for d in self.netbox.dcim_all_devices_brief().results
79
+ for d in self.netbox.dcim_all_devices_brief(**query).results
79
80
  ]
80
81
 
81
82
  def list_devices(self, query: dict[str, list[str]]) -> list[NetboxDeviceV42]:
@@ -331,7 +331,15 @@ def diff(
331
331
  loader: ann_gen.Loader,
332
332
  device_ids: List[Any]
333
333
  ) -> tuple[Mapping[Device, Union[Diff, PCDiff]], Mapping[Device, Exception]]:
334
- """ Сгенерировать конфиг для устройств """
334
+ """ Сгенерировать дифф для устройств """
335
+ if args.config == "running":
336
+ fetcher = annet.deploy.get_fetcher()
337
+ ann_gen.live_configs = annet.lib.do_async(
338
+ fetcher.fetch(
339
+ [device for device in loader.devices if device.id in device_ids],
340
+ processes=args.parallel
341
+ )
342
+ )
335
343
  stdin = args.stdin(filter_acl=args.filter_acl, config=None)
336
344
 
337
345
  filterer = filtering.filterer_connector.get()
@@ -200,9 +200,11 @@ aaa
200
200
 
201
201
  hwtacacs-server template *
202
202
  hwtacacs-server shared-key
203
+ hwtacacs-server source-ip
203
204
 
204
205
  hwtacacs server template *
205
206
  hwtacacs server shared-key
207
+ hwtacacs server source-ip
206
208
 
207
209
  !radius-server template default
208
210
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: annet
3
- Version: 3.11.0
3
+ Version: 3.12.0
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
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