cisco_node_utils_mgx 2.1.0.1

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.
Files changed (357) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +96 -0
  5. data/.travis.yml +17 -0
  6. data/CHANGELOG.md +676 -0
  7. data/CONTRIBUTING.md +43 -0
  8. data/Gemfile +10 -0
  9. data/LICENSE +201 -0
  10. data/README.md +246 -0
  11. data/Rakefile +44 -0
  12. data/SUPPORT.md +3 -0
  13. data/bin/.rubocop.yml +18 -0
  14. data/bin/check_metric_limits.rb +109 -0
  15. data/bin/git/hooks/commit-msg/enforce_style +89 -0
  16. data/bin/git/hooks/hook_lib +115 -0
  17. data/bin/git/hooks/hooks-wrapper +38 -0
  18. data/bin/git/hooks/post-flow-hotfix-start/update-version +24 -0
  19. data/bin/git/hooks/post-flow-release-finish/update-version +29 -0
  20. data/bin/git/hooks/post-flow-release-start/update-version +19 -0
  21. data/bin/git/hooks/post-merge/update-hooks +6 -0
  22. data/bin/git/hooks/post-rewrite/update-hooks +6 -0
  23. data/bin/git/hooks/pre-commit/check_unstaged_changes +18 -0
  24. data/bin/git/hooks/pre-commit/rubocop +25 -0
  25. data/bin/git/hooks/pre-commit/validate-diffs +45 -0
  26. data/bin/git/hooks/pre-commit/validate-yaml +18 -0
  27. data/bin/git/hooks/pre-push/check-changelog +24 -0
  28. data/bin/git/hooks/pre-push/rubocop +7 -0
  29. data/bin/git/update-hooks +123 -0
  30. data/bin/show_running_yang.rb +233 -0
  31. data/cisco_node_utils.gemspec +41 -0
  32. data/docs/README-develop-best-practices.md +521 -0
  33. data/docs/README-develop-node-utils-APIs.md +570 -0
  34. data/docs/README-maintainers.md +77 -0
  35. data/docs/README-test-execution.md +57 -0
  36. data/docs/README-utilities.md +14 -0
  37. data/docs/agent_files.png +0 -0
  38. data/docs/cisco_node_utils.yaml.example +36 -0
  39. data/docs/template-router.rb +123 -0
  40. data/docs/template-test_router.rb +104 -0
  41. data/ext/mkrf_conf.rb +63 -0
  42. data/lib/.rubocop.yml +18 -0
  43. data/lib/cisco_node_utils/aaa_authentication_login.rb +95 -0
  44. data/lib/cisco_node_utils/aaa_authentication_login_service.rb +138 -0
  45. data/lib/cisco_node_utils/aaa_authorization_service.rb +156 -0
  46. data/lib/cisco_node_utils/ace.rb +467 -0
  47. data/lib/cisco_node_utils/acl.rb +101 -0
  48. data/lib/cisco_node_utils/banner.rb +63 -0
  49. data/lib/cisco_node_utils/bfd_global.rb +305 -0
  50. data/lib/cisco_node_utils/bgp.rb +988 -0
  51. data/lib/cisco_node_utils/bgp_af.rb +545 -0
  52. data/lib/cisco_node_utils/bgp_af_aggr_addr.rb +207 -0
  53. data/lib/cisco_node_utils/bgp_neighbor.rb +527 -0
  54. data/lib/cisco_node_utils/bgp_neighbor_af.rb +780 -0
  55. data/lib/cisco_node_utils/bridge_domain.rb +178 -0
  56. data/lib/cisco_node_utils/bridge_domain_vni.rb +206 -0
  57. data/lib/cisco_node_utils/cisco_cmn_utils.rb +444 -0
  58. data/lib/cisco_node_utils/client/client.rb +238 -0
  59. data/lib/cisco_node_utils/client/grpc/client.rb +395 -0
  60. data/lib/cisco_node_utils/client/grpc/ems.proto +148 -0
  61. data/lib/cisco_node_utils/client/grpc/ems.rb +111 -0
  62. data/lib/cisco_node_utils/client/grpc/ems_services.rb +49 -0
  63. data/lib/cisco_node_utils/client/grpc.rb +33 -0
  64. data/lib/cisco_node_utils/client/nxapi/client.rb +368 -0
  65. data/lib/cisco_node_utils/client/nxapi.rb +31 -0
  66. data/lib/cisco_node_utils/client/utils.rb +180 -0
  67. data/lib/cisco_node_utils/client.rb +35 -0
  68. data/lib/cisco_node_utils/cmd_ref/README_YAML.md +590 -0
  69. data/lib/cisco_node_utils/cmd_ref/aaa_auth_login_service.yaml +25 -0
  70. data/lib/cisco_node_utils/cmd_ref/aaa_authentication_login.yaml +38 -0
  71. data/lib/cisco_node_utils/cmd_ref/aaa_authorization_service.yaml +40 -0
  72. data/lib/cisco_node_utils/cmd_ref/acl.yaml +48 -0
  73. data/lib/cisco_node_utils/cmd_ref/banner.yaml +11 -0
  74. data/lib/cisco_node_utils/cmd_ref/bfd_global.yaml +117 -0
  75. data/lib/cisco_node_utils/cmd_ref/bgp.yaml +383 -0
  76. data/lib/cisco_node_utils/cmd_ref/bgp_af.yaml +223 -0
  77. data/lib/cisco_node_utils/cmd_ref/bgp_af_aa.yaml +38 -0
  78. data/lib/cisco_node_utils/cmd_ref/bgp_neighbor.yaml +174 -0
  79. data/lib/cisco_node_utils/cmd_ref/bgp_neighbor_af.yaml +236 -0
  80. data/lib/cisco_node_utils/cmd_ref/bridge_domain.yaml +49 -0
  81. data/lib/cisco_node_utils/cmd_ref/bridge_domain_vni.yaml +33 -0
  82. data/lib/cisco_node_utils/cmd_ref/dhcp_relay_global.yaml +128 -0
  83. data/lib/cisco_node_utils/cmd_ref/dnsclient.yaml +55 -0
  84. data/lib/cisco_node_utils/cmd_ref/encapsulation.yaml +25 -0
  85. data/lib/cisco_node_utils/cmd_ref/evpn_multicast.yaml +12 -0
  86. data/lib/cisco_node_utils/cmd_ref/evpn_multisite.yaml +18 -0
  87. data/lib/cisco_node_utils/cmd_ref/evpn_stormcontrol.yaml +18 -0
  88. data/lib/cisco_node_utils/cmd_ref/evpn_vni.yaml +48 -0
  89. data/lib/cisco_node_utils/cmd_ref/fabricpath.yaml +183 -0
  90. data/lib/cisco_node_utils/cmd_ref/fabricpath_topology.yaml +40 -0
  91. data/lib/cisco_node_utils/cmd_ref/feature.yaml +126 -0
  92. data/lib/cisco_node_utils/cmd_ref/hostname.yaml +8 -0
  93. data/lib/cisco_node_utils/cmd_ref/hsrp_global.yaml +25 -0
  94. data/lib/cisco_node_utils/cmd_ref/images.yaml +8 -0
  95. data/lib/cisco_node_utils/cmd_ref/interface.yaml +781 -0
  96. data/lib/cisco_node_utils/cmd_ref/interface_channel_group.yaml +45 -0
  97. data/lib/cisco_node_utils/cmd_ref/interface_evpn_multisite.yaml +17 -0
  98. data/lib/cisco_node_utils/cmd_ref/interface_hsrp_group.yaml +120 -0
  99. data/lib/cisco_node_utils/cmd_ref/interface_ospf.yaml +112 -0
  100. data/lib/cisco_node_utils/cmd_ref/interface_portchannel.yaml +87 -0
  101. data/lib/cisco_node_utils/cmd_ref/interface_service_vni.yaml +42 -0
  102. data/lib/cisco_node_utils/cmd_ref/inventory.yaml +45 -0
  103. data/lib/cisco_node_utils/cmd_ref/ip_multicast.yaml +22 -0
  104. data/lib/cisco_node_utils/cmd_ref/itd_device_group.yaml +83 -0
  105. data/lib/cisco_node_utils/cmd_ref/itd_service.yaml +119 -0
  106. data/lib/cisco_node_utils/cmd_ref/memory.yaml +24 -0
  107. data/lib/cisco_node_utils/cmd_ref/ntp_auth_key.yaml +10 -0
  108. data/lib/cisco_node_utils/cmd_ref/ntp_config.yaml +27 -0
  109. data/lib/cisco_node_utils/cmd_ref/ntp_server.yaml +34 -0
  110. data/lib/cisco_node_utils/cmd_ref/object_group.yaml +32 -0
  111. data/lib/cisco_node_utils/cmd_ref/ospf.yaml +91 -0
  112. data/lib/cisco_node_utils/cmd_ref/ospf_area.yaml +91 -0
  113. data/lib/cisco_node_utils/cmd_ref/ospf_area_vlink.yaml +88 -0
  114. data/lib/cisco_node_utils/cmd_ref/overlay_global.yaml +37 -0
  115. data/lib/cisco_node_utils/cmd_ref/pim.yaml +43 -0
  116. data/lib/cisco_node_utils/cmd_ref/portchannel_global.yaml +86 -0
  117. data/lib/cisco_node_utils/cmd_ref/radius_global.yaml +37 -0
  118. data/lib/cisco_node_utils/cmd_ref/radius_server.yaml +100 -0
  119. data/lib/cisco_node_utils/cmd_ref/radius_server_group.yaml +19 -0
  120. data/lib/cisco_node_utils/cmd_ref/route_map.yaml +601 -0
  121. data/lib/cisco_node_utils/cmd_ref/show_system.yaml +9 -0
  122. data/lib/cisco_node_utils/cmd_ref/show_version.yaml +84 -0
  123. data/lib/cisco_node_utils/cmd_ref/snmp_community.yaml +81 -0
  124. data/lib/cisco_node_utils/cmd_ref/snmp_group.yaml +9 -0
  125. data/lib/cisco_node_utils/cmd_ref/snmp_notification_receiver.yaml +74 -0
  126. data/lib/cisco_node_utils/cmd_ref/snmp_server.yaml +91 -0
  127. data/lib/cisco_node_utils/cmd_ref/snmp_user.yaml +57 -0
  128. data/lib/cisco_node_utils/cmd_ref/snmpnotification.yaml +23 -0
  129. data/lib/cisco_node_utils/cmd_ref/span_session.yaml +65 -0
  130. data/lib/cisco_node_utils/cmd_ref/stp_global.yaml +235 -0
  131. data/lib/cisco_node_utils/cmd_ref/syslog_facility.yaml +10 -0
  132. data/lib/cisco_node_utils/cmd_ref/syslog_server.yaml +34 -0
  133. data/lib/cisco_node_utils/cmd_ref/syslog_settings.yaml +45 -0
  134. data/lib/cisco_node_utils/cmd_ref/system.yaml +7 -0
  135. data/lib/cisco_node_utils/cmd_ref/tacacs_global.yaml +37 -0
  136. data/lib/cisco_node_utils/cmd_ref/tacacs_server.yaml +63 -0
  137. data/lib/cisco_node_utils/cmd_ref/tacacs_server_group.yaml +45 -0
  138. data/lib/cisco_node_utils/cmd_ref/tacacs_server_host.yaml +64 -0
  139. data/lib/cisco_node_utils/cmd_ref/upgrade.yaml +38 -0
  140. data/lib/cisco_node_utils/cmd_ref/vdc.yaml +52 -0
  141. data/lib/cisco_node_utils/cmd_ref/virtual_service.yaml +8 -0
  142. data/lib/cisco_node_utils/cmd_ref/vlan.yaml +106 -0
  143. data/lib/cisco_node_utils/cmd_ref/vpc.yaml +233 -0
  144. data/lib/cisco_node_utils/cmd_ref/vrf.yaml +86 -0
  145. data/lib/cisco_node_utils/cmd_ref/vrf_af.yaml +139 -0
  146. data/lib/cisco_node_utils/cmd_ref/vtp.yaml +32 -0
  147. data/lib/cisco_node_utils/cmd_ref/vxlan_vtep.yaml +114 -0
  148. data/lib/cisco_node_utils/cmd_ref/vxlan_vtep_vni.yaml +71 -0
  149. data/lib/cisco_node_utils/cmd_ref/yang.yaml +7 -0
  150. data/lib/cisco_node_utils/cmd_ref/yum.yaml +68 -0
  151. data/lib/cisco_node_utils/command_reference.rb +724 -0
  152. data/lib/cisco_node_utils/configparser_lib.rb +195 -0
  153. data/lib/cisco_node_utils/constants.rb +40 -0
  154. data/lib/cisco_node_utils/dhcp_relay_global.rb +302 -0
  155. data/lib/cisco_node_utils/dns_domain.rb +93 -0
  156. data/lib/cisco_node_utils/domain_name.rb +82 -0
  157. data/lib/cisco_node_utils/encapsulation.rb +112 -0
  158. data/lib/cisco_node_utils/environment.rb +110 -0
  159. data/lib/cisco_node_utils/evpn_multicast.rb +66 -0
  160. data/lib/cisco_node_utils/evpn_multisite.rb +96 -0
  161. data/lib/cisco_node_utils/evpn_stormcontrol.rb +84 -0
  162. data/lib/cisco_node_utils/evpn_vni.rb +159 -0
  163. data/lib/cisco_node_utils/exceptions.rb +140 -0
  164. data/lib/cisco_node_utils/fabricpath_global.rb +405 -0
  165. data/lib/cisco_node_utils/fabricpath_topology.rb +137 -0
  166. data/lib/cisco_node_utils/feature.rb +377 -0
  167. data/lib/cisco_node_utils/hostname.rb +62 -0
  168. data/lib/cisco_node_utils/hsrp_global.rb +97 -0
  169. data/lib/cisco_node_utils/interface.rb +2128 -0
  170. data/lib/cisco_node_utils/interface_channel_group.rb +142 -0
  171. data/lib/cisco_node_utils/interface_evpn_multisite.rb +72 -0
  172. data/lib/cisco_node_utils/interface_hsrp_group.rb +557 -0
  173. data/lib/cisco_node_utils/interface_ospf.rb +378 -0
  174. data/lib/cisco_node_utils/interface_portchannel.rb +180 -0
  175. data/lib/cisco_node_utils/interface_service_vni.rb +132 -0
  176. data/lib/cisco_node_utils/ip_multicast.rb +90 -0
  177. data/lib/cisco_node_utils/itd_device_group.rb +228 -0
  178. data/lib/cisco_node_utils/itd_device_group_node.rb +144 -0
  179. data/lib/cisco_node_utils/itd_service.rb +511 -0
  180. data/lib/cisco_node_utils/logger.rb +78 -0
  181. data/lib/cisco_node_utils/name_server.rb +64 -0
  182. data/lib/cisco_node_utils/node.rb +443 -0
  183. data/lib/cisco_node_utils/node_util.rb +111 -0
  184. data/lib/cisco_node_utils/ntp_auth_key.rb +67 -0
  185. data/lib/cisco_node_utils/ntp_config.rb +83 -0
  186. data/lib/cisco_node_utils/ntp_server.rb +86 -0
  187. data/lib/cisco_node_utils/object_group.rb +75 -0
  188. data/lib/cisco_node_utils/object_group_entry.rb +143 -0
  189. data/lib/cisco_node_utils/overlay_global.rb +142 -0
  190. data/lib/cisco_node_utils/pim.rb +131 -0
  191. data/lib/cisco_node_utils/pim_group_list.rb +109 -0
  192. data/lib/cisco_node_utils/pim_rp_address.rb +103 -0
  193. data/lib/cisco_node_utils/platform.rb +217 -0
  194. data/lib/cisco_node_utils/portchannel_global.rb +347 -0
  195. data/lib/cisco_node_utils/radius_global.rb +165 -0
  196. data/lib/cisco_node_utils/radius_server.rb +421 -0
  197. data/lib/cisco_node_utils/radius_server_group.rb +117 -0
  198. data/lib/cisco_node_utils/route_map.rb +2540 -0
  199. data/lib/cisco_node_utils/router_ospf.rb +77 -0
  200. data/lib/cisco_node_utils/router_ospf_area.rb +416 -0
  201. data/lib/cisco_node_utils/router_ospf_area_vlink.rb +313 -0
  202. data/lib/cisco_node_utils/router_ospf_vrf.rb +342 -0
  203. data/lib/cisco_node_utils/snmp_notification_receiver.rb +176 -0
  204. data/lib/cisco_node_utils/snmpcommunity.rb +109 -0
  205. data/lib/cisco_node_utils/snmpgroup.rb +54 -0
  206. data/lib/cisco_node_utils/snmpnotification.rb +57 -0
  207. data/lib/cisco_node_utils/snmpserver.rb +132 -0
  208. data/lib/cisco_node_utils/snmpuser.rb +403 -0
  209. data/lib/cisco_node_utils/span_session.rb +149 -0
  210. data/lib/cisco_node_utils/stp_global.rb +676 -0
  211. data/lib/cisco_node_utils/syslog_facility.rb +64 -0
  212. data/lib/cisco_node_utils/syslog_server.rb +146 -0
  213. data/lib/cisco_node_utils/syslog_settings.rb +174 -0
  214. data/lib/cisco_node_utils/tacacs_global.rb +137 -0
  215. data/lib/cisco_node_utils/tacacs_server.rb +173 -0
  216. data/lib/cisco_node_utils/tacacs_server_group.rb +149 -0
  217. data/lib/cisco_node_utils/tacacs_server_host.rb +216 -0
  218. data/lib/cisco_node_utils/upgrade.rb +122 -0
  219. data/lib/cisco_node_utils/vdc.rb +118 -0
  220. data/lib/cisco_node_utils/version.rb +21 -0
  221. data/lib/cisco_node_utils/vlan.rb +301 -0
  222. data/lib/cisco_node_utils/vpc.rb +466 -0
  223. data/lib/cisco_node_utils/vrf.rb +192 -0
  224. data/lib/cisco_node_utils/vrf_af.rb +327 -0
  225. data/lib/cisco_node_utils/vtp.rb +125 -0
  226. data/lib/cisco_node_utils/vxlan_vtep.rb +286 -0
  227. data/lib/cisco_node_utils/vxlan_vtep_vni.rb +331 -0
  228. data/lib/cisco_node_utils/yang.rb +160 -0
  229. data/lib/cisco_node_utils/yum.rb +213 -0
  230. data/lib/cisco_node_utils.rb +21 -0
  231. data/lib/minitest/environment_plugin.rb +31 -0
  232. data/lib/minitest/log_level_plugin.rb +41 -0
  233. data/spec/client_spec.rb +7 -0
  234. data/spec/environment_spec.rb +384 -0
  235. data/spec/grpc_client_spec.rb +23 -0
  236. data/spec/isolate/all_clients_spec.rb +9 -0
  237. data/spec/isolate/grpc_only_spec.rb +16 -0
  238. data/spec/isolate/no_clients_spec.rb +26 -0
  239. data/spec/isolate/nxapi_only_spec.rb +16 -0
  240. data/spec/nxapi_client_spec.rb +42 -0
  241. data/spec/schema.yaml +82 -0
  242. data/spec/shared_examples_for_clients.rb +14 -0
  243. data/spec/spec_helper.rb +91 -0
  244. data/spec/whitespace_spec.rb +10 -0
  245. data/spec/yaml_spec.rb +42 -0
  246. data/tests/.rubocop.yml +18 -0
  247. data/tests/CSCuxdublin-1.0.0-7.0.3.I3.1.lib32_n9000.rpm +0 -0
  248. data/tests/basetest.rb +243 -0
  249. data/tests/ciscotest.rb +577 -0
  250. data/tests/cmd_config.yaml +75 -0
  251. data/tests/cmd_config_invalid.yaml +16 -0
  252. data/tests/n9000_sample-1.0.0-7.0.3.x86_64.rpm +0 -0
  253. data/tests/noop.rb +7 -0
  254. data/tests/platform_info.rb +63 -0
  255. data/tests/tacacs_server.yaml.example +6 -0
  256. data/tests/test_aaa_authentication_login.rb +243 -0
  257. data/tests/test_aaa_authentication_login_service.rb +761 -0
  258. data/tests/test_aaa_authorization_service.rb +874 -0
  259. data/tests/test_ace.rb +304 -0
  260. data/tests/test_acl.rb +185 -0
  261. data/tests/test_banner.rb +85 -0
  262. data/tests/test_bfd_global.rb +272 -0
  263. data/tests/test_bgp_af.rb +875 -0
  264. data/tests/test_bgp_af_aa.rb +108 -0
  265. data/tests/test_bgp_neighbor.rb +596 -0
  266. data/tests/test_bgp_neighbor_af.rb +781 -0
  267. data/tests/test_bridge_domain.rb +198 -0
  268. data/tests/test_bridge_domain_vni.rb +109 -0
  269. data/tests/test_client_utils.rb +111 -0
  270. data/tests/test_cmn_utils.rb +76 -0
  271. data/tests/test_command_config.rb +206 -0
  272. data/tests/test_command_reference.rb +669 -0
  273. data/tests/test_dhcp_relay_global.rb +286 -0
  274. data/tests/test_dns_domain.rb +123 -0
  275. data/tests/test_domain_name.rb +96 -0
  276. data/tests/test_encapsulation.rb +75 -0
  277. data/tests/test_evpn_multicast.rb +65 -0
  278. data/tests/test_evpn_multisite.rb +70 -0
  279. data/tests/test_evpn_stormcontrol.rb +56 -0
  280. data/tests/test_evpn_vni.rb +131 -0
  281. data/tests/test_fabricpath_global.rb +246 -0
  282. data/tests/test_fabricpath_topology.rb +77 -0
  283. data/tests/test_feature.rb +272 -0
  284. data/tests/test_grpc.rb +166 -0
  285. data/tests/test_hostname.rb +64 -0
  286. data/tests/test_hsrp_global.rb +79 -0
  287. data/tests/test_interface.rb +1958 -0
  288. data/tests/test_interface_bdi.rb +80 -0
  289. data/tests/test_interface_channel_group.rb +131 -0
  290. data/tests/test_interface_evpn_multisite.rb +94 -0
  291. data/tests/test_interface_hsrp.rb +134 -0
  292. data/tests/test_interface_hsrp_group.rb +570 -0
  293. data/tests/test_interface_ospf.rb +820 -0
  294. data/tests/test_interface_portchannel.rb +135 -0
  295. data/tests/test_interface_private_vlan.rb +365 -0
  296. data/tests/test_interface_service_vni.rb +203 -0
  297. data/tests/test_interface_svi.rb +210 -0
  298. data/tests/test_interface_switchport.rb +468 -0
  299. data/tests/test_ip_multicast.rb +80 -0
  300. data/tests/test_itd_device_group.rb +145 -0
  301. data/tests/test_itd_device_group_node.rb +199 -0
  302. data/tests/test_itd_service.rb +314 -0
  303. data/tests/test_logger.rb +43 -0
  304. data/tests/test_name_server.rb +94 -0
  305. data/tests/test_node.rb +50 -0
  306. data/tests/test_node_ext.rb +406 -0
  307. data/tests/test_node_util.rb +119 -0
  308. data/tests/test_ntp_auth_key.rb +77 -0
  309. data/tests/test_ntp_config.rb +100 -0
  310. data/tests/test_ntp_server.rb +146 -0
  311. data/tests/test_nxapi.rb +236 -0
  312. data/tests/test_object_group.rb +122 -0
  313. data/tests/test_overlay_global.rb +108 -0
  314. data/tests/test_pim.rb +203 -0
  315. data/tests/test_pim_group_list.rb +147 -0
  316. data/tests/test_pim_rp_address.rb +155 -0
  317. data/tests/test_platform.rb +254 -0
  318. data/tests/test_portchannel_global.rb +322 -0
  319. data/tests/test_radius_global.rb +108 -0
  320. data/tests/test_radius_server.rb +377 -0
  321. data/tests/test_radius_server_group.rb +151 -0
  322. data/tests/test_route_map.rb +1479 -0
  323. data/tests/test_router_bgp.rb +1325 -0
  324. data/tests/test_router_ospf.rb +56 -0
  325. data/tests/test_router_ospf_area.rb +433 -0
  326. data/tests/test_router_ospf_area_vlink.rb +298 -0
  327. data/tests/test_router_ospf_vrf.rb +690 -0
  328. data/tests/test_snmp_notification_receiver.rb +169 -0
  329. data/tests/test_snmpcommunity.rb +422 -0
  330. data/tests/test_snmpgroup.rb +71 -0
  331. data/tests/test_snmpnotification.rb +91 -0
  332. data/tests/test_snmpserver.rb +251 -0
  333. data/tests/test_snmpuser.rb +666 -0
  334. data/tests/test_span_session.rb +155 -0
  335. data/tests/test_stp_global.rb +575 -0
  336. data/tests/test_syslog_facility.rb +80 -0
  337. data/tests/test_syslog_server.rb +119 -0
  338. data/tests/test_syslog_settings.rb +123 -0
  339. data/tests/test_tacacs_global.rb +109 -0
  340. data/tests/test_tacacs_server.rb +436 -0
  341. data/tests/test_tacacs_server_group.rb +434 -0
  342. data/tests/test_tacacs_server_host.rb +427 -0
  343. data/tests/test_upgrade.rb +105 -0
  344. data/tests/test_vdc.rb +64 -0
  345. data/tests/test_vlan.rb +386 -0
  346. data/tests/test_vlan_private.rb +656 -0
  347. data/tests/test_vpc.rb +548 -0
  348. data/tests/test_vrf.rb +248 -0
  349. data/tests/test_vrf_af.rb +288 -0
  350. data/tests/test_vtp.rb +278 -0
  351. data/tests/test_vxlan_vtep.rb +327 -0
  352. data/tests/test_vxlan_vtep_vni.rb +326 -0
  353. data/tests/test_yang.rb +369 -0
  354. data/tests/test_yum.rb +109 -0
  355. data/tests/upgrade_info.yaml.example +3 -0
  356. data/tests/yum_package.yaml +94 -0
  357. metadata +534 -0
