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,577 @@
1
+ # Copyright (c) 2013-2017 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 'ipaddr'
16
+ require 'resolv'
17
+ require_relative 'basetest'
18
+ require_relative 'platform_info'
19
+ require_relative '../lib/cisco_node_utils/bridge_domain'
20
+ require_relative '../lib/cisco_node_utils/interface'
21
+ require_relative '../lib/cisco_node_utils/node'
22
+ require_relative '../lib/cisco_node_utils/platform'
23
+ require_relative '../lib/cisco_node_utils/vlan'
24
+
25
+ include Cisco
26
+
27
+ # CiscoTestCase - base class for all node utility minitests
28
+ class CiscoTestCase < TestCase
29
+ # rubocop:disable Style/ClassVars
30
+ @@node = nil
31
+ @@interfaces = nil
32
+ @@interfaces_id = nil
33
+ @@testcases = []
34
+ @@testcase_teardowns = 0
35
+
36
+ # The feature (lib/cisco_node_utils/cmd_ref/<feature>.yaml) that this
37
+ # test case is associated with, if applicable.
38
+ # If the YAML file excludes this entire feature for this platform
39
+ # (top-level _exclude statement, not individual attributes), then
40
+ # all tests in this test case will be skipped.
41
+ @skip_unless_supported = nil
42
+
43
+ class << self
44
+ attr_accessor :skip_unless_supported
45
+ end
46
+
47
+ def self.runnable_methods
48
+ @@testcases = super
49
+ return super if skip_unless_supported.nil?
50
+ return super if node.cmd_ref.supports?(skip_unless_supported)
51
+ # If the entire feature under test is unsupported,
52
+ # undefine the setup/teardown methods (if any) and skip the whole test case
53
+ remove_method :setup if instance_methods(false).include?(:setup)
54
+ remove_method :teardown if instance_methods(false).include?(:teardown)
55
+ [:all_skipped]
56
+ end
57
+
58
+ def first_or_last_teardown
59
+ # Return true if this is the first or last teardown call.
60
+ # This hack is needed to prevent excessive post-test cleanups from
61
+ # occurring: e.g. a non-F3 N7k test class may require an expensive setup
62
+ # and teardown to enable/disable vdc settings; ideally this vdc setup
63
+ # would occur prior to the first test and vdc teardown only after the
64
+ # final test. Checks for first test case because we have to handle the
65
+ # -n option, which filters the list of runnable testcases.
66
+ # Note that Minitest.after_run is not a solution for this problem.
67
+ @@testcase_teardowns += 1
68
+ (@@testcase_teardowns == 1) || (@@testcase_teardowns == @@testcases.size)
69
+ end
70
+ # rubocop:enable Style/ClassVars
71
+
72
+ def all_skipped
73
+ skip("Skipping #{self.class}; feature " \
74
+ "'#{self.class.skip_unless_supported}' is unsupported on this node")
75
+ end
76
+
77
+ def self.node
78
+ unless @@node
79
+ # rubocop:disable Style/ClassVars
80
+ @@node = Node.instance
81
+ # rubocop:enable Style/ClassVars
82
+ @@node.cache_enable = true
83
+ @@node.cache_auto = true
84
+ # Record the platform we're running on
85
+ puts "\nNode under test:"
86
+ puts " - name - #{@@node.host_name}"
87
+ puts " - type - #{@@node.product_id}"
88
+ puts " - image - #{@@node.system}"
89
+ puts " - version - #{@@node.os_version}\n\n"
90
+ end
91
+ @@node
92
+ rescue Cisco::AuthenticationFailed
93
+ abort "Unauthorized to connect as #{username}:#{password}@#{address}"
94
+ rescue Cisco::ClientError, TypeError, ArgumentError => e
95
+ abort "Error in establishing connection: #{e}"
96
+ end
97
+
98
+ def node
99
+ self.class.node
100
+ end
101
+
102
+ def setup
103
+ super
104
+ node
105
+ end
106
+
107
+ def cmd_ref
108
+ node.cmd_ref
109
+ end
110
+
111
+ def self.platform
112
+ node.client.platform
113
+ end
114
+
115
+ def platform
116
+ self.class.platform
117
+ end
118
+
119
+ def config_and_warn_on_match(warn_match, *args)
120
+ if node.client.platform == :ios_xr
121
+ result = super(warn_match, *args, 'commit')
122
+ else
123
+ result = super
124
+ end
125
+ node.cache_flush
126
+ result
127
+ end
128
+
129
+ # Check exception and only fail if it does not contain message
130
+ def check_and_raise_error(exception, message)
131
+ fail exception unless exception.message.include?(message)
132
+ end
133
+
134
+ def ip_address?(ip)
135
+ return IPAddr.new(ip).ipv4?
136
+ rescue IPAddr::InvalidAddressError
137
+ false
138
+ end
139
+
140
+ def convert_dns_name(ip)
141
+ ip_address?(ip) ? ip : Resolv.getaddress(ip)
142
+ rescue Resolv::ResolvError
143
+ raise "Unable to resolve name #{ip}. Use static ip to connect instead!"
144
+ end
145
+
146
+ def address_match?(int_ip)
147
+ # Compare the interface address with the current session address.
148
+ # and return true if they match.
149
+ return false if int_ip.nil?
150
+ int_ip == convert_dns_name(address.split(':')[0])
151
+ end
152
+
153
+ # Some NXOS hardware is not capable of supporting certain features even
154
+ # though the platform family in general includes support. In these cases
155
+ # the NU feature setter will raise a RuntimeError.
156
+ # Default behavior is to skip/flunk.
157
+ def hardware_supports_feature?(message, status_only: false)
158
+ patterns = ['Hardware is not capable of supporting',
159
+ 'is unsupported on this node',
160
+ 'Feature NOT supported on this Platform',
161
+ ]
162
+ if message[Regexp.union(patterns)]
163
+ return true if status_only
164
+ skip('Skip test: Feature is unsupported on this device')
165
+ end
166
+ flunk(message)
167
+ end
168
+
169
+ def incompatible_interface?(msg)
170
+ patterns = ['switchport_mode is not supported on this interface',
171
+ 'Configuration does not match the port capability']
172
+ assert_match(Regexp.union(patterns), msg,
173
+ 'Msg does not match known incompatibility messages')
174
+ end
175
+
176
+ def validate_property_excluded?(feature, property)
177
+ !node.cmd_ref.supports?(feature, property)
178
+ end
179
+
180
+ def skip_incompat_version?(feature, property)
181
+ ov = node.os_version_get(feature, property)
182
+ return if ov.nil?
183
+ im = Platform.image_version
184
+ pid = node.product_id
185
+
186
+ ver = nil
187
+ array = ov.split(';')
188
+ array.each do |e|
189
+ break if ver
190
+ key_values = e.split(':')
191
+ larr = key_values[0].split(',')
192
+ larr.each do |lkey|
193
+ if lkey.to_s == 'C3548'
194
+ # Special case N3k Platform
195
+ else
196
+ fail "Unrecognized product_id: #{lkey}" unless
197
+ lkey.downcase[/n(3|5|6|7|9)/]
198
+ end
199
+ next unless lkey.downcase.strip == product_tag
200
+ ver = key_values[1]
201
+ break if ver
202
+ end
203
+ end
204
+
205
+ return if ver.nil?
206
+ over = ver
207
+ lim = im.split[0].tr('(', '.').tr(')', '.').chomp('.')
208
+ # due to a bug in Gem::Version, we need to append a letter
209
+ # to the version field if only one of compared versions
210
+ # has a letter at the end
211
+ # For ex:
212
+ # 7.0.3.I2.2e < 7.0.3.I2.2 is TRUE instead of FALSE
213
+ # Once we add a letter 'a' to the end,
214
+ # 7.0.3.I2.2e < 7.0.3.I2.2a is FALSE
215
+ ver << 'a' if lim[-1, 1] =~ /[[:alpha:]]/
216
+ skip("The #{feature} #{property} property is only supported on OS version #{over} or later on #{pid}") if
217
+ Gem::Version.new(lim) < Gem::Version.new(ver)
218
+ end
219
+
220
+ def skip_if_UnsupportedCmdRef(feature_name, attribute_name) # rubocop:disable Style/MethodName
221
+ # Check if attr is excluded by the cmd_ref yaml
222
+ skip("UnsupportedCmdRef attribute: '#{attribute_name}'") if
223
+ cmd_ref.lookup(feature_name, attribute_name).is_a?(UnsupportedCmdRef)
224
+ end
225
+
226
+ def skip_nexus_i2_image?
227
+ skip("This property is not supported on Nexus 'I2' images") if
228
+ Utils.nexus_i2_image
229
+ end
230
+
231
+ def system_image
232
+ @image ||= Platform.system_image
233
+ end
234
+
235
+ def skip_legacy_defect?(pattern, msg)
236
+ if pattern.is_a?(String)
237
+ pattern = [pattern]
238
+ elsif !pattern.is_a?(Array)
239
+ fail 'Argument: pattern must be a String or Array object'
240
+ end
241
+ msg = "Defect in legacy image: [#{msg}]"
242
+ pattern.each do |pat|
243
+ skip(msg) if Utils.image_version?(Regexp.new(pat))
244
+ end
245
+ end
246
+
247
+ def step_unless_legacy_defect(pattern, msg)
248
+ if pattern.is_a?(String)
249
+ pattern = [pattern]
250
+ elsif !pattern.is_a?(Array)
251
+ fail 'Argument: pattern must be a String or Array object'
252
+ end
253
+ pattern.each do |pat|
254
+ if Utils.image_version?(Regexp.new(pat))
255
+ puts "Skip Step: Defect in legacy image: [#{msg}]"
256
+ return false
257
+ end
258
+ end
259
+ end
260
+
261
+ def step_unless_version_unsupported(pattern)
262
+ if pattern.is_a?(String)
263
+ pattern = [pattern]
264
+ elsif !pattern.is_a?(Array)
265
+ fail 'Argument: pattern must be a String or Array object'
266
+ end
267
+ pattern.each do |pat|
268
+ if Utils.image_version?(Regexp.new(pat))
269
+ puts "Skip Step: Feature not supported in this image version: [#{Platform.image_version}]"
270
+ return false
271
+ end
272
+ end
273
+ end
274
+
275
+ def virtual_platform?
276
+ node.product_id[/N9K-NXOSV|N9K-9000v/] ? true : false
277
+ end
278
+
279
+ def interfaces
280
+ unless @@interfaces
281
+ # Build the platform_info, used for interface lookup
282
+ # rubocop:disable Style/ClassVars
283
+ @@interfaces = []
284
+ Interface.interfaces.each do |int, obj|
285
+ next unless int[%r{ethernet[\d/]+$}] # exclude dot1q & non-eth
286
+ next if address_match?(obj.ipv4_address)
287
+ @@interfaces << int
288
+ end
289
+ # rubocop:enable Style/ClassVars
290
+ end
291
+ skip "No suitable interfaces found on #{node} for this test" if
292
+ @@interfaces.empty?
293
+ @@interfaces
294
+ end
295
+
296
+ # Remove all router bgps.
297
+ def remove_all_bgps
298
+ require_relative '../lib/cisco_node_utils/bgp'
299
+ RouterBgp.routers.each do |_asn, vrfs|
300
+ vrfs.each do |vrf, obj|
301
+ if vrf == 'default'
302
+ obj.destroy
303
+ break
304
+ end
305
+ end
306
+ end
307
+ end
308
+
309
+ # Remove all router ospfs.
310
+ def remove_all_ospfs
311
+ require_relative '../lib/cisco_node_utils/router_ospf'
312
+ RouterOspf.routers.each do |_, obj|
313
+ obj.destroy
314
+ end
315
+ end
316
+
317
+ # This testcase will remove all the bds existing in the system
318
+ # specifically in cleanup for minitests
319
+ def remove_all_bridge_domains
320
+ return unless /N7/ =~ node.product_id
321
+ BridgeDomain.bds.each do |_bd, obj|
322
+ obj.destroy
323
+ end
324
+ config 'system bridge-domain none'
325
+ end
326
+
327
+ def remove_all_svis
328
+ Interface.interfaces(:vlan).each do |svi, obj|
329
+ next if svi == 'vlan1'
330
+ obj.destroy
331
+ end
332
+ end
333
+
334
+ # This testcase will remove all the vlans existing in the system
335
+ # specifically in cleanup for minitests
336
+ def remove_all_vlans
337
+ remove_all_bridge_domains
338
+ remove_all_svis
339
+ Vlan.vlans.each do |vlan, obj|
340
+ # skip reserved vlan
341
+ next if vlan == '1'
342
+ next if node.product_id[/N5K|N6K|N7K/] && (1002..1005).include?(vlan.to_i)
343
+ obj.destroy
344
+ end
345
+ end
346
+
347
+ # Remove all user vrfs.
348
+ def remove_all_vrfs
349
+ require_relative '../lib/cisco_node_utils/vrf'
350
+ Vrf.vrfs.each do |vrf, obj|
351
+ next if vrf[/management/]
352
+ # TBD: Remove vrf workaround below after CSCuz56697 is resolved
353
+ config 'vrf context ' + vrf if
354
+ node.product_id[/N9K.*-F/] || node.product_id[/N3K.*-F/]
355
+ obj.destroy
356
+ end
357
+ end
358
+
359
+ # Remove all configurations from an interface.
360
+ def interface_cleanup(intf_name)
361
+ cfg = get_interface_cleanup_config(intf_name)
362
+ config(*cfg)
363
+ end
364
+
365
+ # TBD: -- The following methods are a WIP --
366
+ #
367
+ # def find_compatible_intf(feature, opt=:raise_skip)
368
+ # # Some platforms require specific linecards before allowing a feature to
369
+ # # be enabled. This method will find a compatible interface or optionally
370
+ # # raise a skip.
371
+ # # TBD: This wants to become a common "compatible interface" checker to
372
+ # # eventually replace all of the single-use methods.
373
+ # intf = compatible_intf(feature)
374
+ # if intf.nil? && opt[/raise_skip/]
375
+ # skip("Unable to find compatible interface for 'feature #{feature}'")
376
+ # end
377
+ # intf
378
+ # end
379
+
380
+ # def compatible_intf(feature)
381
+ # # The feat hash contains module restrictions for a given feature.
382
+ # # :mods - (optional) The module ids used in the 'limit-resource' config
383
+ # # :pids - A regex pattern for the line module product IDs (ref: 'sh mod')
384
+ # feat = {}
385
+ # if node.product_id[/N7K/]
386
+ # feat = {
387
+ # # nv overlay raises error unless solely F3
388
+ # 'nv overlay' => { mods: 'f3', pids: 'N7[K7]-F3' }
389
+ # }
390
+ # end
391
+ # patterns = feat[feature]
392
+ # return interfaces[0] if patterns.nil? # No restrictions for this platform
393
+
394
+ # # Check if module is present and usable; i.e. 'ok'
395
+ # pids = patterns[:pids]
396
+ # sh_mod_string = @device.cmd("show mod | i '^[0-9]+.*#{pids}.*ok'")
397
+ # sh_mod = sh_mod_string[/^(\d+)\s.*#{pids}/]
398
+ # slot = sh_mod.nil? ? nil : Regexp.last_match[1]
399
+ # return nil if slot.nil?
400
+ # intf = "ethernet#{slot}/1"
401
+
402
+ # # Check/Set VDC config. VDC platforms restrict module usage per vdc.
403
+ # mods = patterns[:mods]
404
+ # return intf if mods.nil? || !node.product_id[/N7K/]
405
+ # vdc = Vdc.new(Vdc.default_vdc_name)
406
+ # unless mods == vdc.limit_resource_module_type
407
+ # # Update the allowed module types in this vdc
408
+ # vdc.limit_resource_module_type = mods
409
+ # end
410
+
411
+ # # Return the first interface found in 'allocate interface' config, or nil
412
+ # vdc.allocate_interface[%r{Ethernet#{slot}\/(\d+)}]
413
+ # end
414
+
415
+ def vdc_limit_f3_no_intf_needed(action=:set)
416
+ # This is a special-use method for N7Ks that don't have a physical F3.
417
+ # 1) There are some features that refuse to load unless the VDC is
418
+ # limited to F3 only, but they will actually load if the config is
419
+ # present, despite the fact that there are no physical F3s.
420
+ # 2) We have some tests that need these features but don't need interfaces.
421
+ #
422
+ # action = :set (enable limit F3 config), :clear (default limit config)
423
+ #
424
+ # The limit config should be removed after testing if the device does not
425
+ # have an actual F3.
426
+ return unless node.product_id[/N7K/]
427
+ vdc = Vdc.new(Vdc.default_vdc_name)
428
+ case action
429
+ when :set
430
+ return if vdc.limit_resource_module_type == 'f3'
431
+ vdc.limit_resource_module_type = 'f3'
432
+
433
+ when :clear
434
+ # Remove the config if there are no physical F3 cards
435
+ pids = 'N7[K7]-F3'
436
+ sh_mod_string = @device.cmd("show mod | i '^[0-9]+.*#{pids}'")
437
+ sh_mod = sh_mod_string[/^(\d+)\s.*#{pids}/]
438
+ if sh_mod.nil?
439
+ # It's safe to remove the config
440
+ vdc.limit_resource_module_type = ''
441
+ end
442
+ end
443
+ end
444
+
445
+ # setup fabricpath env if possible and populate the interfaces array
446
+ # otherwise cause a global skip
447
+ def fabricpath_testenv_setup
448
+ return unless node.product_id[/N7K/]
449
+ intf_array = Feature.compatible_interfaces('fabricpath')
450
+ vdc = Vdc.new(Vdc.default_vdc_name)
451
+ save_lr = vdc.limit_resource_module_type
452
+ fabricpath_lr = node.config_get('fabricpath', 'supported_modules')
453
+ if intf_array.empty? || save_lr != fabricpath_lr
454
+ # try getting the required modules into the default vdc
455
+ vdc.limit_resource_module_type = fabricpath_lr
456
+ intf_array = Feature.compatible_interfaces('fabricpath')
457
+ end
458
+ if intf_array.empty?
459
+ vdc.limit_resource_module_type = save_lr
460
+ skip('FabricPath compatible interfaces not found in this switch')
461
+ else
462
+ # rubocop:disable Style/ClassVars
463
+ @@interfaces = intf_array
464
+ # rubocop:enable Style/ClassVars
465
+ end
466
+ end
467
+
468
+ # Returns an array of commands to remove all configurations from
469
+ # an interface.
470
+ def get_interface_cleanup_config(intf_name)
471
+ if platform == :ios_xr
472
+ ["no interface #{intf_name}", "interface #{intf_name} shutdown"]
473
+ else
474
+ ["default interface #{intf_name}"]
475
+ end
476
+ end
477
+
478
+ def mt_full_interface?
479
+ # MT-full tests require a specific linecard; either because they need a
480
+ # compatible interface or simply to enable the features. Either way
481
+ # we will provide an appropriate interface name if the linecard is present.
482
+ # Example 'show mod' output to match against:
483
+ # '9 12 10/40 Gbps Ethernet Module N7K-F312FQ-25 ok'
484
+ # '9 12 10/40 Gbps Ethernet Module N77-F312FQ-25 ok'
485
+ sh_mod_string = @device.cmd("sh mod | i '^[0-9]+.*N7[7K]-F3'")
486
+ sh_mod = sh_mod_string[/^(\d+)\s.*N7[7K]-F3.*ok/]
487
+ slot = sh_mod.nil? ? nil : Regexp.last_match[1]
488
+ skip('Unable to find compatible interface in chassis') if slot.nil?
489
+
490
+ "ethernet#{slot}/1"
491
+ end
492
+
493
+ def vxlan_linecard?
494
+ # n5,6,7k tests require a specific linecard; either because they need a
495
+ # compatible interface or simply to enable vxlan.
496
+ # Example 'show mod' output to match against:
497
+ # '9 12 10/40 Gbps Ethernet Module N7K-F312FQ-25 ok'
498
+ # '9 12 10/40 Gbps Ethernet Module N77-F312FQ-25 ok'
499
+ # '2 6 Nexus 6xQSFP Ethernet Module N5K-C5672UP-M6Q ok'
500
+ # '2 6 Nexus xxQSFP Ethernet Module N6K-C6004-96Q/EF ok'
501
+ # '2 4 Nexus 4xQSFP Ethernet Module N6K-C6001-M4Q ok'
502
+ if node.product_id[/N(5|6)K/]
503
+ sh_mod_string = @device.cmd("sh mod | i '^[0-9]+.*N[56]K-C[56]'")
504
+ sh_mod = sh_mod_string[/^(\d+)\s.*N[56]K-C(56|600[14])/]
505
+ skip('Unable to find compatible interface in chassis') if sh_mod.nil?
506
+ elsif node.product_id[/N7K/]
507
+ mt_full_interface?
508
+ else
509
+ return
510
+ end
511
+ end
512
+
513
+ # Wrapper api that can be used to execute bash shell or guestshell
514
+ # commands.
515
+ # Returns the output of the command.
516
+ def shell_command(command, context='bash')
517
+ fail "shell_command api not supported on #{node.product_id}" unless
518
+ node.product_id[/N3K|N3K.*-F|N9K.*-F|N9K/]
519
+ unless context == 'bash' || context == 'guestshell'
520
+ fail "Context must be either 'bash' or 'guestshell'"
521
+ end
522
+ config("run #{context} #{command}")
523
+ end
524
+
525
+ def backup_resolv_file(context='bash')
526
+ # Configuration bleeding is only a problem on some platforms, so
527
+ # only backup the resolv.conf file on required plaforms.
528
+ return unless node.product_id[/N3K|N3K.*-F|N9K.*-F|N9K/]
529
+ time_stamp = Time.now.strftime('%Y-%m-%d_%H-%M-%S')
530
+ backup_filename = "/tmp/resolv.conf.#{time_stamp}"
531
+ shell_command("cp /etc/resolv.conf #{backup_filename}", context)
532
+ backup_filename
533
+ end
534
+
535
+ def restore_resolv_file(filename, context='bash')
536
+ return unless node.product_id[/N3K|N3K.*-F|N9K.*-F|N9K/]
537
+ shell_command("sudo cp #{filename} /etc/resolv.conf", context)
538
+ shell_command("rm #{filename}", context)
539
+ end
540
+
541
+ # VDC helper for features that require a specific linecard.
542
+ # Allows caller to get current state or change it to a new value.
543
+ def vdc_lc_state(type=nil)
544
+ return unless node.product_id[/N7/]
545
+ vxlan_linecard? if type && type[/F3/i]
546
+ v = Vdc.new('default')
547
+ if type
548
+ # This action may be time consuming, use only if necessary.
549
+ v.limit_resource_module_type = type
550
+ else
551
+ v.limit_resource_module_type
552
+ end
553
+ end
554
+
555
+ # Helper method to massage node.product_id into a short but
556
+ # meaningful tag to represent the product_type.
557
+ def product_tag
558
+ @product_id ||= node.product_id
559
+ case @product_id
560
+ when /N3K-C35/
561
+ tag = 'n35'
562
+ when /N3/
563
+ tag = Utils.fretta? ? 'n3k-f' : 'n3k'
564
+ when /N5/
565
+ tag = 'n5k'
566
+ when /N6/
567
+ tag = 'n6k'
568
+ when /N7/
569
+ tag = 'n7k'
570
+ when /N9/
571
+ tag = Utils.fretta? ? 'n9k-f' : 'n9k'
572
+ else
573
+ fail "Unrecognized product_id: #{@product_id}"
574
+ end
575
+ tag
576
+ end
577
+ end
@@ -0,0 +1,75 @@
1
+ # test command config yaml file
2
+ ---
3
+ nexus:
4
+ feature-enable:
5
+ command: |
6
+ feature tacacs+
7
+ feature ospf
8
+ feature bgp
9
+ feature pim
10
+ feature msdp
11
+ feature interface-vlan
12
+ feature hsrp
13
+ feature lacp
14
+ feature dhcp
15
+
16
+ feature-disable:
17
+ command: |
18
+ no feature tacacs+
19
+ no feature ospf
20
+ no feature bgp
21
+ no feature pim
22
+ no feature msdp
23
+ no feature interface-vlan
24
+ no feature hsrp
25
+ no feature lacp
26
+ no feature dhcp
27
+ nvgen: false
28
+
29
+ feature-snmp-comm-acl-ro:
30
+ command: |
31
+ snmp-server community networkopercom group network-operator
32
+ snmp-server community networkopercom use-acl SNMP_RO
33
+
34
+ feature-snmp-comm-acl-rw:
35
+ command: |
36
+ snmp-server community admincom group network-admin
37
+ snmp-server community admincom use-acl SNMP_RW
38
+
39
+ feature-int-loopback:
40
+ command: |
41
+ interface loopback0
42
+ description testloopback
43
+
44
+ feature-int-portchannel:
45
+ setup: |
46
+ interface port-channel100
47
+ no switchport
48
+ command: |
49
+ feature bfd
50
+ interface port-channel100
51
+ description test-portchannel
52
+ no bfd echo
53
+
54
+ ios_xr:
55
+ name-server:
56
+ command: |
57
+ domain name-server 10.10.10.10
58
+ domain name-server 10.10.10.11
59
+ domain name-server 10.10.10.12
60
+
61
+ no-name-server:
62
+ command: |
63
+ no domain name-server 10.10.10.10
64
+ no domain name-server 10.10.10.11
65
+ no domain name-server 10.10.10.12
66
+
67
+ lo-intf:
68
+ command: |
69
+ interface Loopback0
70
+ description test description
71
+ vrf red
72
+
73
+ no-lo-intf:
74
+ command: |
75
+ no interface Loopback0
@@ -0,0 +1,16 @@
1
+ # test command config yaml file
2
+ ---
3
+ feature-global_bad_syntax:
4
+ command: |
5
+ fature ospf
6
+
7
+
8
+ feature-nested_bad_syntax:
9
+ command: >
10
+ interface loopback0
11
+ descrion testloopback
12
+
13
+ feature-input_too_long:
14
+ command: |
15
+ router ospf bluethisoutputistolongwaytoolongreallylong
16
+
data/tests/noop.rb ADDED
@@ -0,0 +1,7 @@
1
+ require_relative 'ciscotest'
2
+ # NOOP class for CI development use only
3
+ class Noop < CiscoTestCase
4
+ def test_noop
5
+ assert(true)
6
+ end
7
+ end