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,545 @@
1
+ # -*- coding: utf-8 -*-
2
+ # August 2015, Richard Wellum
3
+ #
4
+ # Copyright (c) 2015-2016 Cisco and/or its affiliates.
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+
18
+ require_relative 'cisco_cmn_utils'
19
+ require_relative 'node_util'
20
+ require_relative 'feature'
21
+ require_relative 'bgp'
22
+ require_relative 'logger'
23
+
24
+ module Cisco
25
+ # RouterBgpAF - node utility class for BGP address-family config management
26
+ class RouterBgpAF < NodeUtil
27
+ def initialize(asn, vrf, af, instantiate=true)
28
+ fail ArgumentError if vrf.to_s.empty? || af.to_s.empty?
29
+ err_msg = '"af" argument must be an array of two string values ' \
30
+ 'containing an afi + safi tuple'
31
+ fail ArgumentError, err_msg unless af.is_a?(Array) || af.length == 2
32
+ err_msg = '"vrf" argument must be "default" for l2vpn address-family'
33
+ fail ArgumentError, err_msg if vrf != 'default' && af[1][/evpn/]
34
+ @asn = RouterBgp.validate_asnum(asn)
35
+ @vrf = vrf
36
+ @afi, @safi = af
37
+ set_args_keys_default
38
+ create if instantiate
39
+ end
40
+
41
+ def self.afs
42
+ af_hash = {}
43
+ RouterBgp.routers.each do |asn, vrfs|
44
+ af_hash[asn] = {}
45
+ vrfs.keys.each do |vrf_name|
46
+ get_args = { asnum: asn }
47
+ get_args[:vrf] = vrf_name unless vrf_name == 'default'
48
+ # Call yaml and search for address-family statements
49
+ af_list = config_get('bgp_af', 'all_afs', get_args)
50
+
51
+ next if af_list.nil?
52
+
53
+ af_hash[asn][vrf_name] = {}
54
+ af_list.each do |af|
55
+ af_hash[asn][vrf_name][af] =
56
+ RouterBgpAF.new(asn, vrf_name, af, false)
57
+ end
58
+ end
59
+ end
60
+ af_hash
61
+ end
62
+
63
+ def create
64
+ if platform == :nexus
65
+ Feature.bgp_enable
66
+ Feature.nv_overlay_evpn_enable if @safi[/evpn/]
67
+ end
68
+ set_args_keys(state: '')
69
+ config_set('bgp', 'address_family', @set_args)
70
+ end
71
+
72
+ def destroy
73
+ set_args_keys(state: 'no')
74
+ config_set('bgp', 'address_family', @set_args)
75
+ end
76
+
77
+ #
78
+ # Helper methods to delete @set_args hash keys
79
+ #
80
+ def set_args_keys_default
81
+ keys = { asnum: @asn, afi: @afi, safi: @safi }
82
+ keys[:vrf] = @vrf unless @vrf == 'default'
83
+ @get_args = @set_args = keys
84
+ end
85
+
86
+ def set_args_keys(hash={}) # rubocop:disable Style/AccessorMethodName
87
+ set_args_keys_default
88
+ @set_args = @get_args.merge!(hash) unless hash.empty?
89
+ end
90
+
91
+ ########################################################
92
+ # PROPERTIES #
93
+ ########################################################
94
+
95
+ def fail_unsupported(callee)
96
+ fail Cisco::UnsupportedError.new('bgp_af', callee.to_s)
97
+ end
98
+
99
+ #
100
+ # Client to client (Getter/Setter/Default)
101
+ #
102
+
103
+ def client_to_client=(state)
104
+ # IOS XR uses "client-to-client reflection disable",
105
+ # so turning it "on" means disabling it.
106
+ # Thus we invert the desired state before telling the CLI what to do:
107
+ state = !state if ios_xr?
108
+ set_args_keys(state: (state ? '' : 'no'))
109
+ config_set('bgp_af', 'client_to_client', @set_args)
110
+ end
111
+
112
+ #
113
+ # Default Information (Getter/Setter/Default)
114
+ #
115
+
116
+ def default_information_originate
117
+ config_get('bgp_af', 'default_information_originate', @get_args)
118
+ end
119
+
120
+ #
121
+ # Next Hop route map (Getter/Setter/Default)
122
+ #
123
+ def next_hop_route_map=(route_map)
124
+ route_map.strip!
125
+ if route_map.empty?
126
+ state = 'no'
127
+ # Dummy routemap required if not configured.
128
+ if next_hop_route_map.empty?
129
+ route_map = 'dummy_routemap'
130
+ else
131
+ route_map = next_hop_route_map
132
+ end
133
+ end
134
+ set_args_keys(state: state, route_map: route_map)
135
+ config_set('bgp_af', 'next_hop_route_map', @set_args)
136
+ end
137
+
138
+ #
139
+ # additional paths (Getter/Setter/Default)
140
+ #
141
+ def additional_paths_selection=(route_map)
142
+ route_map.strip!
143
+ if route_map.empty?
144
+ state = 'no'
145
+ # Dummy routemap required if not configured.
146
+ if additional_paths_selection.empty?
147
+ route_map = 'dummy_routemap'
148
+ else
149
+ route_map = additional_paths_selection
150
+ end
151
+ end
152
+ set_args_keys(state: state, route_map: route_map, route_policy: route_map)
153
+ config_set('bgp_af', 'additional_paths_selection', @set_args)
154
+ end
155
+
156
+ # advertise_l2vpn_evpn
157
+ def advertise_l2vpn_evpn
158
+ config_get('bgp_af', 'advertise_l2vpn_evpn', @get_args)
159
+ end
160
+
161
+ def advertise_l2vpn_evpn=(state)
162
+ Feature.nv_overlay_evpn_enable if platform == :nexus
163
+ set_args_keys(state: (state ? '' : 'no'))
164
+ config_set('bgp_af', 'advertise_l2vpn_evpn', @set_args)
165
+ end
166
+
167
+ #
168
+ # dampen_igp_metric (Getter/Setter/Default)
169
+ #
170
+
171
+ # dampen_igp_metric
172
+ def dampen_igp_metric
173
+ match = config_get('bgp_af', 'dampen_igp_metric', @get_args)
174
+ if match.is_a?(Array)
175
+ return nil if match[0] == 'no '
176
+ return match[1].to_i if match[1]
177
+ end
178
+ default_dampen_igp_metric
179
+ end
180
+
181
+ def dampen_igp_metric=(val)
182
+ set_args_keys(state: (val.nil?) ? 'no' : '',
183
+ num: (val.nil?) ? '' : val)
184
+ config_set('bgp_af', 'dampen_igp_metric', @set_args)
185
+ end
186
+
187
+ #
188
+ # dampening (Getter/Setter/Default)
189
+ #
190
+
191
+ # The data presented to or retrieved from the config_set and config_get
192
+ # for dampening is one of 4 possibilities:
193
+ #
194
+ # Value Meaning
195
+ # ----- -------
196
+ # nil Dampening is not configured
197
+ # [] Dampening is configured with no options
198
+ # [1,3,4,5,nil] Dampening + decay, reuse, suppress, suppress_max
199
+ # [nil,nil,nil,nil,'route-map'] Dampening + routemap
200
+ def dampening
201
+ data = config_get('bgp_af', 'dampening', @get_args)
202
+ return nil if data.nil? # no dampening
203
+
204
+ data = data.flatten
205
+
206
+ # dampening nil nil nil nil nil
207
+ val = []
208
+
209
+ if !data[4].nil?
210
+ # dampening nil nil nil nil route-map
211
+ val = data[4]
212
+ elsif !data[3].nil? && data[4].nil?
213
+ # dampening 1 2 3 4 nil
214
+ val = data[0..3]
215
+ end
216
+
217
+ val
218
+ end
219
+
220
+ # Return true if dampening is enabled, else false.
221
+ def dampening_state
222
+ !dampening.nil?
223
+ end
224
+
225
+ # For all of the following dampening getters, half_time, reuse_time,
226
+ # suppress_time, and max_suppress_time, return nil if dampening
227
+ # is not configured, but also return nil if a dampening routemap
228
+ # is configured because they are mutually exclusive.
229
+ def dampening_half_time
230
+ return nil if dampening.nil? || dampening_routemap_configured?
231
+ if dampening.is_a?(Array) && !dampening.empty?
232
+ dampening[0].to_i
233
+ else
234
+ default_dampening_half_time
235
+ end
236
+ end
237
+
238
+ def dampening_reuse_time
239
+ return nil if dampening.nil? || dampening_routemap_configured?
240
+ if dampening.is_a?(Array) && !dampening.empty?
241
+ dampening[1].to_i
242
+ else
243
+ default_dampening_reuse_time
244
+ end
245
+ end
246
+
247
+ def dampening_suppress_time
248
+ return nil if dampening.nil? || dampening_routemap_configured?
249
+ if dampening.is_a?(Array) && !dampening.empty?
250
+ dampening[2].to_i
251
+ else
252
+ default_dampening_suppress_time
253
+ end
254
+ end
255
+
256
+ def dampening_max_suppress_time
257
+ return nil if dampening.nil? || dampening_routemap_configured?
258
+ if dampening.is_a?(Array) && !dampening.empty?
259
+ dampening[3].to_i
260
+ else
261
+ default_dampening_max_suppress_time
262
+ end
263
+ end
264
+
265
+ def dampening_routemap
266
+ if dampening.nil? || (dampening.is_a?(String) && dampening.size > 0)
267
+ return dampening
268
+ end
269
+ default_dampening_routemap
270
+ end
271
+
272
+ def dampening_routemap_configured?
273
+ if dampening_routemap.is_a?(String) && dampening_routemap.size > 0
274
+ true
275
+ else
276
+ false
277
+ end
278
+ end
279
+
280
+ def dampening=(damp_array)
281
+ fail ArgumentError if damp_array.kind_of?(Array) &&
282
+ !(damp_array.length == 4 ||
283
+ damp_array.length == 0)
284
+
285
+ # Set defaults args
286
+ state = ''
287
+ route_map = ''
288
+ decay = ''
289
+ reuse = ''
290
+ suppress = ''
291
+ suppress_max = ''
292
+
293
+ if damp_array.nil?
294
+ # 'no dampening ...' command - no dampening handles all cases
295
+ state = 'no'
296
+ Cisco::Logger.debug("Dampening 'no dampening'")
297
+ elsif damp_array.empty?
298
+ # 'dampening' command - nothing to do here
299
+ Cisco::Logger.debug("Dampening 'dampening'")
300
+ elsif damp_array.size == 4
301
+ # 'dampening dampening_decay dampening_reuse \
302
+ # dampening_suppress dampening_suppress_max' command
303
+ decay = damp_array[0]
304
+ reuse = damp_array[1]
305
+ suppress = damp_array[2]
306
+ suppress_max = damp_array[3]
307
+ Cisco::Logger.debug("Dampening 'dampening #{damp_array.join(' ')}''")
308
+ else
309
+ # 'dampening route-map WORD' command
310
+ route_map = "route-map #{damp_array}" if platform == :nexus
311
+ route_map = "route-policy #{damp_array}" if platform == :ios_xr
312
+ route_map.strip!
313
+ Cisco::Logger.debug("Dampening 'dampening route-map #{route_map}'")
314
+ end
315
+
316
+ # Set final args
317
+ set_args_keys(
318
+ state: state,
319
+ route_map: route_map,
320
+ decay: decay,
321
+ reuse: reuse,
322
+ suppress: suppress,
323
+ suppress_max: suppress_max,
324
+ )
325
+
326
+ Cisco::Logger.debug("Dampening args=#{@set_args}")
327
+ config_set('bgp_af', 'dampening', @set_args)
328
+ end
329
+
330
+ #
331
+ # Distance (Getter/Setter/Default)
332
+ #
333
+ def distance_set(ebgp, ibgp, local)
334
+ set_args_keys(state: '', ebgp: ebgp, ibgp: ibgp, local: local)
335
+ config_set('bgp_af', 'distance', @set_args)
336
+ end
337
+
338
+ def distance_ebgp
339
+ ebgp, _ibgp, _local = distance
340
+ return default_distance_ebgp if ebgp.nil?
341
+ ebgp.to_i
342
+ end
343
+
344
+ def distance_ibgp
345
+ _ebgp, ibgp, _local = distance
346
+ return default_distance_ibgp if ibgp.nil?
347
+ ibgp.to_i
348
+ end
349
+
350
+ def distance_local
351
+ _ebgp, _ibgp, local = distance
352
+ return default_distance_local if local.nil?
353
+ local.to_i
354
+ end
355
+
356
+ #
357
+ # default_metric (Getter/Setter/Default)
358
+ #
359
+
360
+ def default_metric
361
+ config_get('bgp_af', 'default_metric', @get_args)
362
+ end
363
+
364
+ def default_metric=(val)
365
+ # To remove the default_metric you can not use 'no default_metric'
366
+ # dummy metric to work around this
367
+ dummy_metric = 1
368
+ set_args_keys(state: (val == default_default_metric) ? 'no' : '',
369
+ num: (val == default_default_metric) ? dummy_metric : val)
370
+ config_set('bgp_af', 'default_metric', @set_args)
371
+ end
372
+
373
+ #
374
+ # inject_map (Getter/Setter/Default)
375
+ #
376
+
377
+ def inject_map
378
+ cmds = config_get('bgp_af', 'inject_map', @get_args)
379
+ cmds.nil? ? nil : cmds.each(&:compact!).sort
380
+ end
381
+
382
+ def inject_map=(should_list)
383
+ c = inject_map
384
+ fail_unsupported(__callee__) if c.nil?
385
+ delta_hash = Utils.delta_add_remove(should_list, c)
386
+ return if delta_hash.values.flatten.empty?
387
+ [:add, :remove].each do |action|
388
+ Cisco::Logger.debug("inject_map delta #{@get_args}\n #{action}: " \
389
+ "#{delta_hash[action]}")
390
+ delta_hash[action].each do |inject, exist, copy|
391
+ # inject & exist are mandatory, copy is optional
392
+ state = (action == :add) ? '' : 'no'
393
+ copy = 'copy-attributes' unless copy.nil?
394
+ set_args_keys(state: state, inject: inject, exist: exist, copy: copy)
395
+ config_set('bgp_af', 'inject_map', @set_args)
396
+ end
397
+ end
398
+ end
399
+
400
+ #
401
+ # maximum_paths (Getter/Setter/Default)
402
+ #
403
+
404
+ def maximum_paths=(val)
405
+ set_args_keys(state: (val == default_maximum_paths) ? 'no' : '',
406
+ num: (val == default_maximum_paths) ? '' : val)
407
+ config_set('bgp_af', 'maximum_paths', @set_args)
408
+ end
409
+
410
+ def maximum_paths_ibgp=(val)
411
+ set_args_keys(state: (val == default_maximum_paths_ibgp) ? 'no' : '',
412
+ num: (val == default_maximum_paths_ibgp) ? '' : val)
413
+ config_set('bgp_af', 'maximum_paths_ibgp', @set_args)
414
+ end
415
+
416
+ #
417
+ # Networks (Getter/Setter/Default)
418
+ #
419
+
420
+ # Build an array of all network commands currently on the device
421
+ def networks
422
+ c = config_get('bgp_af', 'networks', @get_args)
423
+ c.nil? ? nil : c.each(&:compact!)
424
+ end
425
+
426
+ # networks setter.
427
+ # Processes a hash of network commands from delta_add_remove().
428
+ def networks=(should_list)
429
+ delta_hash = Utils.delta_add_remove(should_list, networks)
430
+ return if delta_hash.values.flatten.empty?
431
+ [:add, :remove].each do |action|
432
+ Cisco::Logger.debug("networks delta #{@get_args}\n #{action}: " \
433
+ "#{delta_hash[action]}")
434
+ delta_hash[action].each do |network, route_map_policy|
435
+ state = (action == :add) ? '' : 'no'
436
+ network = Utils.process_network_mask(network)
437
+ unless route_map_policy.nil?
438
+ route_map = "route-map #{route_map_policy}"
439
+ route_policy = "route-policy #{route_map_policy}"
440
+ end
441
+ set_args_keys(state: state, network: network, route_map: route_map,
442
+ route_policy: route_policy)
443
+ config_set('bgp_af', 'networks', @set_args)
444
+ end
445
+ end
446
+ end
447
+
448
+ #
449
+ # Redistribute (Getter/Setter/Default)
450
+ #
451
+
452
+ # Build an array of all redistribute commands currently on the device
453
+ def redistribute
454
+ c = config_get('bgp_af', 'redistribute', @get_args)
455
+ c.nil? ? nil : c.each(&:compact!).sort
456
+ end
457
+
458
+ # redistribute setter.
459
+ # Process a hash of redistribute commands from delta_add_remove().
460
+ def redistribute=(should)
461
+ delta_hash = Utils.delta_add_remove(should, redistribute)
462
+ return if delta_hash.values.flatten.empty?
463
+ [:add, :remove].each do |action|
464
+ Cisco::Logger.debug("redistribute delta #{@get_args}\n #{action}: " \
465
+ "#{delta_hash[action]}")
466
+ delta_hash[action].each do |protocol, policy|
467
+ state = (action == :add) ? '' : 'no'
468
+ set_args_keys(state: state, protocol: protocol, policy: policy)
469
+
470
+ # route-map/policy may be optional on some platforms
471
+ cmd = policy.nil? ? 'redistribute' : 'redistribute_policy'
472
+ config_set('bgp_af', cmd, @set_args)
473
+ end
474
+ end
475
+ end
476
+
477
+ def default_redistribute
478
+ config_get_default('bgp_af', 'redistribute')
479
+ end
480
+
481
+ #
482
+ # Table Map (Getter/Setter/Default)
483
+ #
484
+
485
+ def table_map_set(map, filter=false)
486
+ # To remove table map we can not use 'no table-map'
487
+ # Dummy-map specified to work around this
488
+ if filter
489
+ attr = 'table_map_filter'
490
+ else
491
+ attr = 'table_map'
492
+ end
493
+ dummy_map = 'dummy'
494
+ if map == default_table_map
495
+ @set_args[:state] = 'no'
496
+ @set_args[:map] = dummy_map
497
+ else
498
+ @set_args[:state] = ''
499
+ @set_args[:map] = map
500
+ end
501
+ config_set('bgp_af', attr, @set_args)
502
+ set_args_keys_default
503
+ end
504
+
505
+ ##########################################
506
+ # Universal Getter, Default Getter, and Setter
507
+ #
508
+ def method_missing(*args)
509
+ name = args[0].to_s
510
+ if args.length == 1 # Getter
511
+ if name =~ /^default_(.*)$/
512
+ config_get_default('bgp_af', Regexp.last_match(1))
513
+ else
514
+ config_get('bgp_af', name, @get_args)
515
+ end
516
+ elsif args.length == 2 && name =~ /^(.*)=$/ # Setter
517
+ set_args_keys(state: args[1] ? '' : 'no')
518
+ config_set('bgp_af', Regexp.last_match(1), @set_args)
519
+ else
520
+ super
521
+ end
522
+ end
523
+
524
+ # Is the given name available in the YAML?
525
+ def respond_to?(method_sym, _include_private=false)
526
+ name = method_sym.to_s
527
+ key = :getter?
528
+ if name =~ /^(.*)=$/
529
+ name = Regexp.last_match(1)
530
+ # Use table_map_set() to set these properties
531
+ return false if name == 'table_map' || name == 'table_map_filter'
532
+ key = :setter?
533
+ elsif name =~ /^default_(.*)$/
534
+ name = Regexp.last_match(1)
535
+ key = :default_value?
536
+ end
537
+ begin
538
+ ref = node.cmd_ref.lookup('bgp_af', name)
539
+ ref.send(key)
540
+ rescue IndexError
541
+ super
542
+ end
543
+ end
544
+ end
545
+ end