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,82 @@
1
+ # Domain Name provider class
2
+ #
3
+ # October 2015, Bryan Jen
4
+ #
5
+ # Copyright (c) 2014-2016 Cisco and/or its affiliates.
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+
19
+ require_relative 'node_util'
20
+
21
+ module Cisco
22
+ # DomainName- node utility class for domain name configuration
23
+ class DomainName < NodeUtil
24
+ attr_reader :name, :vrf
25
+
26
+ def initialize(name, vrf=nil, instantiate=true)
27
+ @name = name
28
+ @vrf = vrf
29
+ create if instantiate
30
+ end
31
+
32
+ def self.domainnames(vrf=nil)
33
+ hash = {}
34
+ if vrf.nil?
35
+ domain = config_get('dnsclient', 'domain_name')
36
+ else
37
+ domain = config_get('dnsclient', 'domain_name_vrf', vrf: vrf)
38
+ end
39
+ hash[domain] = DomainName.new(domain, vrf, false) unless domain.empty?
40
+ hash
41
+ end
42
+
43
+ def ==(other)
44
+ (name == other.name) && (vrf == other.vrf)
45
+ end
46
+
47
+ def create
48
+ if @vrf.nil?
49
+ config_set('dnsclient', 'domain_name',
50
+ state: '', name: @name)
51
+ else
52
+ # On some platforms attempts to create a new domain results
53
+ # in the error. 'ERROR: Deletion of VRF test in progresswait
54
+ # for it to complete'. We handle this by trying up to 10 times
55
+ # with a 1 second delay between attempts before giving up.
56
+ tries = 10
57
+ begin
58
+ config_set('dnsclient', 'domain_name_vrf',
59
+ state: '', name: @name, vrf: @vrf)
60
+ rescue Cisco::CliError => e
61
+ if /ERROR: Deletion of VRF .* in progress/.match(e.to_s)
62
+ sleep 1
63
+ tries -= 1
64
+ # rubocop:disable Metrics/BlockNesting
65
+ retry if tries > 0
66
+ # rubocop:enable Metrics/BlockNesting
67
+ end
68
+ end
69
+ end
70
+ end
71
+
72
+ def destroy
73
+ if @vrf.nil?
74
+ config_set('dnsclient', 'domain_name',
75
+ state: 'no', name: @name)
76
+ else
77
+ config_set('dnsclient', 'domain_name_vrf',
78
+ state: 'no', name: @name, vrf: @vrf)
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,112 @@
1
+ # NXAPI implementation of encapsulation profile class
2
+ #
3
+ # March 2016, Rohan Gandhi Korlepara
4
+ #
5
+ # Copyright (c) 2014-2016 Cisco and/or its affiliates.
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+
19
+ require_relative 'node_util'
20
+ require_relative 'feature'
21
+
22
+ module Cisco
23
+ # Encapsulation - node utility class for Encapsulation config mgmt.
24
+ class Encapsulation < NodeUtil
25
+ attr_reader :encap_name
26
+
27
+ # name: name of the encap instance
28
+ # instantiate: true = create encap instance
29
+ def initialize(name, instantiate=true)
30
+ fail ArgumentError unless name.length > 0
31
+ @encap_name = name
32
+ create if instantiate
33
+ end
34
+
35
+ def to_s
36
+ "Encapsulation #{encap_name}"
37
+ end
38
+
39
+ # Create a hash of all current encap instances.
40
+ def self.encaps
41
+ return {} unless Feature.vni_enabled?
42
+ instances = config_get('encapsulation', 'all_encaps')
43
+ return {} if instances.nil?
44
+ hash = {}
45
+ instances.each do |name|
46
+ hash[name] = Encapsulation.new(name, false)
47
+ end
48
+ hash
49
+ end
50
+
51
+ # This will expand the string to a list of bds as integers
52
+ def self.string_to_array(string)
53
+ list = []
54
+ narray = string.split(',')
55
+ narray.each do |elem|
56
+ if elem.include?('-')
57
+ es = elem.gsub('-', '..')
58
+ ea = es.split('..').map { |d| Integer(d) }
59
+ er = ea[0]..ea[1]
60
+ list << er.to_a
61
+ else
62
+ list << elem.to_i
63
+ end
64
+ end
65
+ list.flatten
66
+ end
67
+
68
+ # Enable feature and create encap instance
69
+ def create
70
+ Feature.vni_enable
71
+ config_set('encapsulation', 'create', profile: @encap_name)
72
+ end
73
+
74
+ # Destroy an encap instance
75
+ def destroy
76
+ config_set('encapsulation', 'destroy', profile: @encap_name)
77
+ end
78
+
79
+ # ----------
80
+ # PROPERTIES
81
+ # ----------
82
+
83
+ def range_summarize(string)
84
+ Utils.array_to_str(Encapsulation.string_to_array(string.to_s), false)
85
+ end
86
+
87
+ def dot1q_map
88
+ result = config_get('encapsulation', 'dot1q_map', profile: @encap_name)
89
+ return default_dot1q_map if result.empty?
90
+
91
+ result[0] = range_summarize(result[0])
92
+ result[1] = range_summarize(result[1])
93
+ result
94
+ end
95
+
96
+ def dot1q_map=(map)
97
+ state = ''
98
+ if map.empty?
99
+ state = 'no'
100
+ map = dot1q_map
101
+ return if map.empty?
102
+ end
103
+ vlans, vnis = map
104
+ config_set('encapsulation', 'dot1q_map', profile: @encap_name,
105
+ state: state, vlans: vlans, vnis: vnis)
106
+ end
107
+
108
+ def default_dot1q_map
109
+ config_get_default('encapsulation', 'dot1q_map')
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,110 @@
1
+ # August 2018
2
+ # March 2016, Glenn F. Matthews
3
+ #
4
+ # Copyright (c) 2016-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 'yaml'
19
+ require_relative 'logger'
20
+
21
+ module Cisco
22
+ # Class representing the configuration environment
23
+ class Environment
24
+ @environments = {}
25
+ @default_environment_name = 'default'
26
+
27
+ # Autogenerate Cisco::Environment.default_environment_name and
28
+ # Cisco::Environment.default_environment_name= class methods.
29
+ class << self
30
+ attr_accessor :default_environment_name
31
+ end
32
+
33
+ # We have three tiers of configuration:
34
+ # 1) default (defined in this file)
35
+ # 2) System-wide gem configuration in /etc/cisco_node_utils.yaml
36
+ # 3) User configuration in ~/cisco_node_utils.yaml
37
+
38
+ DEFAULT_ENVIRONMENT = {
39
+ host: nil, # localhost by default
40
+ port: nil, # only applicable to gRPC
41
+ username: nil,
42
+ password: nil,
43
+ cookie: nil, # only applicable to nxapi
44
+ }
45
+
46
+ def self.environments
47
+ if @environments.empty?
48
+ @environments = merge_config('/etc/cisco_node_utils.yaml',
49
+ @environments)
50
+ @environments = merge_config('~/cisco_node_utils.yaml',
51
+ @environments)
52
+ @environments.each do |name, config|
53
+ Cisco::Logger.debug("Environment '#{name}': #{config}")
54
+ end
55
+ end
56
+ @environments
57
+ end
58
+
59
+ def self.merge_config(path, current_config)
60
+ data = data_from_file(path)
61
+ data.each do |name, config|
62
+ # in case config is nil:
63
+ config ||= {}
64
+ # in case current_config has no entry for this name:
65
+ current_config[name] ||= DEFAULT_ENVIRONMENT.clone
66
+ # merge it on in!
67
+ current_config[name].merge!(strings_to_symbols(config))
68
+ end
69
+ current_config
70
+ end
71
+
72
+ def self.data_from_file(path)
73
+ begin
74
+ path = File.expand_path(path)
75
+ rescue ArgumentError => e
76
+ # Can happen if path includes '~' but $HOME is not defined
77
+ Cisco::Logger.debug "Failed to load #{path}: #{e}"
78
+ return {}
79
+ end
80
+ unless File.file?(path)
81
+ Cisco::Logger.debug "No file found at #{path}"
82
+ return {}
83
+ end
84
+ unless File.readable?(path)
85
+ Cisco::Logger.debug "No permissions to read #{path}"
86
+ return {}
87
+ end
88
+ YAML.load_file(path)
89
+ rescue Psych::SyntaxError => e
90
+ Cisco::Logger.error("Error loading #{path}: #{e}")
91
+ {}
92
+ end
93
+
94
+ def self.add_env(env_name, env_hash)
95
+ fail ArgumentError, 'empty environment name' if env_name.empty?
96
+ fail TypeError, 'invalid environment hash' unless env_hash.is_a?(Hash)
97
+ @environments[env_name] = env_hash
98
+ end
99
+
100
+ def self.strings_to_symbols(hash)
101
+ Hash[hash.map { |k, v| [k.to_sym, v] }]
102
+ end
103
+
104
+ def self.environment(name=nil)
105
+ name ||= @default_environment_name
106
+ Cisco::Logger.debug("Getting environment '#{name}'")
107
+ environments.fetch(name, DEFAULT_ENVIRONMENT)
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,66 @@
1
+ # January 2018, Rahul Shenoy
2
+ #
3
+ # Copyright (c) 2018 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 'cisco_cmn_utils'
18
+ require_relative 'node_util'
19
+ require_relative 'feature'
20
+
21
+ module Cisco
22
+ # node_utils class for evpn_multisite
23
+ class EvpnMulticast < NodeUtil
24
+ def initialize
25
+ @get_args = @set_args = {}
26
+ create
27
+ end
28
+
29
+ def create
30
+ return unless multicast == default_multicast
31
+ Feature.ngmvpn_enable
32
+ config_set('feature', 'nv_overlay', state: '')
33
+ @set_args[:state] = ''
34
+ config_set('evpn_multicast', 'multicast', @set_args)
35
+ end
36
+
37
+ def destroy
38
+ @set_args[:state] = 'no'
39
+ config_set('evpn_multicast', 'multicast', @set_args)
40
+ end
41
+
42
+ def self.multicast
43
+ config_get('evpn_multicast', 'multicast')
44
+ end
45
+
46
+ def multicast
47
+ config_get('evpn_multicast', 'multicast')
48
+ end
49
+
50
+ def multicast=(bool)
51
+ fail TypeError unless [true, false].include?(bool)
52
+ @set_args[:state] = bool ? '' : 'no'
53
+ if @set_args[:state] == 'no'
54
+ unless multicast == default_multicast
55
+ config_set('evpn_multicast', 'multicast', @set_args)
56
+ end
57
+ else
58
+ config_set('evpn_multicast', 'multicast', @set_args)
59
+ end
60
+ end
61
+
62
+ def default_multicast
63
+ config_get_default('evpn_multicast', 'multicast')
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,96 @@
1
+ # October 2017, Rahul Shenoy
2
+ #
3
+ # Copyright (c) 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 'cisco_cmn_utils'
18
+ require_relative 'node_util'
19
+ require_relative 'feature'
20
+
21
+ module Cisco
22
+ # node_utils class for evpn_multisite
23
+ class EvpnMultisite < NodeUtil
24
+ attr_reader :multisiteid, :time
25
+
26
+ def initialize(multisiteid, instantiate=true)
27
+ err_msg = "multisiteid must be either a 'String' or an" \
28
+ " 'Integer' object"
29
+ fail ArgumentError, err_msg unless multisiteid.is_a?(Integer) ||
30
+ multisiteid.is_a?(String)
31
+ @multisiteid = multisiteid.to_i
32
+ @get_args = @set_args = { multisiteid: @multisiteid }
33
+ create if instantiate
34
+ end
35
+
36
+ def create
37
+ # There is an issue with EX platform using
38
+ # Feature.nv_overlay_enable generating error code '400'
39
+ # Using config_set for enabling nv overlay
40
+ config_set('feature', 'nv_overlay', state: '')
41
+ sleep 1
42
+ @set_args[:state] = ''
43
+ config_set('evpn_multisite', 'multisite', @set_args)
44
+ end
45
+
46
+ def destroy
47
+ @set_args[:state] = 'no'
48
+ # HACK: set time to a dummy value
49
+ @set_args[:time] = 30
50
+ config_set('evpn_multisite', 'delay_restore', @set_args)
51
+ config_set('evpn_multisite', 'multisite', @set_args)
52
+ end
53
+
54
+ def self.multisite
55
+ nu_obj = nil
56
+ ms_id = config_get('evpn_multisite', 'multisite')
57
+ nu_obj = EvpnMultisite.new(ms_id, false) if ms_id
58
+ nu_obj
59
+ end
60
+
61
+ def multisite
62
+ config_get('evpn_multisite', 'multisite')
63
+ end
64
+
65
+ def multisite=(multisiteid)
66
+ err_msg = "multisiteid must be either a 'String' or an" \
67
+ " 'Integer' object"
68
+ fail ArgumentError, err_msg unless multisiteid.is_a?(Integer) ||
69
+ multisiteid.is_a?(String)
70
+ @multisiteid = multisiteid.to_i
71
+ @set_args[:multisiteid] = @multisiteid
72
+ config_set('evpn_multisite', 'multisite', @set_args)
73
+ end
74
+
75
+ def delay_restore
76
+ config_get('evpn_multisite', 'delay_restore', @get_args)
77
+ end
78
+
79
+ def delay_restore=(time)
80
+ # HACK: set a dummy time value when removing the property
81
+ dummy_time = 30
82
+ if time == default_delay_restore
83
+ @set_args[:state] = 'no'
84
+ @set_args[:time] = dummy_time
85
+ else
86
+ @set_args[:time] = time
87
+ @set_args[:state] = '' unless @set_args[:state]
88
+ end
89
+ config_set('evpn_multisite', 'delay_restore', @set_args)
90
+ end
91
+
92
+ def default_delay_restore
93
+ config_get_default('evpn_multisite', 'delay_restore')
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,84 @@
1
+ # October 2017, Rahul Shenoy
2
+ #
3
+ # Copyright (c) 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 'cisco_cmn_utils'
18
+ require_relative 'node_util'
19
+ require_relative 'feature'
20
+
21
+ module Cisco
22
+ # node_utils class for evpn_stormcontrol
23
+ class EvpnStormcontrol < NodeUtil
24
+ attr_reader :stormcontrol_type, :level
25
+
26
+ def initialize(stormcontrol_type, level, instantiate=true)
27
+ err_msg = 'storm control type must be one of the following:' \
28
+ ' broadcast, multicast or unicast'
29
+ type_list = %w(broadcast multicast unicast)
30
+ fail ArgumentError, err_msg unless type_list.include?(stormcontrol_type)
31
+ @stormcontrol_type = stormcontrol_type
32
+
33
+ err_msg = "level must be either a 'String' or an" \
34
+ " 'Integer' object"
35
+ fail ArgumentError, err_msg unless level.is_a?(Integer) ||
36
+ level.is_a?(String)
37
+ @level = level.to_i
38
+ @get_args = @set_args = { stormcontrol_type: @stormcontrol_type,
39
+ level: @level }
40
+ create if instantiate
41
+ end
42
+
43
+ def config_stormcontrol
44
+ stormcontrol_type = @set_args[:stormcontrol_type]
45
+ config_set('evpn_stormcontrol', stormcontrol_type, @set_args)
46
+ end
47
+
48
+ def create
49
+ @set_args[:state] = ''
50
+ config_stormcontrol
51
+ end
52
+
53
+ def destroy
54
+ @set_args[:state] = 'no'
55
+ config_stormcontrol
56
+ end
57
+
58
+ # Create a hash of all stormcontrol instances
59
+ def self.stormcontrol
60
+ hash = {}
61
+ type_list = %w(broadcast multicast unicast)
62
+ type_list.each do |type|
63
+ level = config_get('evpn_stormcontrol', type)
64
+ hash[type] = EvpnStormcontrol.new(type, level, false) if level
65
+ end
66
+ hash
67
+ end
68
+
69
+ def level
70
+ config_get('evpn_stormcontrol', @get_args[:stormcontrol_type])
71
+ end
72
+
73
+ def level=(level)
74
+ err_msg = "level must be either a 'String' or an" \
75
+ " 'Integer' object"
76
+ fail ArgumentError, err_msg unless level.is_a?(Integer) ||
77
+ level.is_a?(String)
78
+ @level = level.to_i
79
+ @set_args[:level] = @level
80
+ @set_args[:state] = ''
81
+ config_stormcontrol
82
+ end
83
+ end
84
+ end