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,527 @@
1
+ # BGP neighbor provider class
2
+ #
3
+ # August 2015, Jie Yang
4
+ #
5
+ # Copyright (c) 2015-2016 Cisco and/or its affiliates.
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+
19
+ require 'ipaddr'
20
+ require_relative 'cisco_cmn_utils'
21
+ require_relative 'node_util'
22
+ require_relative 'feature'
23
+ require_relative 'bgp'
24
+
25
+ module Cisco
26
+ # RouterBgpNeighbor - node utility class for BGP neighbor configs
27
+ class RouterBgpNeighbor < NodeUtil
28
+ attr_reader :nbr, :vrf, :asn
29
+
30
+ def initialize(asn, vrf, nbr, ra=nil, instantiate=true)
31
+ fail TypeError unless nbr.is_a?(String)
32
+ # for IP/prefix format, such as "1.1.1.1/24" or "2000:123:38::34/64",
33
+ # we need to mask the address using prefix length, so that it becomes
34
+ # something like "1.1.1.0/24" or "2000:123:38::/64"
35
+ @nbr = Utils.process_network_mask(nbr)
36
+ @asn = RouterBgp.validate_asnum(asn)
37
+ @vrf = vrf
38
+ @ra = ra
39
+ @get_args = @set_args = { asnum: @asn, nbr: @nbr, ra: @ra }
40
+ @get_args[:vrf] = @set_args[:vrf] = vrf if vrf != 'default'
41
+
42
+ create if instantiate
43
+ end
44
+
45
+ def self.neighbors
46
+ hash = {}
47
+ RouterBgp.routers.each do |asn, vrf|
48
+ hash[asn] = {}
49
+ vrf.each_key do |vrf_id|
50
+ get_args = { asnum: asn }
51
+ get_args[:vrf] = vrf_id unless vrf_id == 'default'
52
+ neighbor_list = config_get('bgp_neighbor', 'all_neighbors', get_args)
53
+ next if neighbor_list.nil?
54
+
55
+ hash[asn][vrf_id] = {}
56
+ neighbor_list.each do |nbr, ra|
57
+ hash[asn][vrf_id][nbr] = RouterBgpNeighbor.new(asn, vrf_id,
58
+ nbr, ra, false)
59
+ end
60
+ end
61
+ end
62
+ hash
63
+ rescue Cisco::CliError => e
64
+ # Raise the error unless the error message contains "Syntax error", which
65
+ # means the error was caused by feature is not enabled.
66
+ raise unless e.clierror =~ /Syntax error/
67
+ return {}
68
+ end
69
+
70
+ def create
71
+ Feature.bgp_enable if platform == :nexus
72
+ set_args_keys(state: '')
73
+ config_set('bgp', 'create_destroy_neighbor', @set_args)
74
+ end
75
+
76
+ def destroy
77
+ set_args_keys(state: 'no')
78
+ config_set('bgp', 'create_destroy_neighbor', @set_args)
79
+ end
80
+
81
+ def set_args_keys_default
82
+ keys = { asnum: @asn, nbr: @nbr }
83
+ keys[:vrf] = @vrf unless @vrf == 'default'
84
+ @set_args = keys
85
+ end
86
+
87
+ def set_args_keys(hash={}) # rubocop:disable Style/AccessorMethodName
88
+ set_args_keys_default
89
+ @set_args = @set_args.merge!(hash) unless hash.empty?
90
+ end
91
+
92
+ def bfd=(val)
93
+ set_args_keys(state: (val) ? '' : 'no')
94
+ Feature.bfd_enable
95
+ config_set('bgp_neighbor', 'bfd', @set_args)
96
+ end
97
+
98
+ def bfd
99
+ config_get('bgp_neighbor', 'bfd', @get_args)
100
+ end
101
+
102
+ def default_bfd
103
+ config_get_default('bgp_neighbor', 'bfd')
104
+ end
105
+
106
+ def description=(desc)
107
+ fail TypeError unless desc.is_a?(String)
108
+ desc.strip!
109
+ set_args_keys(state: desc.empty? ? 'no' : '',
110
+ desc: desc)
111
+ config_set('bgp_neighbor', 'description', @set_args)
112
+ end
113
+
114
+ def description
115
+ config_get('bgp_neighbor', 'description', @get_args)
116
+ end
117
+
118
+ def default_description
119
+ config_get_default('bgp_neighbor', 'description')
120
+ end
121
+
122
+ def connected_check=(val)
123
+ # the cli is "disable-connected-check", therefore when val is true, we
124
+ # need to set set state to "no"
125
+ set_args_keys(state: (val) ? 'no' : '')
126
+ config_set('bgp_neighbor', 'connected_check', @set_args)
127
+ end
128
+
129
+ def connected_check
130
+ result = config_get('bgp_neighbor', 'connected_check', @get_args)
131
+ result ? false : default_connected_check
132
+ end
133
+
134
+ def default_connected_check
135
+ config_get_default('bgp_neighbor', 'connected_check')
136
+ end
137
+
138
+ def capability_negotiation=(val)
139
+ # the cli is "dont-capability-negotiate". Therefore when val is true, we
140
+ # need to set state to "no"
141
+ set_args_keys(state: (val) ? 'no' : '')
142
+ config_set('bgp_neighbor', 'capability_negotiation', @set_args)
143
+ end
144
+
145
+ def capability_negotiation
146
+ result = config_get('bgp_neighbor', 'capability_negotiation', @get_args)
147
+ result ? false : default_capability_negotiation
148
+ end
149
+
150
+ def default_capability_negotiation
151
+ config_get_default('bgp_neighbor', 'capability_negotiation')
152
+ end
153
+
154
+ def dynamic_capability=(val)
155
+ set_args_keys(state: (val) ? '' : 'no')
156
+ config_set('bgp_neighbor', 'dynamic_capability', @set_args)
157
+ end
158
+
159
+ def dynamic_capability
160
+ config_get('bgp_neighbor', 'dynamic_capability', @get_args)
161
+ end
162
+
163
+ def default_dynamic_capability
164
+ config_get_default('bgp_neighbor', 'dynamic_capability')
165
+ end
166
+
167
+ def ebgp_multihop=(ttl)
168
+ set_args_keys(state: (ttl == default_ebgp_multihop) ? 'no' : '',
169
+ ttl: (ttl == default_ebgp_multihop) ? '' : ttl)
170
+ config_set('bgp_neighbor', 'ebgp_multihop', @set_args)
171
+ end
172
+
173
+ def ebgp_multihop
174
+ result = config_get('bgp_neighbor', 'ebgp_multihop', @get_args)
175
+ result.nil? ? default_ebgp_multihop : result.to_i
176
+ end
177
+
178
+ def default_ebgp_multihop
179
+ config_get_default('bgp_neighbor', 'ebgp_multihop')
180
+ end
181
+
182
+ def local_as=(val)
183
+ if val == default_local_as
184
+ set_args_keys(state: 'no', local_as: '')
185
+ else
186
+ set_args_keys(state: '', local_as: val)
187
+ end
188
+ config_set('bgp_neighbor', 'local_as', @set_args)
189
+ end
190
+
191
+ def local_as
192
+ config_get('bgp_neighbor', 'local_as', @get_args).to_s
193
+ end
194
+
195
+ def default_local_as
196
+ config_get_default('bgp_neighbor', 'local_as').to_s
197
+ end
198
+
199
+ def log_neighbor_changes=(val)
200
+ val = val.to_sym
201
+ if val == default_log_neighbor_changes
202
+ set_args_keys(state: 'no', disable: '')
203
+ else
204
+ set_args_keys(state: '',
205
+ disable: (val == :enable) ? '' : 'disable')
206
+ end
207
+ config_set('bgp_neighbor', 'log_neighbor_changes', @set_args)
208
+ end
209
+
210
+ def log_neighbor_changes
211
+ result = config_get('bgp_neighbor', 'log_neighbor_changes', @get_args)
212
+ return default_log_neighbor_changes if result.nil?
213
+ return :disable if /disable/.match(result.first)
214
+ :enable
215
+ end
216
+
217
+ def default_log_neighbor_changes
218
+ result = config_get_default('bgp_neighbor', 'log_neighbor_changes')
219
+ result.to_sym unless result.nil?
220
+ end
221
+
222
+ def low_memory_exempt=(val)
223
+ set_args_keys(state: (val) ? '' : 'no')
224
+ config_set('bgp_neighbor', 'low_memory_exempt', @set_args)
225
+ end
226
+
227
+ def low_memory_exempt
228
+ result = config_get('bgp_neighbor', 'low_memory_exempt', @get_args)
229
+ result ? true : default_low_memory_exempt
230
+ end
231
+
232
+ def default_low_memory_exempt
233
+ config_get_default('bgp_neighbor', 'low_memory_exempt')
234
+ end
235
+
236
+ def maximum_peers=(val)
237
+ set_args_keys(state: (val == default_maximum_peers) ? 'no' : '',
238
+ num: (val == default_maximum_peers) ? '' : val)
239
+ config_set('bgp_neighbor', 'maximum_peers', @set_args)
240
+ end
241
+
242
+ def maximum_peers
243
+ config_get('bgp_neighbor', 'maximum_peers', @get_args)
244
+ end
245
+
246
+ def default_maximum_peers
247
+ config_get_default('bgp_neighbor', 'maximum_peers')
248
+ end
249
+
250
+ def password_set(val, type=nil)
251
+ val = val.to_s
252
+ if val.strip.empty?
253
+ set_args_keys(state: 'no', type: '', passwd: '')
254
+ elsif type.nil?
255
+ set_args_keys(state: '',
256
+ type: Encryption.symbol_to_cli(default_password_type),
257
+ passwd: val.to_s)
258
+ else
259
+ cli_type = nil
260
+ if platform == :ios_xr
261
+ case type
262
+ when :cleartext
263
+ cli_type = 'clear'
264
+ when :md5
265
+ cli_type = 'encrypted'
266
+ else
267
+ fail Cisco::UnsupportedError.new(
268
+ 'RouterBgpNeighbor', 'password',
269
+ nil, "type '#{type}'")
270
+ end
271
+ else
272
+ cli_type = Encryption.symbol_to_cli(type)
273
+ end
274
+
275
+ set_args_keys(state: '',
276
+ type: cli_type,
277
+ passwd: val.to_s)
278
+ end
279
+ config_set('bgp_neighbor', 'password', @set_args)
280
+ end
281
+
282
+ def password
283
+ config_get('bgp_neighbor', 'password', @get_args)
284
+ end
285
+
286
+ def default_password
287
+ config_get_default('bgp_neighbor', 'password')
288
+ end
289
+
290
+ def password_type
291
+ result = config_get('bgp_neighbor', 'password_type', @get_args)
292
+ Encryption.cli_to_symbol(result.to_s)
293
+ end
294
+
295
+ def default_password_type
296
+ result = config_get_default('bgp_neighbor', 'password_type')
297
+ Encryption.cli_to_symbol(result)
298
+ end
299
+
300
+ def remote_as=(val)
301
+ if val == default_remote_as
302
+ set_args_keys(state: 'no', remote_as: '')
303
+ else
304
+ set_args_keys(state: '', remote_as: val)
305
+ end
306
+ config_set('bgp_neighbor', 'remote_as', @set_args)
307
+ end
308
+
309
+ def remote_as
310
+ tra = config_get('bgp_neighbor', 'remote_as', @get_args).to_s
311
+ tra = @ra if tra == default_remote_as && !@ra.nil?
312
+ tra
313
+ end
314
+
315
+ def default_remote_as
316
+ config_get_default('bgp_neighbor', 'remote_as').to_s
317
+ end
318
+
319
+ def remove_private_as=(val)
320
+ val = val.to_sym
321
+ if val == default_remove_private_as
322
+ set_args_keys(state: 'no', option: '')
323
+ else
324
+ set_args_keys(state: '',
325
+ option: (val == :enable) ? '' : val.to_s)
326
+ end
327
+ config_set('bgp_neighbor', 'remove_private_as', @set_args)
328
+ end
329
+
330
+ def remove_private_as
331
+ result = config_get('bgp_neighbor', 'remove_private_as', @get_args)
332
+ return default_remove_private_as if result.nil?
333
+ result.first.nil? ? :enable : result.first.to_sym
334
+ end
335
+
336
+ def default_remove_private_as
337
+ result = config_get_default('bgp_neighbor', 'remove_private_as')
338
+ result.nil? ? nil : result.to_sym
339
+ end
340
+
341
+ def shutdown=(val)
342
+ set_args_keys(state: (val) ? '' : 'no')
343
+ config_set('bgp_neighbor', 'shutdown', @set_args)
344
+ end
345
+
346
+ def shutdown
347
+ result = config_get('bgp_neighbor', 'shutdown', @get_args)
348
+ result ? true : false
349
+ end
350
+
351
+ def default_shutdown
352
+ config_get_default('bgp_neighbor', 'shutdown')
353
+ end
354
+
355
+ def suppress_4_byte_as=(val)
356
+ set_args_keys(state: (val) ? '' : 'no')
357
+ config_set('bgp_neighbor', 'suppress_4_byte_as', @set_args)
358
+ end
359
+
360
+ def suppress_4_byte_as
361
+ result = config_get('bgp_neighbor', 'suppress_4_byte_as', @get_args)
362
+ result ? true : false
363
+ end
364
+
365
+ def default_suppress_4_byte_as
366
+ config_get_default('bgp_neighbor', 'suppress_4_byte_as')
367
+ end
368
+
369
+ def timers_set(keepalive, hold)
370
+ if keepalive == default_timers_keepalive &&
371
+ hold == default_timers_holdtime
372
+ set_args_keys(state: 'no', keepalive: timers_keepalive,
373
+ hold: timers_holdtime)
374
+ else
375
+ set_args_keys(state: '', keepalive: keepalive,
376
+ hold: hold)
377
+ end
378
+ config_set('bgp_neighbor', 'timers_keepalive_hold', @set_args)
379
+ end
380
+
381
+ def timers_keepalive_hold
382
+ match = config_get('bgp_neighbor', 'timers_keepalive_hold', @get_args)
383
+ match.nil? ? default_timers_keepalive_hold : match
384
+ end
385
+
386
+ def timers_keepalive
387
+ keepalive, _hold = timers_keepalive_hold
388
+ return default_timers_keepalive if keepalive.nil?
389
+ keepalive.to_i
390
+ end
391
+
392
+ def timers_holdtime
393
+ _keepalive, hold = timers_keepalive_hold
394
+ return default_timers_holdtime if hold.nil?
395
+ hold.to_i
396
+ end
397
+
398
+ def default_timers_keepalive
399
+ config_get_default('bgp_neighbor', 'timers_keepalive')
400
+ end
401
+
402
+ def default_timers_holdtime
403
+ config_get_default('bgp_neighbor', 'timers_holdtime')
404
+ end
405
+
406
+ def default_timers_keepalive_hold
407
+ ["#{default_timers_keepalive}", "#{default_timers_holdtime}"]
408
+ end
409
+
410
+ def transport_passive_mode=(val)
411
+ if platform == :nexus
412
+ if val == :active_only
413
+ fail Cisco::UnsupportedError.new(
414
+ 'RouterBgpNeighbor', 'transport_passive_mode',
415
+ nil, "value '#{val}'")
416
+ else
417
+ set_args_keys(state: (val == :passive_only) ? '' : 'no')
418
+ config_set('bgp_neighbor', 'transport_passive_mode', @set_args)
419
+ end
420
+ else
421
+ set_args_keys(mode: mode_symbol_to_cli(val),
422
+ state: (val == :none) ? 'no' : '')
423
+ config_set('bgp_neighbor', 'transport_passive_mode', @set_args)
424
+ end
425
+ end
426
+
427
+ def transport_passive_mode
428
+ result = config_get('bgp_neighbor', 'transport_passive_mode', @get_args)
429
+ if platform == :nexus
430
+ result ? :passive_only : :none
431
+ else
432
+ mode_cli_to_symbol(result)
433
+ end
434
+ end
435
+
436
+ def default_transport_passive_mode
437
+ result = config_get_default('bgp_neighbor', 'transport_passive_mode')
438
+ if platform == :nexus
439
+ result ? :passive_only : :none
440
+ else
441
+ mode_cli_to_symbol(result)
442
+ end
443
+ end
444
+
445
+ def transport_passive_only=(val)
446
+ # TODO: add "deprecated" warning?
447
+ self.transport_passive_mode = (val ? :passive_only : :none)
448
+ end
449
+
450
+ def transport_passive_only
451
+ transport_passive_mode == :passive_only
452
+ end
453
+
454
+ def default_transport_passive_only
455
+ default_transport_passive_mode == :passive_only
456
+ end
457
+
458
+ def update_source=(val)
459
+ if val.strip == default_update_source
460
+ set_args_keys(state: 'no', interface: update_source)
461
+ else
462
+ set_args_keys(state: '', interface: val)
463
+ end
464
+ config_set('bgp_neighbor', 'update_source', @set_args)
465
+ end
466
+
467
+ def update_source
468
+ result = config_get('bgp_neighbor', 'update_source', @get_args)
469
+ result.downcase.strip
470
+ end
471
+
472
+ def default_update_source
473
+ config_get_default('bgp_neighbor', 'update_source')
474
+ end
475
+
476
+ def mode_symbol_to_cli(symbol)
477
+ symbol = symbol.downcase if symbol.is_a? String
478
+ case symbol
479
+ when :active_only
480
+ 'active-only'
481
+ when :passive_only
482
+ 'passive-only'
483
+ when :both
484
+ 'both'
485
+ when :none
486
+ ''
487
+ else
488
+ fail KeyError
489
+ end
490
+ end
491
+
492
+ def mode_cli_to_symbol(cli)
493
+ case cli
494
+ when 'active-only'
495
+ :active_only
496
+ when 'passive-only'
497
+ :passive_only
498
+ when 'both'
499
+ :both
500
+ when ''
501
+ :none
502
+ else
503
+ fail KeyError
504
+ end
505
+ end
506
+
507
+ def default_peer_type
508
+ config_get_default('bgp_neighbor', 'peer_type')
509
+ end
510
+
511
+ def peer_type=(val)
512
+ if val == default_peer_type
513
+ @set_args[:state] = 'no'
514
+ @set_args[:peer_type] = ''
515
+ else
516
+ Feature.nv_overlay_evpn_enable
517
+ @set_args[:peer_type] = val
518
+ @set_args[:state] = ''
519
+ end
520
+ config_set('bgp_neighbor', 'peer_type', @set_args)
521
+ end
522
+
523
+ def peer_type
524
+ config_get('bgp_neighbor', 'peer_type', @get_args)
525
+ end
526
+ end # class
527
+ end # module