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,149 @@
1
+ #
2
+ # NXAPI implementation of TacacsServerGroup class
3
+ #
4
+ # April 2015, Alex Hunsberger
5
+ #
6
+ # Copyright (c) 2015-2016 Cisco and/or its affiliates.
7
+ #
8
+ # Licensed under the Apache License, Version 2.0 (the "License");
9
+ # you may not use this file except in compliance with the License.
10
+ # You may obtain a copy of the License at
11
+ #
12
+ # http://www.apache.org/licenses/LICENSE-2.0
13
+ #
14
+ # Unless required by applicable law or agreed to in writing, software
15
+ # distributed under the License is distributed on an "AS IS" BASIS,
16
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ # See the License for the specific language governing permissions and
18
+ # limitations under the License.
19
+
20
+ require_relative 'node_util'
21
+ require_relative 'tacacs_server'
22
+
23
+ module Cisco
24
+ # NXAPI implementation of AAA Server Group class
25
+ class TacacsServerGroup < NodeUtil
26
+ attr_reader :name
27
+
28
+ def initialize(name, create=true)
29
+ fail TypeError unless name.is_a? String
30
+ @name = name
31
+
32
+ return unless create
33
+
34
+ TacacsServer.new.enable if platform != :ios_xr && !TacacsServer.enabled
35
+ config_set('tacacs_server_group', 'group', state: '', name: name)
36
+ end
37
+
38
+ def destroy
39
+ config_set('tacacs_server_group', 'group', state: 'no', name: @name)
40
+ end
41
+
42
+ def servers
43
+ config_get('tacacs_server_group', 'servers', @name)
44
+ end
45
+
46
+ def servers=(new_servs)
47
+ fail TypeError unless new_servs.is_a? Array
48
+ current_servs = servers
49
+ new_servs.each do |s|
50
+ # add any servers not yet configured
51
+ next if current_servs.include? s
52
+ config_set('tacacs_server_group',
53
+ 'servers',
54
+ name: @name,
55
+ state: '',
56
+ server: s)
57
+ end
58
+ current_servs.each do |s|
59
+ # remove any undesired existing servers
60
+ next if new_servs.include? s
61
+ config_set('tacacs_server_group',
62
+ 'servers',
63
+ name: @name,
64
+ state: 'no',
65
+ server: s)
66
+ end
67
+ end
68
+
69
+ def default_servers
70
+ config_get_default('tacacs_server_group', 'servers')
71
+ end
72
+
73
+ def ==(other)
74
+ name == other.name
75
+ end
76
+
77
+ # for netdev compatibility
78
+ def self.tacacs_server_groups
79
+ groups
80
+ end
81
+
82
+ def self.groups
83
+ grps = {}
84
+ if platform == :ios_xr
85
+ tacgroups = config_get('tacacs_server_group', 'group')
86
+ else
87
+ tacgroups = config_get('tacacs_server_group', 'group') if
88
+ TacacsServer.enabled
89
+ end
90
+ unless tacgroups.nil?
91
+ tacgroups.each { |s| grps[s] = TacacsServerGroup.new(s, false) }
92
+ end
93
+ grps
94
+ end
95
+
96
+ def vrf
97
+ # vrf is always present in running config
98
+ v = config_get('tacacs_server_group', 'vrf', @name)
99
+ v.nil? ? default_vrf : v
100
+ end
101
+
102
+ def vrf=(v)
103
+ fail TypeError unless v.is_a? String
104
+ # vrf = "default" is equivalent to unconfiguring vrf
105
+ config_set('tacacs_server_group', 'vrf', name: @name, state: '', vrf: v)
106
+ end
107
+
108
+ def default_vrf
109
+ config_get_default('tacacs_server_group', 'vrf')
110
+ end
111
+
112
+ def deadtime
113
+ d = config_get('tacacs_server_group', 'deadtime', @name)
114
+ d.nil? ? default_deadtime : d.to_i
115
+ end
116
+
117
+ def deadtime=(t)
118
+ no_cmd = t == default_deadtime ? 'no' : ''
119
+ config_set('tacacs_server_group',
120
+ 'deadtime',
121
+ name: @name,
122
+ state: no_cmd,
123
+ deadtime: t)
124
+ end
125
+
126
+ def default_deadtime
127
+ config_get_default('tacacs_server_group', 'deadtime')
128
+ end
129
+
130
+ def source_interface
131
+ i = config_get('tacacs_server_group', 'source_interface', @name)
132
+ i.nil? ? default_source_interface : i.downcase
133
+ end
134
+
135
+ def source_interface=(s)
136
+ fail TypeError unless s.is_a? String
137
+ no_cmd = s == default_source_interface ? 'no' : ''
138
+ config_set('tacacs_server_group',
139
+ 'source_interface',
140
+ name: @name,
141
+ state: no_cmd,
142
+ interface: s)
143
+ end
144
+
145
+ def default_source_interface
146
+ config_get_default('tacacs_server_group', 'source_interface')
147
+ end
148
+ end
149
+ end
@@ -0,0 +1,216 @@
1
+ # Alex Hunsberger, March 2015
2
+ #
3
+ # Copyright (c) 2015-2016 Cisco and/or its affiliates.
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require_relative 'node_util'
18
+ require_relative 'tacacs_server'
19
+
20
+ module Cisco
21
+ # TacacsServerHost - node utility class for TACACS+ server host config
22
+ class TacacsServerHost < NodeUtil
23
+ attr_reader :name
24
+ @hosts = {}
25
+
26
+ def initialize(name, instantiate=true, host_port=nil)
27
+ fail TypeError unless name.is_a? String
28
+ fail ArgumentError if name.empty?
29
+ @name = name
30
+
31
+ if platform == :ios_xr
32
+ if host_port.nil?
33
+ @port = config_get_default('tacacs_server_host', 'port')
34
+ else
35
+ fail ArgumentError, 'host_port must be an Integer' \
36
+ unless host_port.is_a?(Integer)
37
+ @port = host_port
38
+ end
39
+ end
40
+
41
+ create if instantiate
42
+
43
+ return if platform == :ios_xr
44
+
45
+ return if host_port.nil?
46
+ fail ArgumentError, 'host_port must be an Integer' \
47
+ unless host_port.is_a?(Integer)
48
+ self.port = host_port
49
+ end
50
+
51
+ def self.hosts
52
+ hosts = {}
53
+ return hosts unless Feature.tacacs_enabled?
54
+
55
+ hosts_list = config_get('tacacs_server_host', 'hosts')
56
+ return hosts if hosts_list.nil? || hosts_list.empty?
57
+
58
+ hosts_list.each do |name|
59
+ if platform == :ios_xr
60
+ host_port = config_get('tacacs_server_host', 'port', ip: name)
61
+ host_port = host_port[0] if host_port.is_a?(Array)
62
+ host_port = host_port.to_i
63
+
64
+ hosts[name] = TacacsServerHost.new(name, false, host_port)
65
+ else
66
+ hosts[name] = TacacsServerHost.new(name, false) if @hosts[name].nil?
67
+ end
68
+ end
69
+ hosts
70
+ end
71
+
72
+ def create
73
+ destroy if platform == :ios_xr
74
+ Feature.tacacs_enable
75
+ config_set('tacacs_server_host',
76
+ 'host',
77
+ state: '',
78
+ ip: name,
79
+ port: @port)
80
+ end
81
+
82
+ def destroy
83
+ if platform == :ios_xr
84
+ # This provider only support a 1-1 mapping between host and ports.
85
+ # Thus, we must remove the other entries on different ports.
86
+ all_hosts = config_get('tacacs_server_host',
87
+ 'host_port_pairs',
88
+ ip: @name)
89
+ return unless all_hosts.is_a?(Array)
90
+
91
+ warn("#{name} is configured multiple times on the device" \
92
+ ' (possibly using different ports). This is unsupported by this' \
93
+ ' API and the duplicate entries are being deleted.') \
94
+ if all_hosts.count > 1
95
+
96
+ all_hosts.each do |host_port|
97
+ config_set('tacacs_server_host',
98
+ 'host',
99
+ state: 'no',
100
+ ip: @name,
101
+ port: host_port)
102
+ end
103
+ else
104
+ config_set('tacacs_server_host',
105
+ 'host',
106
+ state: 'no',
107
+ ip: @name,
108
+ port: @port)
109
+ end
110
+ end
111
+
112
+ def port
113
+ platform == :ios_xr ? @port : config_get('tacacs_server_host',
114
+ 'port',
115
+ ip: @name)
116
+ end
117
+
118
+ def port=(n)
119
+ fail("'port' setter method not applicable for this platform." \
120
+ 'port must be passed in to the constructor.') \
121
+ if platform == :ios_xr
122
+
123
+ config_set('tacacs_server_host', 'port', ip: @name, port: n.to_i)
124
+ end
125
+
126
+ def self.default_port
127
+ config_get_default('tacacs_server_host', 'port')
128
+ end
129
+
130
+ def encryption_type
131
+ type = config_get('tacacs_server_host',
132
+ 'encryption_type',
133
+ ip: @name,
134
+ port: @port)
135
+ type.nil? ? TACACS_SERVER_ENC_UNKNOWN : type.to_i
136
+ end
137
+
138
+ def self.default_encryption_type
139
+ TacacsServer.default_encryption_type
140
+ end
141
+
142
+ def encryption_password
143
+ str = config_get('tacacs_server_host',
144
+ 'encryption_password',
145
+ ip: @name,
146
+ port: @port)
147
+ return str if str.nil? || str.empty?
148
+ index = str.index('port')
149
+ str = str[0..index - 2] unless index.nil?
150
+ str.strip
151
+ end
152
+
153
+ def self.default_encryption_password
154
+ config_get_default('tacacs_server_host', 'encryption_password')
155
+ end
156
+
157
+ def encryption_key_set(enctype, password)
158
+ fail TypeError unless enctype.is_a? Fixnum
159
+ fail ArgumentError if password && ![TACACS_SERVER_ENC_NONE,
160
+ TACACS_SERVER_ENC_CISCO_TYPE_7,
161
+ TACACS_SERVER_ENC_UNKNOWN,
162
+ ].include?(enctype)
163
+ password = Utils.add_quotes(password) unless password.empty?
164
+ # if enctype is TACACS_SERVER_ENC_UNKNOWN, we'll unset the key
165
+ if enctype == TACACS_SERVER_ENC_UNKNOWN
166
+ # if current encryption type is not TACACS_SERVER_ENC_UNKNOWN, we need
167
+ # to unset the key value. Otherwise, the box is not configured with key,
168
+ # thus we don't need to do anything
169
+ if encryption_type != TACACS_SERVER_ENC_UNKNOWN
170
+ config_set('tacacs_server_host',
171
+ 'encryption',
172
+ state: 'no',
173
+ ip: @name,
174
+ port: @port,
175
+ enc_type: encryption_type,
176
+ password: encryption_password)
177
+ end
178
+ else
179
+ config_set('tacacs_server_host',
180
+ 'encryption',
181
+ state: '',
182
+ ip: @name,
183
+ port: @port,
184
+ enc_type: enctype,
185
+ password: password)
186
+ end
187
+ end
188
+
189
+ def timeout
190
+ config_get('tacacs_server_host',
191
+ 'timeout',
192
+ ip: @name,
193
+ port: @port)
194
+ end
195
+
196
+ def timeout=(t)
197
+ fail TypeError unless t.is_a? Fixnum
198
+ return if t == timeout
199
+
200
+ config_set('tacacs_server_host',
201
+ 'timeout',
202
+ state: '',
203
+ ip: @name,
204
+ port: @port,
205
+ timeout: t)
206
+ end
207
+
208
+ def self.default_timeout
209
+ config_get_default('tacacs_server_host', 'timeout')
210
+ end
211
+
212
+ def ==(other)
213
+ name == other.name
214
+ end
215
+ end
216
+ end
@@ -0,0 +1,122 @@
1
+ # October 2016, Michael G Wiebe and Rahul Shenoy
2
+ #
3
+ # Copyright (c) 2016-2017 Cisco and/or its affiliates.
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require_relative 'node_util'
18
+ require_relative 'logger'
19
+
20
+ module Cisco
21
+ # Upgrade - node util class for upgrading Cisco devices
22
+ class Upgrade < NodeUtil
23
+ # Delete install logs from previous installation
24
+ def self.clear_status
25
+ config_set('upgrade', 'clear_status')
26
+ end
27
+
28
+ # Deletes 'image' from 'uri'
29
+ def self.delete(image, uri='bootflash:')
30
+ config_set('upgrade', 'delete', image: image, uri: uri)
31
+ rescue Cisco::CliError => e
32
+ raise e
33
+ end
34
+
35
+ # Deletes currently booted image
36
+ def self.delete_boot(uri='bootflash:')
37
+ # Incase of a N9K, N3K and N9Kv the system and kickstart images are
38
+ # the same.
39
+ # Incase of a N5K, N6K and N7K the system and kickstart images are
40
+ # different.
41
+ system_image = config_get('show_version', 'system_image').split('/')[-1]
42
+ kickstart_image = config_get('show_version', 'boot_image').split('/')[-1]
43
+ if kickstart_image == system_image
44
+ config_set('upgrade', 'delete_boot', image: system_image, uri: uri)
45
+ else
46
+ config_set('upgrade', 'delete_boot', image: system_image,
47
+ uri: uri)
48
+ config_set('upgrade', 'delete_boot', image: kickstart_image,
49
+ uri: uri)
50
+ end
51
+ rescue Cisco::CliError => e
52
+ raise e
53
+ end
54
+
55
+ # Returns version of the 'image'
56
+ def self.image_version(image=nil, uri=nil)
57
+ # Returns version of currently booted image by default
58
+ if image && uri
59
+ config_get('upgrade', 'image_version', image: image, uri: uri)
60
+ else
61
+ version = config_get('show_version', 'version')
62
+ # show version displays version differently for release and
63
+ # development builds.
64
+ # Eg: release build
65
+ # NXOS: version 7.0(3)I4(2)
66
+ # Eg: development build
67
+ # NXOS: version 7.0(3)IFD6(1) [build 7.0(3)IGD7(0.65)]
68
+ return version unless version[/build\s+\S+/]
69
+ version.split(' ')[-1].split(']')[0]
70
+ end
71
+ end
72
+
73
+ # Return the nxos image installed on the device
74
+ def self.package
75
+ config_get('show_version', 'system_image')
76
+ end
77
+
78
+ # Return true if box is online and config mode is ready to be used
79
+ def self.box_online?
80
+ output = config_set('upgrade', 'is_box_online')
81
+ output[0]['body'] == {}
82
+ end
83
+
84
+ def self.save_config
85
+ config_set('upgrade', 'save_config')
86
+ rescue Cisco::CliError => e
87
+ raise e
88
+ end
89
+
90
+ # Returns True if device upgraded
91
+ def self.upgraded?
92
+ return false unless config_get('upgrade', 'upgraded')
93
+ (0..500).each do
94
+ sleep 1
95
+ return true if box_online?
96
+ end
97
+ fail 'Configuration is still blocked'
98
+ end
99
+
100
+ # Attempts to upgrade the device to 'image'
101
+ def self.upgrade(image, uri='bootflash:', del_boot=false,
102
+ force_all=false)
103
+ delete_boot(uri) if del_boot
104
+ force_all ? upgrade_str = 'upgrade_force' : upgrade_str = 'upgrade'
105
+ begin
106
+ Cisco::Logger.debug("Upgrading to version: #{image}")
107
+ config_set('upgrade', upgrade_str, image: image, uri: uri)
108
+ rescue Cisco::RequestFailed, Cisco::CliError => e1
109
+ # raise if install command failed
110
+ raise e1 if e1.class == Cisco::CliError
111
+ # Catch 'Backend Processing Error'. Install continues inspite of the
112
+ # error thrown. Resend install command and expect a CliError.
113
+ begin
114
+ config_set('upgrade', upgrade_str, image: image, uri: uri)
115
+ rescue Cisco::CliError => e2
116
+ raise e2 unless
117
+ e2.message.include?('Another install procedure may be in progress')
118
+ end
119
+ end
120
+ end
121
+ end
122
+ end
@@ -0,0 +1,118 @@
1
+ #
2
+ # NXAPI implementation of VDC class
3
+ #
4
+ # December 2015, Chris Van Heuveln
5
+ #
6
+ # Copyright (c) 2015-2016 Cisco and/or its affiliates.
7
+ #
8
+ # Licensed under the Apache License, Version 2.0 (the "License");
9
+ # you may not use this file except in compliance with the License.
10
+ # You may obtain a copy of the License at
11
+ #
12
+ # http://www.apache.org/licenses/LICENSE-2.0
13
+ #
14
+ # Unless required by applicable law or agreed to in writing, software
15
+ # distributed under the License is distributed on an "AS IS" BASIS,
16
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ # See the License for the specific language governing permissions and
18
+ # limitations under the License.
19
+
20
+ require_relative 'node_util'
21
+
22
+ module Cisco
23
+ # node_utils class for vdc
24
+ class Vdc < NodeUtil
25
+ attr_reader :name
26
+
27
+ def initialize(name, instantiate=true)
28
+ @vdc = (name == 'default') ? Vdc.default_vdc_name : name
29
+ create if instantiate
30
+ end
31
+
32
+ def self.vdcs
33
+ hash = {}
34
+ vdc_list = config_get('vdc', 'all_vdcs')
35
+ return hash if vdc_list.nil?
36
+
37
+ vdc_list.each do |vdc_name|
38
+ hash[vdc_name] = Vdc.new(vdc_name, false)
39
+ end
40
+ hash
41
+ end
42
+
43
+ def self.vdc_support
44
+ config_get('vdc', 'vdc_support')
45
+ end
46
+
47
+ def self.default_vdc_name
48
+ vdc = config_get('vdc', 'default_vdc_name')
49
+ fail 'default vdc not found, platform may not support vdc' if vdc.nil?
50
+ vdc
51
+ end
52
+
53
+ def create
54
+ fail ArgumentError,
55
+ 'There is currently no support for non-default VDCs' unless
56
+ @vdc == Vdc.default_vdc_name
57
+ # noop for 'default' vdc
58
+ end
59
+
60
+ def ==(other)
61
+ name == other.name
62
+ end
63
+
64
+ ########################################################
65
+ # PROPERTIES #
66
+ ########################################################
67
+
68
+ def allocate_interface
69
+ # TBD: This property is only partially implemented because it is currently
70
+ # only used for minitest & beaker.
71
+ config_get('vdc', 'allocate_interface', vdc: @vdc)
72
+ end
73
+
74
+ def limit_resource_module_type
75
+ str = config_get('vdc', 'limit_resource_module_type', vdc: @vdc)
76
+ str.strip! unless str.nil?
77
+ end
78
+
79
+ def limit_resource_module_type=(mods)
80
+ state = mods.empty? ? 'no' : ''
81
+ begin
82
+ # limit-resource commands are time-consuming and process in the
83
+ # background. Back-to-back LR commands may fail if processed too
84
+ # quickly.
85
+ config_set('vdc', 'limit_resource_module_type',
86
+ state: state, vdc: @vdc, mods: mods)
87
+
88
+ # TBD: No interfaces are allocated after changing the module-type
89
+ # so 'allocate' is needed to make this useful. Consider moving
90
+ # this into it's own property.
91
+ config_set('vdc', 'allocate_interface_unallocated', vdc: @vdc)
92
+
93
+ rescue CliError => e
94
+ count ||= 1
95
+ if e.message[/VDC is not in active state/] && (count += 1) < 10
96
+ retry
97
+ end
98
+ raise
99
+ end
100
+ end
101
+
102
+ def default_limit_resource_module_type
103
+ config_get_default('vdc', 'limit_resource_module_type')
104
+ end
105
+
106
+ def interface_membership
107
+ config_get('vdc', 'membership', vdc: @vdc)
108
+ end
109
+
110
+ def interface_membership=(intf)
111
+ config_set('vdc', 'membership', vdc: @vdc, intf: intf)
112
+ end
113
+
114
+ def default_interface_membership
115
+ config_get_default('vdc', 'membership')
116
+ end
117
+ end # Class
118
+ end # Module
@@ -0,0 +1,21 @@
1
+ # Copyright (c) 2015-2018 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
+ # Container module for version number only.
16
+ module CiscoNodeUtils
17
+ VERSION = '2.1.0.1'
18
+ gem_version = Gem::Version.new(Gem::VERSION)
19
+ min_gem_version = Gem::Version.new('2.1.0')
20
+ fail 'Required rubygems version >= 2.1.0' if gem_version < min_gem_version
21
+ end