@@ -0,0 +1,86 @@
1
+ # NTP Server provider class
2
+ #
3
+ # Jonathan Tripathy et al., September 2015
4
+ #
5
+ # Copyright (c) 2014-2017 Cisco and/or its affiliates.
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+
19
+ require_relative 'node'
20
+ require_relative 'interface'
21
+ require 'resolv'
22
+
23
+ module Cisco
24
+ # NtpServer - node utility class for NTP Server configuration management
25
+ class NtpServer < NodeUtil
26
+ attr_reader :key, :maxpoll, :minpoll, :prefer, :vrf
27
+
28
+ def initialize(opts, instantiate=true)
29
+ @ntpserver_id = opts['name']
30
+ @key = opts['key']
31
+ @minpoll = opts['minpoll']
32
+ @maxpoll = opts['maxpoll']
33
+ @prefer = opts['prefer'].nil? ? false : true
34
+ @vrf = opts['vrf'].nil? ? 'default' : opts['vrf']
35
+
36
+ hostname_regex = /^(?=.{1,255}$)[0-9A-Za-z]
37
+ (?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?
38
+ (?:\.[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?)*\.?$/x
39
+
40
+ unless @ntpserver_id =~ Resolv::AddressRegex ||
41
+ @ntpserver_id =~ hostname_regex
42
+ fail ArgumentError,
43
+ "Invalid value '#{@ntpserver_id}' \
44
+ (Must be valid IPv4/IPv6 address or hostname)"
45
+ end
46
+
47
+ create if instantiate
48
+ end
49
+
50
+ def self.ntpservers
51
+ keys = %w(name prefer vrf key minpoll maxpoll)
52
+ hash = {}
53
+ ntpservers_list = config_get('ntp_server', 'server')
54
+ return hash if ntpservers_list.empty?
55
+
56
+ ntpservers_list.each do |id|
57
+ hash[id[0]] = NtpServer.new(Hash[keys.zip(id)], false)
58
+ end
59
+
60
+ hash
61
+ end
62
+
63
+ def ==(other)
64
+ name == other.name && prefer == other.prefer
65
+ end
66
+
67
+ def create
68
+ config_set('ntp_server', 'server', state: '', ip: @ntpserver_id,
69
+ prefer: (['true', true].include? @prefer) ? 'prefer' : '',
70
+ vrf: @vrf ? "use-vrf #{@vrf}" : '',
71
+ key: @key ? "key #{@key}" : '',
72
+ minpoll: @minpoll ? "minpoll #{@minpoll}" : '',
73
+ maxpoll: @maxpoll ? "maxpoll #{@maxpoll}" : '')
74
+ end
75
+
76
+ def destroy
77
+ config_set('ntp_server', 'server',
78
+ state: 'no', ip: @ntpserver_id, prefer: '', vrf: '',
79
+ key: '', minpoll: '', maxpoll: '')
80
+ end
81
+
82
+ def name
83
+ @ntpserver_id
84
+ end
85
+ end # class
86
+ end # module
@@ -0,0 +1,75 @@
1
+ #
2
+ # May 2017, Sai Chintalapudi
3
+ #
4
+ # Copyright (c) 2017 Cisco and/or its affiliates.
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+
18
+ require_relative 'node_util'
19
+ require_relative 'acl'
20
+
21
+ module Cisco
22
+ # node_utils class for object_group
23
+ class ObjectGroup < NodeUtil
24
+ attr_reader :afi, :type, :grp_name
25
+
26
+ def initialize(afi, type, name, instantiate=true)
27
+ fail TypeError unless name.is_a?(String)
28
+ fail ArgumentError unless type[/address|port/]
29
+ @afi = Acl.afi_cli(afi)
30
+ @type = type
31
+ @grp_name = name
32
+
33
+ set_args_keys_default
34
+ create if instantiate
35
+ end
36
+
37
+ # Helper method to delete @set_args hash keys
38
+ def set_args_keys_default
39
+ @set_args = { afi: @afi, type: @type, grp_name: @grp_name }
40
+ @get_args = @set_args
41
+ end
42
+
43
+ # rubocop:disable Style/AccessorMethodName
44
+ def set_args_keys(hash={})
45
+ set_args_keys_default
46
+ @set_args = @get_args.merge!(hash) unless hash.empty?
47
+ end
48
+
49
+ def create
50
+ config_set('object_group', 'create', @set_args)
51
+ end
52
+
53
+ def destroy
54
+ config_set('object_group', 'destroy', @set_args)
55
+ end
56
+
57
+ def ==(other)
58
+ grp_name == other.grp_name && afi == other.afi && type == other.type
59
+ end
60
+
61
+ def self.object_groups
62
+ hash = {}
63
+ grps = config_get('object_group', 'all_object_groups')
64
+ return hash if grps.nil?
65
+ grps.each do |afi, type, name|
66
+ lafi = afi
67
+ lafi = 'ipv4' if afi == 'ip'
68
+ hash[lafi] ||= {}
69
+ hash[lafi][type] ||= {}
70
+ hash[lafi][type][name] = ObjectGroup.new(lafi, type, name, false)
71
+ end
72
+ hash
73
+ end
74
+ end # class
75
+ end # module
@@ -0,0 +1,143 @@
1
+ #
2
+ # May 2017, Sai Chintalapudi
3
+ #
4
+ # Copyright (c) 2017 Cisco and/or its affiliates.
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+
18
+ require_relative 'node_util'
19
+ require_relative 'acl'
20
+ require_relative 'object_group'
21
+
22
+ module Cisco
23
+ # node_utils class for object_group_entry
24
+ class ObjectGroupEntry < NodeUtil
25
+ attr_reader :afi, :type, :grp_name
26
+
27
+ def initialize(afi, type, name, seqno)
28
+ fail TypeError unless name.is_a?(String)
29
+ fail ArgumentError unless type[/address|port/]
30
+ @afi = Acl.afi_cli(afi)
31
+ @type = type
32
+ @grp_name = name
33
+ @seqno = seqno
34
+ og = ObjectGroup.object_groups[afi.to_s][type.to_s][name.to_s]
35
+ fail "ObjectGroup #{afi} #{type} #{name} does not exist" if
36
+ og.nil?
37
+ set_args_keys_default
38
+ end
39
+
40
+ # Helper method to delete @set_args hash keys
41
+ def set_args_keys_default
42
+ @set_args = { afi: @afi, type: @type, grp_name: @grp_name, seqno: @seqno }
43
+ @get_args = @set_args
44
+ end
45
+
46
+ # rubocop:disable Style/AccessorMethodName
47
+ def set_args_keys(hash={})
48
+ set_args_keys_default
49
+ @set_args = @get_args.merge!(hash) unless hash.empty?
50
+ end
51
+
52
+ def destroy
53
+ config_set('object_group', 'entry_destroy', @set_args)
54
+ end
55
+
56
+ def self.object_group_entries
57
+ hash = {}
58
+ grps = config_get('object_group', 'all_object_groups')
59
+ return hash if grps.nil?
60
+ grps.each do |afi, type, name|
61
+ lafi = afi
62
+ lafi = 'ipv4' if afi == 'ip'
63
+ hash[lafi] ||= {}
64
+ hash[lafi][type] ||= {}
65
+ hash[lafi][type][name] ||= {}
66
+ entries = config_get('object_group', 'all_entries',
67
+ afi: Acl.afi_cli(lafi),
68
+ type: type,
69
+ grp_name: name)
70
+ next if entries.nil?
71
+ entries.each do |seqno|
72
+ hash[lafi][type][name][seqno] =
73
+ ObjectGroupEntry.new(lafi, type, name, seqno)
74
+ end
75
+ end
76
+ hash
77
+ end
78
+
79
+ def entry_get
80
+ str = config_get('object_group', 'entry', @get_args)
81
+ return nil if str.nil?
82
+ str = str.strip
83
+
84
+ # rubocop:disable Metrics/LineLength
85
+ regexp = Regexp.new('(?<seqno>\d+)'\
86
+ ' *(?<address>host \S+|[:\.0-9a-fA-F]+ [:\.0-9a-fA-F]+|[:\.0-9a-fA-F]+\/\d+)?'\
87
+ ' *(?<port>range \S+ \S+|(lt|eq|gt|neq) \S+)?')
88
+ # rubocop:enable Metrics/LineLength
89
+ regexp.match(str)
90
+ end
91
+
92
+ def entry_set(attrs)
93
+ if attrs.empty?
94
+ attrs[:state] = 'no'
95
+ else
96
+ destroy if seqno
97
+ attrs[:state] = ''
98
+ end
99
+ set_args_keys_default
100
+ set_args_keys(attrs)
101
+ [:address,
102
+ :port,
103
+ ].each do |p|
104
+ attrs[p] = '' if attrs[p].nil?
105
+ send(p.to_s + '=', attrs[p])
106
+ end
107
+ @get_args = @set_args
108
+ config_set('object_group', 'entry', @set_args)
109
+ end
110
+
111
+ # PROPERTIES
112
+ # ----------
113
+ def seqno
114
+ match = entry_get
115
+ return nil if match.nil?
116
+ match.names.include?('seqno') ? match[:seqno] : nil
117
+ end
118
+
119
+ def address
120
+ match = entry_get
121
+ return nil if match.nil?
122
+ addr = match[:address]
123
+ return nil if addr.nil?
124
+ # Normalize addr. Some platforms zero_pad ipv6 addrs.
125
+ addr.gsub!(/^0*/, '').gsub!(/:0*/, ':')
126
+ addr
127
+ end
128
+
129
+ def address=(address)
130
+ @set_args[:address] = address
131
+ end
132
+
133
+ def port
134
+ match = entry_get
135
+ return nil if match.nil?
136
+ match.names.include?('port') ? match[:port] : nil
137
+ end
138
+
139
+ def port=(port)
140
+ @set_args[:port] = port
141
+ end
142
+ end # class
143
+ end # module
@@ -0,0 +1,142 @@
1
+ # VXLAN global provider class
2
+ # Provides configuration of anycast gateways and duplicate host IP and
3
+ # mac detection
4
+ #
5
+ # Alok Aggarwal, October 2015
6
+ #
7
+ # Copyright (c) 2014-2016 Cisco and/or its affiliates.
8
+ #
9
+ # Licensed under the Apache License, Version 2.0 (the "License");
10
+ # you may not use this file except in compliance with the License.
11
+ # You may obtain a copy of the License at
12
+ #
13
+ # http://www.apache.org/licenses/LICENSE-2.0
14
+ #
15
+ # Unless required by applicable law or agreed to in writing, software
16
+ # distributed under the License is distributed on an "AS IS" BASIS,
17
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18
+ # See the License for the specific language governing permissions and
19
+ # limitations under the License.
20
+
21
+ require_relative 'cisco_cmn_utils'
22
+ require_relative 'feature'
23
+ require_relative 'node_util'
24
+
25
+ module Cisco
26
+ # node_utils class for overlay_global
27
+ class OverlayGlobal < NodeUtil
28
+ # ----------
29
+ # PROPERTIES
30
+ # ----------
31
+
32
+ # dup-host-ip-addr-detection
33
+ def dup_host_ip_addr_detection
34
+ match = config_get('overlay_global', 'dup_host_ip_addr_detection')
35
+ if match.nil?
36
+ default_dup_host_ip_addr_detection
37
+ else
38
+ match.collect(&:to_i)
39
+ end
40
+ end
41
+
42
+ def dup_host_ip_addr_detection_host_moves
43
+ host_moves, _timeout = dup_host_ip_addr_detection
44
+ host_moves
45
+ end
46
+
47
+ def dup_host_ip_addr_detection_timeout
48
+ _host_moves, timeout = dup_host_ip_addr_detection
49
+ timeout
50
+ end
51
+
52
+ def dup_host_ip_addr_detection_set(host_moves, timeout)
53
+ Feature.fabric_forwarding_enable
54
+ Feature.nv_overlay_evpn_enable
55
+ if host_moves == default_dup_host_ip_addr_detection_host_moves &&
56
+ timeout == default_dup_host_ip_addr_detection_timeout
57
+ state = 'no'
58
+ else
59
+ state = ''
60
+ end
61
+ set_args = { state: state, host_moves: host_moves, timeout: timeout }
62
+ config_set('overlay_global', 'dup_host_ip_addr_detection', set_args)
63
+ end
64
+
65
+ def default_dup_host_ip_addr_detection
66
+ [default_dup_host_ip_addr_detection_host_moves,
67
+ default_dup_host_ip_addr_detection_timeout]
68
+ end
69
+
70
+ def default_dup_host_ip_addr_detection_host_moves
71
+ config_get_default('overlay_global',
72
+ 'dup_host_ip_addr_detection_host_moves')
73
+ end
74
+
75
+ def default_dup_host_ip_addr_detection_timeout
76
+ config_get_default('overlay_global', 'dup_host_ip_addr_detection_timeout')
77
+ end
78
+
79
+ # dup-host-mac-detection
80
+ def dup_host_mac_detection
81
+ match = config_get('overlay_global', 'dup_host_mac_detection')
82
+ if match.nil?
83
+ default_dup_host_mac_detection
84
+ else
85
+ match.collect(&:to_i)
86
+ end
87
+ end
88
+
89
+ def dup_host_mac_detection_host_moves
90
+ host_moves, _timeout = dup_host_mac_detection
91
+ host_moves
92
+ end
93
+
94
+ def dup_host_mac_detection_timeout
95
+ _host_moves, timeout = dup_host_mac_detection
96
+ timeout
97
+ end
98
+
99
+ def dup_host_mac_detection_set(host_moves, timeout)
100
+ set_args = { host_moves: host_moves, timeout: timeout }
101
+ config_set('overlay_global', 'dup_host_mac_detection', set_args)
102
+ end
103
+
104
+ def default_dup_host_mac_detection
105
+ [default_dup_host_mac_detection_host_moves,
106
+ default_dup_host_mac_detection_timeout]
107
+ end
108
+
109
+ def default_dup_host_mac_detection_host_moves
110
+ config_get_default('overlay_global', 'dup_host_mac_detection_host_moves')
111
+ end
112
+
113
+ def default_dup_host_mac_detection_timeout
114
+ config_get_default('overlay_global', 'dup_host_mac_detection_timeout')
115
+ end
116
+
117
+ # anycast-gateway-mac
118
+ def anycast_gateway_mac
119
+ mac = config_get('overlay_global', 'anycast_gateway_mac')
120
+ mac.nil? || mac.empty? ? default_anycast_gateway_mac : mac.downcase
121
+ end
122
+
123
+ def anycast_gateway_mac=(mac_addr)
124
+ fail TypeError unless mac_addr.is_a?(String)
125
+
126
+ Feature.nv_overlay_evpn_enable
127
+ Feature.fabric_forwarding_enable
128
+ if mac_addr == default_anycast_gateway_mac
129
+ state = 'no'
130
+ mac_addr = ''
131
+ else
132
+ state = ''
133
+ end
134
+ config_set('overlay_global', 'anycast_gateway_mac',
135
+ state: state, mac_addr: mac_addr)
136
+ end
137
+
138
+ def default_anycast_gateway_mac
139
+ config_get_default('overlay_global', 'anycast_gateway_mac')
140
+ end
141
+ end # class
142
+ end # module
@@ -0,0 +1,131 @@
1
+ #
2
+ # NXAPI implementation of PIM class
3
+ #
4
+ # Smitha Gopalan, November 2015
5
+ #
6
+ # Copyright (c) 2015-2016 Cisco and/or its affiliates.
7
+ #
8
+ # Licensed under the Apache License, Version 2.0 (the "License");
9
+ # you may not use this file except in compliance with the License.
10
+ # You may obtain a copy of the License at
11
+ #
12
+ # http://www.apache.org/licenses/LICENSE-2.0
13
+ #
14
+ # Unless required by applicable law or agreed to in writing, software
15
+ # distributed under the License is distributed on an "AS IS" BASIS,
16
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ # See the License for the specific language governing permissions and
18
+ # limitations under the License.
19
+
20
+ require_relative 'node_util'
21
+
22
+ module Cisco
23
+ # node_utils class for Pim
24
+ class Pim < NodeUtil
25
+ attr_reader :vrf, :afi
26
+
27
+ # Constructor with vrf
28
+ # ---------------------
29
+ def initialize(afi, vrf, instantiate=true)
30
+ fail ArgumentError unless vrf.is_a?(String) || vrf.length > 0
31
+ @vrf = vrf
32
+ @afi = Pim.afi_cli(afi)
33
+ set_args_keys_default
34
+
35
+ Feature.pim_enable if instantiate
36
+ end
37
+
38
+ # self.pims returns a hash of all current pim objects.
39
+ # There will be one object for each vrf. This method has slightly different
40
+ # behavior than most of the other "get all objects" methods because the
41
+ # pim properties are standalone and do not reside in a "pim" container;
42
+ # therefore, this method simply returns a pim object for each vrf
43
+ # regardless of whether there are any specific pim properties currently
44
+ # defined for the context.
45
+ def self.pims
46
+ afis = %w(ipv4) # TBD: No support for ipv6 at this time
47
+ hash_final = {}
48
+ return hash_final unless Feature.pim_enabled?
49
+ afis.each do |afi|
50
+ hash_final[afi] = {}
51
+ default_vrf = 'default'
52
+ hash_final[afi][default_vrf] = Pim.new(afi, default_vrf, false)
53
+
54
+ # Now the vrf's
55
+ vrf_ids = config_get('vrf', 'all_vrfs')
56
+ vrf_ids.delete_if { |vrf_id| vrf_id == 'management' }
57
+ vrf_ids.each do |vrf|
58
+ hash_final[afi][vrf] = Pim.new(afi, vrf, false)
59
+ end
60
+ end
61
+ hash_final
62
+ rescue Cisco::CliError => e
63
+ # cmd will syntax reject when feature is not enabled
64
+ raise unless e.clierror =~ /Syntax error/
65
+ return {}
66
+ end
67
+
68
+ def self.afi_cli(afi)
69
+ # Add ipv6 support later
70
+ fail ArgumentError, "Argument afi must be 'ipv4'" unless
71
+ afi[/(ipv4)/]
72
+ afi[/ipv4/] ? 'ip' : afi
73
+ end
74
+
75
+ def set_args_keys_default
76
+ keys = { afi: @afi }
77
+ keys[:vrf] = @vrf unless @vrf == 'default'
78
+ @get_args = @set_args = keys
79
+ end
80
+
81
+ def set_args_keys(hash={}) # rubocop:disable Style/AccessorMethodName
82
+ set_args_keys_default
83
+ @set_args = @get_args.merge!(hash) unless hash.empty?
84
+ end
85
+
86
+ # This destroy method is different than most because pim does not have a
87
+ # "container" for properties, they simply exist in a given vrf context.
88
+ # For that reason destroy needs to explicitly set each property
89
+ # to its default state.
90
+ def destroy
91
+ return unless Feature.pim_enabled?
92
+ self.ssm_range = ''
93
+ self.bfd = false
94
+ end
95
+
96
+ #-----------
97
+ # Properties
98
+ #-----------
99
+ def ssm_range
100
+ config_get('pim', 'ssm_range', @get_args)
101
+ end
102
+
103
+ def ssm_range=(range)
104
+ if range.empty?
105
+ state = 'no'
106
+ range = ssm_range
107
+ return if range.nil?
108
+ else
109
+ state = ''
110
+ end
111
+ set_args_keys(state: state, ssm_range: range)
112
+ config_set('pim', 'ssm_range', @set_args)
113
+ end
114
+
115
+ def bfd
116
+ config_get('pim', 'bfd', @get_args)
117
+ end
118
+
119
+ def bfd=(val)
120
+ return if val == bfd
121
+ state = val ? '' : 'no'
122
+ set_args_keys(state: state)
123
+ Feature.bfd_enable if val
124
+ config_set('pim', 'bfd', @set_args)
125
+ end
126
+
127
+ def default_bfd
128
+ config_get_default('pim', 'bfd')
129
+ end
130
+ end # Class
131
+ end # Module
@@ -0,0 +1,109 @@
1
+ # NXAPI implementation of the PimGroupList class
2
+ #
3
+ # Smitha Gopalan, November 2015
4
+ #
5
+ # Copyright (c) 2014-2016 Cisco and/or its affiliates.
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+
19
+ require_relative 'node_util'
20
+ require_relative 'pim'
21
+
22
+ module Cisco
23
+ # node_utils class for pim grouplist
24
+ class PimGroupList < NodeUtil
25
+ attr_reader :afi, :rp_addr, :group, :vrf
26
+
27
+ # Constructor with grouplist and vrf
28
+ # ----------------------------------
29
+ def initialize(afi, vrf, rp_addr, group, instantiate=true)
30
+ fail ArgumentError unless vrf.is_a?(String) || vrf.length > 0
31
+ @afi = Pim.afi_cli(afi)
32
+ @rp_addr = rp_addr
33
+ @group = group
34
+ @vrf = vrf
35
+ set_args_keys_default
36
+
37
+ create if instantiate
38
+ end
39
+
40
+ # Create a hash of [afi][vrf][rp-addr,grouplist]
41
+ # --------------------------------------------------
42
+ def self.group_lists
43
+ afis = %w(ipv4) # TBD ipv6
44
+ hash = {}
45
+ return hash unless Feature.pim_enabled?
46
+ afis.each do |afi|
47
+ hash[afi] = {}
48
+ default_vrf = 'default'
49
+ get_args = { afi: Pim.afi_cli(afi) }
50
+ rp_addrs = config_get('pim', 'all_group_lists', get_args)
51
+ unless rp_addrs.nil?
52
+ rp_addrs.each do |addr_and_group|
53
+ addr, group = addr_and_group
54
+ hash[afi][default_vrf] ||= {}
55
+ hash[afi][default_vrf][addr_and_group] =
56
+ PimGroupList.new(afi, default_vrf, addr, group, false)
57
+ end
58
+ end
59
+ vrf_ids = config_get('vrf', 'all_vrfs')
60
+ vrf_ids.each do |vrf|
61
+ get_args = { vrf: vrf, afi: Pim.afi_cli(afi) }
62
+ rp_addrs = config_get('pim', 'all_group_lists', get_args)
63
+ next if rp_addrs.nil?
64
+ rp_addrs.each do |addr_and_group|
65
+ hash[afi][vrf] ||= {}
66
+ addr, group = addr_and_group
67
+ hash[afi][vrf][addr_and_group] =
68
+ PimGroupList.new(afi, vrf, addr, group, false)
69
+ end
70
+ end
71
+ end
72
+ hash
73
+ rescue Cisco::CliError => e
74
+ # cmd will syntax reject when feature is not enabled
75
+ raise unless e.clierror =~ /Syntax error/
76
+ return {}
77
+ end
78
+
79
+ # set_args_keys_default
80
+ # ---------------------
81
+ def set_args_keys_default
82
+ keys = { afi: @afi, addr: @rp_addr, group: @group }
83
+ keys[:vrf] = @vrf unless @vrf == 'default'
84
+ @get_args = @set_args = keys
85
+ end
86
+
87
+ # set_args_key
88
+ # -------------
89
+ def set_args_keys(hash={}) # rubocop:disable Style/AccessorMethodName
90
+ set_args_keys_default
91
+ @set_args = @get_args.merge!(hash) unless hash.empty?
92
+ end
93
+
94
+ # Create pim grouplist instance
95
+ # ---------------------------------
96
+ def create
97
+ Feature.pim_enable
98
+ set_args_keys(state: '')
99
+ config_set('pim', 'group_list', @set_args)
100
+ end
101
+
102
+ # Destroy pim grouplist instance
103
+ # ----------------------------------
104
+ def destroy
105
+ set_args_keys(state: 'no')
106
+ config_set('pim', 'group_list', @set_args)
107
+ end
108
+ end
109
+ end