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,178 @@
1
+ # NXAPI implementation of BridgeDomain class
2
+ #
3
+ # February 2016, Rohan Gandhi Korlepara
4
+ #
5
+ # Copyright (c) 2015-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 'feature'
21
+
22
+ module Cisco
23
+ # node_utils class for bridge_domain
24
+ class BridgeDomain < NodeUtil
25
+ attr_reader :bd_ids
26
+
27
+ def initialize(bds, instantiate=true)
28
+ # Spaces are removed as bridge-domain cli doesn't accept value with
29
+ # space
30
+ @bd_ids = bds.to_s.gsub(/\s+/, '')
31
+ fail 'bridge-domain value is empty' if @bd_ids.empty? # no empty strings
32
+
33
+ create if instantiate
34
+ end
35
+
36
+ def to_s
37
+ "Bridge Domain #{bd_ids}"
38
+ end
39
+
40
+ # This will expand the string to a list of bds as integers
41
+ def self.bd_ids_to_array(bdid_string)
42
+ list = []
43
+ narray = bdid_string.split(',')
44
+ narray.each do |elem|
45
+ if elem.include?('-')
46
+ es = elem.gsub('-', '..')
47
+ ea = es.split('..').map { |d| Integer(d) }
48
+ er = ea[0]..ea[1]
49
+ list << er.to_a
50
+ else
51
+ list << elem.to_i
52
+ end
53
+ end
54
+ list.flatten
55
+ end
56
+
57
+ # This method will generate a batched string if a list is passed as
58
+ # argument
59
+ # Input would be as [1,2,3,4,5,10,11,12,7,30,100,31,32]
60
+ # output will be 1-5,10-12,7,30,100,31-32
61
+ def self.bd_list_to_string(bd_list)
62
+ farray = bd_list.compact
63
+ lranges = []
64
+ unless farray.empty?
65
+ left = bd_list.first
66
+ right = nil
67
+ farray.each do |aelem|
68
+ if right && aelem != right.succ
69
+ if left == right
70
+ lranges << left
71
+ else
72
+ lranges << Range.new(left, right)
73
+ end
74
+ left = aelem
75
+ end
76
+ right = aelem
77
+ end
78
+ if left == right
79
+ lranges << left
80
+ else
81
+ lranges << Range.new(left, right)
82
+ end
83
+ end
84
+ lranges.to_s.gsub('..', '-').delete('[').delete(']').delete(' ')
85
+ end
86
+
87
+ def self.bds
88
+ hash = {}
89
+ bd_list = config_get('bridge_domain', 'all_bds')
90
+ return hash if bd_list.nil?
91
+
92
+ final_bd_list =
93
+ bd_list.map { |elem| BridgeDomain.bd_ids_to_array(elem) }
94
+ .flatten.uniq.sort
95
+ final_bd_list.each do |id|
96
+ hash[id.to_s] = BridgeDomain.new(id, false)
97
+ end
98
+ hash
99
+ end
100
+
101
+ # This function will first add bds to the system bridge-domain and then
102
+ # create the bds. If bds already existing then just create. Else add the
103
+ # non added bds to system range first then create all. This is to avoid the
104
+ # idempotency issue as system add command throws error if a bd is already
105
+ # present in the system range.
106
+ def create
107
+ sys_bds_array = BridgeDomain.bd_ids_to_array(system_bridge_domain)
108
+ inp_bds_array = BridgeDomain.bd_ids_to_array(@bd_ids)
109
+ if (inp_bds_array - sys_bds_array).any?
110
+ add_bds = BridgeDomain.bd_list_to_string(inp_bds_array - sys_bds_array)
111
+ config_set('bridge_domain', 'system_bridge_domain', oper: 'add',
112
+ bd: add_bds)
113
+ end
114
+ config_set('bridge_domain', 'create', bd: @bd_ids)
115
+ end
116
+
117
+ def destroy
118
+ config_set('bridge_domain', 'destroy', bd: @bd_ids)
119
+ config_set('bridge_domain', 'system_bridge_domain', oper: 'remove',
120
+ bd: @bd_ids)
121
+ end
122
+
123
+ ########################################################
124
+ # PROPERTIES #
125
+ ########################################################
126
+
127
+ def bd_name
128
+ config_get('bridge_domain', 'bd_name', bd: @bd_ids)
129
+ end
130
+
131
+ def bd_name=(str)
132
+ state = str.empty? ? 'no' : ''
133
+ config_set('bridge_domain', 'bd_name', bd: @bd_ids, state: state,
134
+ name: str)
135
+ end
136
+
137
+ # This default getter is a bit different them most. When a brige-domain
138
+ # gets created it gets a default name assigned that follows the pattern
139
+ # 'Bridge-DomainX' where X is the bridge domain id (@bd_ids).
140
+ def default_bd_name
141
+ 'Bridge-Domain' + @bd_ids
142
+ end
143
+
144
+ # This type property can be defined only for one bd
145
+ def fabric_control
146
+ match = config_get('bridge_domain', 'fabric_control', bd: @bd_ids)
147
+ match.to_s == @bd_ids ? true : false
148
+ end
149
+
150
+ def fabric_control=(val)
151
+ state = (val) ? '' : 'no'
152
+ config_set('bridge_domain', 'fabric_control', bd: @bd_ids, state: state)
153
+ end
154
+
155
+ def default_fabric_control
156
+ config_get_default('bridge_domain', 'fabric_control')
157
+ end
158
+
159
+ def shutdown
160
+ match = config_get('bridge_domain', 'shutdown', bd: @bd_ids)
161
+ match == 'Noshutdown' ? false : true
162
+ end
163
+
164
+ def shutdown=(val)
165
+ state = (val) ? '' : 'no'
166
+ config_set('bridge_domain', 'shutdown', bd: @bd_ids, state: state)
167
+ end
168
+
169
+ def default_shutdown
170
+ config_get_default('bridge_domain', 'shutdown')
171
+ end
172
+
173
+ # getter for system bridge-domain
174
+ def system_bridge_domain
175
+ config_get('bridge_domain', 'system_bridge_domain')
176
+ end
177
+ end # Class
178
+ end # Module
@@ -0,0 +1,206 @@
1
+ # NXAPI implementation of BridgeDomainVNI class
2
+ #
3
+ # February 2016, Rohan Gandhi Korlepara
4
+ #
5
+ # Copyright (c) 2015-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 'feature'
21
+
22
+ module Cisco
23
+ # node_utils class for bridge_domain_vni
24
+ class BridgeDomainVNI < NodeUtil
25
+ attr_reader :bd_ids, :bd_ids_list
26
+
27
+ def initialize(bds, instantiate=true)
28
+ # Spaces are removed as bridge-domain cli doesn't accept value with
29
+ # space
30
+ @bd_ids = bds.to_s.gsub(/\s+/, '')
31
+ fail 'bridge-domain value is empty' if @bd_ids.empty? # no empty strings
32
+
33
+ @bd_ids_list = BridgeDomainVNI.string_to_array(@bd_ids)
34
+ create if instantiate
35
+ end
36
+
37
+ def to_s
38
+ "Bridge Domain #{bd_ids}"
39
+ end
40
+
41
+ def self.range_bds
42
+ hash = {}
43
+ bd_list = config_get('bridge_domain_vni', 'range_bds')
44
+ return hash if bd_list.nil?
45
+
46
+ bd_list.each do |id|
47
+ hash[id] = BridgeDomainVNI.new(id, false)
48
+ end
49
+ hash
50
+ end
51
+
52
+ # This will expand the string to a list of bds as integers
53
+ def self.string_to_array(string)
54
+ list = []
55
+ narray = string.split(',')
56
+ narray.each do |elem|
57
+ if elem.include?('-')
58
+ es = elem.gsub('-', '..')
59
+ ea = es.split('..').map { |d| Integer(d) }
60
+ er = ea[0]..ea[1]
61
+ list << er.to_a
62
+ else
63
+ list << elem.to_i
64
+ end
65
+ end
66
+ list.flatten
67
+ end
68
+
69
+ # Example clis;
70
+ # system bridge-domain 101-200
71
+ # bridge-domain 101-200
72
+ # bridge-domain 101-110,120,141-145,180
73
+ # member vni 6001-6011,5041-5044,8000,9000
74
+ #
75
+ # config_get('bridge_domain_vni', 'member_vni')
76
+ # will get the current member vni in this case
77
+ # 6001-6011,5041-5044,8000,9000
78
+ #
79
+ # config_get('bridge_domain_vni', 'member_vni_bd')
80
+ # will get the current bd's mapped to member vni in this case
81
+ # 101-110,120,141-145,180
82
+ #
83
+ # The @bd_ids_list which is created when the BridgeDomainVNI object is
84
+ # initialized which could be 101-110 bd range.
85
+ # hash_map will have 101=>6001,102=>6002...120=>6011,141=>5041...180=>9000
86
+ # And the final_bd_vni hash will be based of the initialized list
87
+ # 101=>6001,102=>6002,103=>6003....110=>6010 only.
88
+ def curr_bd_vni_hash
89
+ final_bd_vni = {}
90
+ curr_vni = config_get('bridge_domain_vni', 'member_vni')
91
+ curr_bd_vni = config_get('bridge_domain_vni', 'member_vni_bd')
92
+ return final_bd_vni if curr_vni.empty? || curr_bd_vni.empty?
93
+
94
+ curr_vni_list = BridgeDomainVNI.string_to_array(curr_vni)
95
+ curr_bd_vni_list = BridgeDomainVNI.string_to_array(curr_bd_vni)
96
+
97
+ hash_map = Hash[curr_bd_vni_list.zip(curr_vni_list.map)]
98
+ @bd_ids_list.each do |bd|
99
+ final_bd_vni[bd.to_i] = hash_map[bd.to_i] if hash_map.key?(bd.to_i)
100
+ end
101
+ final_bd_vni
102
+ end
103
+
104
+ # This function will first add bds to the system bridge-domain and then
105
+ # create the bds. If bds already existing then just create. Else add the
106
+ # non added bds to system range first then create all. This is to avoid the
107
+ # idempotency issue as system add command throws error if a bd is already
108
+ # present in the system range.
109
+ def create
110
+ sys_bds_array = BridgeDomainVNI.string_to_array(system_bridge_domain)
111
+ if (@bd_ids_list - sys_bds_array).any?
112
+ add_bds = Utils
113
+ .array_to_str((@bd_ids_list - sys_bds_array), false)
114
+ config_set('bridge_domain_vni', 'system_bridge_domain', oper: 'add',
115
+ bd: add_bds)
116
+ end
117
+ config_set('bridge_domain_vni', 'create', bd: @bd_ids)
118
+ end
119
+
120
+ def destroy
121
+ bd_vni = curr_bd_vni_hash
122
+ bd_val = bd_vni.keys.join(',')
123
+ vni_val = bd_vni.values.join(',')
124
+ return '' if vni_val.empty?
125
+ config_set('bridge_domain_vni', 'member_vni', bd: bd_val,
126
+ membstate: 'no', membvni: vni_val)
127
+ config_set('bridge_domain_vni', 'vni', state: 'no', vni: vni_val)
128
+ end
129
+
130
+ ########################################################
131
+ # PROPERTIES #
132
+ ########################################################
133
+
134
+ # Bridge-Domain member vni assigning case
135
+ # Not all the bds created or initialized in this class context can have the
136
+ # member vni's mapped. So will get the vnis of the ones which are mapped to
137
+ # the bds.
138
+ # Eg: Suppose the bd mapping is as below on the switch
139
+ # bridge-domain 100,105,107-109,150
140
+ # member vni 5000, 8000, 5007-5008, 7000, 5050
141
+ # If puppet layer tries to get values of 100,105,107 bds as defined in
142
+ # manifest then the final_bd_vni map which is returned will contain only
143
+ # these mappings as below;
144
+ # '5000,8000,5007'
145
+ # This is also to handle the idempotence case, and if any mismatch then set
146
+ # the member_vni
147
+ def member_vni
148
+ bd_vni_hash = curr_bd_vni_hash
149
+ ret_list = []
150
+ @bd_ids_list.each do |bd|
151
+ ret_list << bd_vni_hash[bd]
152
+ end
153
+ Utils.array_to_str(ret_list, false)
154
+ end
155
+
156
+ # This member_vni mapping will be executed only when the val is not empty
157
+ # else it will be treated as a 'no' cli and executed as required.
158
+ # If the mappings do not match in any fashion then cli normally returns a
159
+ # failure which will be handled.
160
+ # During set of member vni we first see if any bd is mapped to some other
161
+ # vni, if yes then remove that one and apply the new vni.
162
+ # Eg: bridge-domain 100-110
163
+ # member vni 5100-5110
164
+ # Now the manifest is changed to 5100-5105,6106-6110, so hence first
165
+ # 5106-5110 mapping is removed and then 6106-6110 is applied.
166
+ def member_vni=(val)
167
+ val = val.to_s
168
+ Feature.vni_enable
169
+ bd_vni = curr_bd_vni_hash
170
+ if val.empty?
171
+ bd_val = bd_vni.keys.join(',')
172
+ vni_val = bd_vni.values.join(',')
173
+ return '' if vni_val.empty?
174
+ config_set('bridge_domain_vni', 'member_vni', bd: bd_val,
175
+ membstate: 'no', membvni: vni_val)
176
+ config_set('bridge_domain_vni', 'vni', state: 'no', vni: vni_val)
177
+ else
178
+ unless bd_vni.empty?
179
+ inp_vni_list = BridgeDomainVNI.string_to_array(val.to_s)
180
+ inp_bd_vni_hash = Hash[@bd_ids_list.zip(inp_vni_list)]
181
+
182
+ temp_hash = bd_vni.to_a.keep_if { |k, _v| inp_bd_vni_hash.key? k }
183
+ rem_hash = (temp_hash.to_a - inp_bd_vni_hash.to_a).to_h
184
+
185
+ rm_bd = rem_hash.keys.join(',')
186
+ rm_vni = rem_hash.values.join(',')
187
+ config_set('bridge_domain_vni', 'member_vni', bd: rm_bd,
188
+ membstate: 'no', membvni: rm_vni)
189
+ config_set('bridge_domain_vni', 'vni', state: 'no', vni: rm_vni)
190
+ end
191
+ config_set('bridge_domain_vni', 'vni', state: '', vni: val)
192
+ config_set('bridge_domain_vni', 'member_vni', bd: @bd_ids,
193
+ membstate: '', membvni: val)
194
+ end
195
+ end
196
+
197
+ def default_member_vni
198
+ config_get_default('bridge_domain_vni', 'member_vni')
199
+ end
200
+
201
+ # getter for system bridge-domain
202
+ def system_bridge_domain
203
+ config_get('bridge_domain_vni', 'system_bridge_domain')
204
+ end
205
+ end # Class
206
+ end # Module