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,272 @@
1
+ # Copyright (c) 2016 Cisco and/or its affiliates.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require_relative 'ciscotest'
16
+ require_relative '../lib/cisco_node_utils/feature'
17
+ require_relative '../lib/cisco_node_utils/vdc'
18
+
19
+ include Cisco
20
+
21
+ # TestFeature - Minitest for feature class
22
+ class TestFeature < CiscoTestCase
23
+ @skip_unless_supported = 'feature'
24
+
25
+ def teardown
26
+ # f3 cleanup for non-f3 N7k's
27
+ vdc_limit_f3_no_intf_needed(:clear) if first_or_last_teardown
28
+
29
+ ['no nv overlay evpn',
30
+ 'no feature bfd',
31
+ 'no feature bgp',
32
+ 'no feature dhcp',
33
+ 'no feature fabric forwarding',
34
+ 'no feature hsrp',
35
+ 'no feature itd',
36
+ 'no feature nv overlay',
37
+ 'no feature ospf',
38
+ 'no feature pim',
39
+ 'no feature private-vlan',
40
+ 'no feature tacacs',
41
+ 'no feature vn-segment-vlan-based',
42
+ 'no feature vni',
43
+ 'no feature vtp'].each { |f| config_no_warn(f) }
44
+
45
+ # Special case for 'no feature-set fex'
46
+ # Some image versions prompt y/n to remove the feature-set.
47
+ config_no_warn('terminal dont-ask')
48
+ config_no_warn('no feature-set fex')
49
+ end
50
+
51
+ ###########
52
+ # Helpers #
53
+ ###########
54
+
55
+ # feature test helper
56
+ def feature(feat)
57
+ # Get the feature name string from the yaml
58
+ ref = cmd_ref.lookup('feature', feat).to_s[/set_value:.*feature (.*)/]
59
+
60
+ if ref
61
+ feat_str = Regexp.last_match[1]
62
+ refute_nil(feat_str)
63
+ else
64
+ skip("'feature','#{feat}' is unsupported on this node")
65
+ end
66
+
67
+ # Get current state of feature, then disable it
68
+ pre_clean_enabled = Feature.send("#{feat}_enabled?")
69
+ config("no feature #{feat_str}") if pre_clean_enabled
70
+ refute_show_match(
71
+ command: "show running | i '#{feat_str}'",
72
+ pattern: /^#{feat_str}$/,
73
+ msg: "#{feat} (#{feat_str}) is still enabled",
74
+ )
75
+
76
+ Feature.send("#{feat}_enable")
77
+ # Some features (BGP on n5k!) are slow starters...
78
+ unless Feature.send("#{feat}_enabled?")
79
+ sleep 1
80
+ node.cache_flush
81
+ end
82
+ assert(Feature.send("#{feat}_enabled?"),
83
+ "Feature #{feat} (#{feat_str}) is not enabled")
84
+
85
+ # Return testbed to pre-clean state
86
+ config("no feature #{feat_str}") unless pre_clean_enabled
87
+ rescue RuntimeError => e
88
+ hardware_supports_feature?(e.message)
89
+ end
90
+
91
+ ###################
92
+ # Feature tests #
93
+ ###################
94
+
95
+ def test_bfd
96
+ feature('bfd')
97
+ end
98
+
99
+ def test_bgp
100
+ feature('bgp')
101
+ end
102
+
103
+ def test_dhcp
104
+ feature('dhcp')
105
+ end
106
+
107
+ def test_hsrp
108
+ feature('hsrp')
109
+ end
110
+
111
+ def test_fabric_forwarding
112
+ if node.product_id[/N(3)/] && !node.product_id.include?('-F')
113
+ assert_nil(Feature.fabric_forwarding_enabled?)
114
+ assert_raises(Cisco::UnsupportedError) do
115
+ Feature.fabric_forwarding_enable
116
+ end
117
+ return
118
+ end
119
+ skip('This feature is only supported on 7.0(3)I2 images') unless
120
+ node.os_version[/7.0\(3\)I2\(/]
121
+ feature('fabric_forwarding')
122
+ end
123
+
124
+ def test_nv_overlay
125
+ if validate_property_excluded?('feature', 'nv_overlay')
126
+ assert_nil(Feature.nv_overlay_enabled?)
127
+ assert_raises(Cisco::UnsupportedError) { Feature.nv_overlay_enable }
128
+ return
129
+ end
130
+ vdc_limit_f3_no_intf_needed(:set)
131
+ feature('nv_overlay')
132
+ end
133
+
134
+ def test_nv_overlay_evpn
135
+ if node.product_id[/N(3)/] && !node.product_id.include?('-F')
136
+ assert_nil(Feature.nv_overlay_evpn_enabled?)
137
+ assert_raises(Cisco::UnsupportedError) { Feature.nv_overlay_evpn_enable }
138
+ return
139
+ end
140
+
141
+ vdc_limit_f3_no_intf_needed(:set)
142
+ # nv_overlay_evpn can't use the 'feature' helper so test it explicitly here
143
+ # Get current state of feature, then disable it
144
+ pre_clean_enabled = Feature.nv_overlay_evpn_enabled?
145
+ feat_str = 'nv overlay evpn'
146
+ config("no #{feat_str}") if pre_clean_enabled
147
+
148
+ refute_show_match(
149
+ command: "show running | i #{feat_str}",
150
+ pattern: /^#{feat_str}$/,
151
+ msg: "(#{feat_str}) is still enabled",
152
+ )
153
+ Feature.nv_overlay_evpn_enable
154
+ assert(Feature.nv_overlay_evpn_enabled?,
155
+ "(#{feat_str}) is not enabled")
156
+ end
157
+
158
+ def test_ospf
159
+ feature('ospf')
160
+ end
161
+
162
+ def test_pim
163
+ feature('pim')
164
+ end
165
+
166
+ def test_private_vlan
167
+ feature('private_vlan')
168
+ end
169
+
170
+ def test_tacacs
171
+ feature('tacacs')
172
+ end
173
+
174
+ def test_vn_segment_vlan_based
175
+ vxlan_linecard?
176
+ Feature.fabricpath_enable if node.product_id[/N(5|6)/]
177
+ Feature.nv_overlay_enable unless node.product_id[/N(3|5|6)/]
178
+ feature('vn_segment_vlan_based')
179
+ rescue RuntimeError => e
180
+ hardware_supports_feature?(e.message)
181
+ end
182
+
183
+ def test_vni
184
+ # 7k: 'feature vni'; All others: 'feature vn-segment-vlan-based'.
185
+ # Dependencies: 5/6k: feature-set fabricpath; 3/9k: feature nv overlay
186
+ if node.product_id[/N7/]
187
+ # vni can't be removed if nv overlay is present
188
+ config_no_warn('no feature nv overlay')
189
+ vdc_limit_f3_no_intf_needed(:set)
190
+ end
191
+ Feature.fabricpath_enable if node.product_id[/N(5|6)/]
192
+ feature('vni')
193
+ rescue RuntimeError => e
194
+ hardware_supports_feature?(e.message)
195
+ end
196
+
197
+ def test_vtp
198
+ feature('vtp')
199
+ end
200
+
201
+ #####################
202
+ # Feature-set tests #
203
+ #####################
204
+
205
+ def test_feature_set_fabric
206
+ if node.product_id[/N(3|8|9)/]
207
+ assert_nil(Feature.fabric_enabled?)
208
+ assert_raises(Cisco::UnsupportedError) { Feature.fabric_enable }
209
+ return
210
+ end
211
+ vdc_limit_f3_no_intf_needed(:set)
212
+ fs = 'feature-set fabric'
213
+ # Get current state of the feature-set
214
+ feature_set_installed = Feature.fabric_installed?
215
+
216
+ config("no #{fs} ; no install #{fs}") if feature_set_installed
217
+ refute_show_match(
218
+ command: "show running | i '^install #{fs}$'",
219
+ pattern: /^install #{fs}$/,
220
+ msg: "(#{fs}) is still configured",
221
+ )
222
+
223
+ Feature.fabric_enable
224
+ assert(Feature.fabric_enabled?, "(#{fs}) is not enabled")
225
+ end
226
+
227
+ def test_feature_set_fabricpath
228
+ if node.product_id[/N(3|8|9)/]
229
+ assert_nil(Feature.fabricpath_enabled?)
230
+ assert_raises(Cisco::UnsupportedError) { Feature.fabricpath_enable }
231
+ return
232
+ end
233
+ vdc_limit_f3_no_intf_needed(:set)
234
+ fs = 'feature-set fabricpath'
235
+ # Get current state of the feature-set
236
+ feature_set_installed = Feature.fabricpath_installed?
237
+
238
+ config("no #{fs} ; no install #{fs}") if feature_set_installed
239
+ refute_show_match(
240
+ command: "show running | i '^install #{fs}$'",
241
+ pattern: /^install #{fs}$/,
242
+ msg: "(#{fs}) is still configured",
243
+ )
244
+
245
+ Feature.fabricpath_enable
246
+ assert(Feature.fabricpath_enabled?, "(#{fs}) is not enabled")
247
+ end
248
+
249
+ def test_feature_set_fex
250
+ if validate_property_excluded?('feature', 'fex')
251
+ assert_nil(Feature.fex_enabled?)
252
+ assert_raises(Cisco::UnsupportedError) { Feature.fex_enable }
253
+ return
254
+ end
255
+ fs = 'feature-set fex'
256
+
257
+ # clean
258
+ if Feature.fex_installed?
259
+ config_no_warn('terminal dont-ask')
260
+ config_no_warn("no #{fs}")
261
+ config_no_warn("no install #{fs}")
262
+ end
263
+ refute_show_match(
264
+ command: "show running | i '^install #{fs}$'",
265
+ pattern: /^install #{fs}$/,
266
+ msg: "(#{fs}) is still configured",
267
+ )
268
+
269
+ Feature.fex_enable
270
+ assert(Feature.fex_enabled?, "(#{fs}) is not enabled")
271
+ end
272
+ end
@@ -0,0 +1,166 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # October 2015, Glenn F. Matthews
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 'basetest'
20
+
21
+ # Test case for Cisco::Client::GRPC::Client class
22
+ class TestGRPC < TestCase
23
+ @@client = nil # rubocop:disable Style/ClassVars
24
+
25
+ def self.runnable_methods
26
+ # If we're pointed to an NXAPI node (as evidenced by lack of a port num)
27
+ # then these tests don't apply
28
+ return [:all_skipped] unless Cisco::Environment.environment[:port]
29
+ super
30
+ end
31
+
32
+ def all_skipped
33
+ skip 'Node under test does not appear to use the gRPC client'
34
+ end
35
+
36
+ def client
37
+ unless @@client
38
+ client = Cisco::Client::GRPC.new(Cisco::Environment.environment)
39
+ client.cache_enable = true
40
+ client.cache_auto = true
41
+ @@client = client # rubocop:disable Style/ClassVars
42
+ end
43
+ @@client
44
+ end
45
+
46
+ def test_auth_failure
47
+ env = Cisco::Environment.environment.merge(password: 'wrong password')
48
+ e = assert_raises Cisco::AuthenticationFailed do
49
+ Cisco::Client::GRPC.new(**env)
50
+ end
51
+ assert_equal('gRPC client creation failure: Failed authentication',
52
+ e.message)
53
+ end
54
+
55
+ def test_connection_failure
56
+ # Failure #1: connecting to a port that's listening for a non-gRPC protocol
57
+ env = Cisco::Environment.environment.merge(port: 23)
58
+ e = assert_raises Cisco::ConnectionRefused do
59
+ Cisco::Client::GRPC.new(**env)
60
+ end
61
+ assert_equal('gRPC client creation failure: Connection refused: ',
62
+ e.message)
63
+ # Failure #2: Connecting to a port that's not listening at all
64
+ env = Cisco::Environment.environment.merge(port: 0)
65
+ e = assert_raises Cisco::ConnectionRefused do
66
+ Cisco::Client::GRPC.new(**env)
67
+ end
68
+ assert_equal('gRPC client creation failure: ' \
69
+ 'timed out during initial connection: Deadline Exceeded',
70
+ e.message)
71
+ end
72
+
73
+ def test_set_cli_string
74
+ client.set(context: 'int gi0/0/0/0',
75
+ values: 'description panda')
76
+ run = client.get(command: 'show run int gi0/0/0/0')
77
+ assert_match(/description panda/, run)
78
+ end
79
+
80
+ def test_set_cli_array
81
+ client.set(context: ['int gi0/0/0/0'],
82
+ values: ['description elephant'])
83
+ run = client.get(command: 'show run int gi0/0/0/0')
84
+ assert_match(/description elephant/, run)
85
+ end
86
+
87
+ def test_set_cli_invalid
88
+ e = assert_raises Cisco::CliError do
89
+ client.set(context: ['int gi0/0/0/0'],
90
+ values: ['wark', 'bark bark'])
91
+ end
92
+ # rubocop:disable Style/TrailingWhitespace
93
+ assert_equal('The following commands were rejected:
94
+ int gi0/0/0/0 wark
95
+ int gi0/0/0/0 bark bark
96
+ with error:
97
+
98
+ !! SYNTAX/AUTHORIZATION ERRORS: This configuration failed due to
99
+ !! one or more of the following reasons:
100
+ !! - the entered commands do not exist,
101
+ !! - the entered commands have errors in their syntax,
102
+ !! - the software packages containing the commands are not active,
103
+ !! - the current user is not a member of a task-group that has
104
+ !! permissions to use the commands.
105
+
106
+ int gi0/0/0/0 wark
107
+ int gi0/0/0/0 bark bark
108
+
109
+ ', e.message)
110
+ # rubocop:enable Style/TrailingWhitespace
111
+ # Unlike NXAPI, a gRPC config command is always atomic
112
+ assert_empty(e.successful_input)
113
+ assert_equal(['int gi0/0/0/0 wark', 'int gi0/0/0/0 bark bark'],
114
+ e.rejected_input)
115
+ end
116
+
117
+ def test_get_cli_default
118
+ result = client.get(command: 'show debug')
119
+ s = @device.cmd('show debug')
120
+ # Strip the leading timestamp and trailing prompt from the telnet output
121
+ s = s.split("\n")[2..-2].join("\n")
122
+ assert_equal(s, result)
123
+ end
124
+
125
+ def test_get_cli_invalid
126
+ assert_raises Cisco::CliError do
127
+ client.get(command: 'show fuzz')
128
+ end
129
+ end
130
+
131
+ def test_get_cli_incomplete
132
+ assert_raises Cisco::CliError do
133
+ client.get(command: 'show ')
134
+ end
135
+ end
136
+
137
+ def test_get_cli_explicit
138
+ result = client.get(command: 'show debug', data_format: :cli)
139
+ s = @device.cmd('show debug')
140
+ # Strip the leading timestamp and trailing prompt from the telnet output
141
+ s = s.split("\n")[2..-2].join("\n")
142
+ assert_equal(s, result)
143
+ end
144
+
145
+ def test_get_cli_empty
146
+ result = client.get(command: 'show debug | include foo | exclude foo',
147
+ data_format: :cli)
148
+ assert_nil(result)
149
+ end
150
+
151
+ def test_get_cli_cache
152
+ result = client.get(command: 'show clock', data_format: :cli)
153
+ sleep 2
154
+ assert_equal(result, client.get(command: 'show clock', data_format: :cli))
155
+ end
156
+
157
+ # TODO: add structured output test cases (when supported on XR)
158
+
159
+ def test_smart_create
160
+ autoclient = Cisco::Client.create
161
+ assert_equal(Cisco::Client::GRPC, autoclient.class)
162
+ assert(autoclient.supports?(:cli))
163
+ refute(autoclient.supports?(:nxapi_structured))
164
+ assert_equal(:ios_xr, autoclient.platform)
165
+ end
166
+ end
@@ -0,0 +1,64 @@
1
+ #
2
+ # Minitest for HostName class
3
+ #
4
+ # Copyright (c) 2014-2018 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 'ciscotest'
19
+ require_relative '../lib/cisco_node_utils/hostname'
20
+
21
+ # TestHostname - Minitest for SyslogSetting node utility.
22
+ class TestHostName < CiscoTestCase
23
+ def setup
24
+ # setup runs at the beginning of each test
25
+ super
26
+ hostname_setup
27
+ end
28
+
29
+ def teardown
30
+ # teardown runs at the end of each test
31
+ hostname_teardown
32
+ super
33
+ end
34
+
35
+ @current_hostname = ''
36
+
37
+ def hostname_setup
38
+ hostname_output = Cisco::Client.filter_cli(
39
+ cli_output: config('show running-config | include ^hostname'),
40
+ value: /hostname (.*)/)
41
+ @current_hostname = hostname_output.first unless hostname_output.nil?
42
+ # Turn the feature off for a clean test.
43
+ config('no hostname')
44
+ end
45
+
46
+ def hostname_teardown
47
+ if @current_hostname != ''
48
+ config("hostname #{@current_hostname}")
49
+ else
50
+ config('no hostname')
51
+ end
52
+ end
53
+
54
+ # TESTS
55
+
56
+ def test_hostname_name
57
+ hostname_setting = Cisco::HostName.new('testhost')
58
+ assert_equal(Cisco::HostName.hostname['testhost'], hostname_setting)
59
+ hostname_setting = Cisco::HostName.new('testhost2')
60
+ assert_equal(Cisco::HostName.hostname['testhost2'], hostname_setting)
61
+ hostname_setting.send('hostname=', nil)
62
+ assert_nil(Cisco::HostName.hostname['testhost2'])
63
+ end
64
+ end
@@ -0,0 +1,79 @@
1
+ # Copyright (c) 2016 Cisco and/or its affiliates.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require_relative 'ciscotest'
16
+ require_relative '../lib/cisco_node_utils/hsrp_global'
17
+
18
+ include Cisco
19
+ # TestHsrpGlobal - Minitest for general functionality
20
+ # of the HsrpGlobal class.
21
+ class TestHsrpGlobal < CiscoTestCase
22
+ @skip_unless_supported = 'hsrp_global'
23
+
24
+ # Tests
25
+ def setup
26
+ super
27
+ config_no_warn('no feature hsrp')
28
+ end
29
+
30
+ def teardown
31
+ config_no_warn('no feature hsrp') if first_or_last_teardown
32
+ super
33
+ end
34
+
35
+ def test_collection_empty
36
+ hg = HsrpGlobal.globals
37
+ assert_empty(hg)
38
+ end
39
+
40
+ def test_destroy
41
+ hg = HsrpGlobal.new
42
+ assert_equal(true, Feature.hsrp_enabled?)
43
+
44
+ hg.destroy
45
+ [:bfd_all_intf,
46
+ :extended_hold,
47
+ ].each do |prop|
48
+ assert_equal(hg.send("default_#{prop}"), hg.send("#{prop}")) if
49
+ hg.send("#{prop}")
50
+ end
51
+ end
52
+
53
+ def test_bfd_all_intf
54
+ hg = HsrpGlobal.new
55
+ if validate_property_excluded?('hsrp_global', 'bfd_all_intf')
56
+ assert_nil(hg.bfd_all_intf)
57
+ assert_raises(Cisco::UnsupportedError) do
58
+ hg.bfd_all_intf = true
59
+ end
60
+ return
61
+ end
62
+ assert_equal(hg.default_bfd_all_intf, hg.bfd_all_intf)
63
+ hg.bfd_all_intf = true
64
+ assert_equal(true, hg.bfd_all_intf)
65
+ hg.bfd_all_intf = hg.default_bfd_all_intf
66
+ assert_equal(hg.default_bfd_all_intf, hg.bfd_all_intf)
67
+ end
68
+
69
+ def test_extended_hold
70
+ hg = HsrpGlobal.new
71
+ assert_equal(hg.default_extended_hold, hg.extended_hold)
72
+ hg.extended_hold = '100'
73
+ assert_equal('100', hg.extended_hold)
74
+ hg.extended_hold = '10'
75
+ assert_equal('10', hg.extended_hold)
76
+ hg.extended_hold = hg.default_extended_hold
77
+ assert_equal(hg.default_extended_hold, hg.extended_hold)
78
+ end
79
+ end