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,327 @@
1
+ # VRF_AF provider class
2
+ #
3
+ # January 2016, Chris Van Heuveln
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_relative 'cisco_cmn_utils'
20
+ require_relative 'node_util'
21
+ require_relative 'feature'
22
+
23
+ module Cisco
24
+ # VrfAF - node utility class for VRF Address-Family configuration
25
+ class VrfAF < NodeUtil
26
+ def initialize(vrf, af, instantiate=true)
27
+ validate_args(vrf, af)
28
+ create if instantiate
29
+ end
30
+
31
+ def to_s
32
+ "VRF #{@vrf} afi #{@afi} safi #{@safi}"
33
+ end
34
+
35
+ def self.afs
36
+ hash = {}
37
+ vrfs = config_get('vrf', 'all_vrfs')
38
+ vrfs.each do |vrf|
39
+ hash[vrf] = {}
40
+ afs = config_get('vrf_af', 'all_afs', vrf: vrf)
41
+
42
+ next if afs.nil?
43
+ afs.each do |af|
44
+ hash[vrf][af] = VrfAF.new(vrf, af, false)
45
+ end
46
+ end
47
+ hash
48
+ end
49
+
50
+ def create
51
+ config_set('vrf', 'address_family', set_args_keys(state: ''))
52
+ end
53
+
54
+ def destroy
55
+ config_set('vrf', 'address_family', set_args_keys(state: 'no'))
56
+ end
57
+
58
+ def validate_args(vrf, af)
59
+ fail ArgumentError unless vrf.is_a?(String) && (vrf.length > 0)
60
+ fail ArgumentError, "'af' must be an array specifying afi and safi" unless
61
+ af.is_a?(Array) || af.length == 2
62
+ @vrf = vrf.downcase
63
+ @afi, @safi = af
64
+ set_args_keys_default
65
+ end
66
+
67
+ def set_args_keys_default
68
+ keys = { afi: @afi, safi: @safi }
69
+ keys[:vrf] = @vrf unless @vrf == 'default'
70
+ @get_args = @set_args = keys
71
+ end
72
+
73
+ def set_args_keys(hash={}) # rubocop:disable Style/AccessorMethodName
74
+ set_args_keys_default
75
+ @set_args = @get_args.merge!(hash) unless hash.empty?
76
+ end
77
+
78
+ def route_target_feature_enable(require_nv_overlay=nil, require_ngmvpn=nil)
79
+ return unless platform == :nexus
80
+
81
+ # All NX route-target properties require feature bgp
82
+ Feature.bgp_enable
83
+
84
+ # Some platforms/versions also require nv overlay for some properties
85
+ if require_nv_overlay
86
+ Feature.nv_overlay_enable if Feature.nv_overlay_supported?
87
+ Feature.nv_overlay_evpn_enable if Feature.nv_overlay_evpn_supported?
88
+ end
89
+
90
+ # ngmvpn feature is required for 'mvpn' enablement
91
+ Feature.ngmvpn_enable if require_ngmvpn
92
+ end
93
+
94
+ ########################################################
95
+ # PROPERTIES #
96
+ ########################################################
97
+
98
+ def route_policy_export
99
+ config_get('vrf_af', 'route_policy_export', @get_args)
100
+ end
101
+
102
+ def route_policy_export=(name)
103
+ Feature.bgp_enable if platform == :nexus
104
+ # Nexus requires passing in <policy_name> in "no export map" command.
105
+ if name
106
+ set_args_keys(state: '', policy_name: name)
107
+ else
108
+ remove_name = config_get('vrf_af', 'route_policy_export', @get_args)
109
+ return nil if remove_name.nil?
110
+ set_args_keys(state: 'no', policy_name: remove_name)
111
+ end
112
+ config_set('vrf_af', 'route_policy_export', @set_args)
113
+ end
114
+
115
+ def default_route_policy_export
116
+ config_get_default('vrf_af', 'route_policy_export')
117
+ end
118
+
119
+ def route_policy_import
120
+ config_get('vrf_af', 'route_policy_import', @get_args)
121
+ end
122
+
123
+ def route_policy_import=(name)
124
+ Feature.bgp_enable if platform == :nexus
125
+ # Nexus requires passing in <policy_name> in "no import map" command.
126
+ if name
127
+ set_args_keys(state: '', policy_name: name)
128
+ else
129
+ remove_name = config_get('vrf_af', 'route_policy_import', @get_args)
130
+ return nil if remove_name.nil?
131
+ set_args_keys(state: 'no', policy_name: remove_name)
132
+ end
133
+ config_set('vrf_af', 'route_policy_import', @set_args)
134
+ end
135
+
136
+ def default_route_policy_import
137
+ config_get_default('vrf_af', 'route_policy_import')
138
+ end
139
+
140
+ # --------------------------
141
+ def route_target_both_auto
142
+ config_get('vrf_af', 'route_target_both_auto', @get_args)
143
+ end
144
+
145
+ def route_target_both_auto=(state)
146
+ route_target_feature_enable(:require_nv_overlay)
147
+ set_args_keys(state: (state ? '' : 'no'))
148
+ config_set('vrf_af', 'route_target_both_auto', @set_args)
149
+ end
150
+
151
+ def default_route_target_both_auto
152
+ config_get_default('vrf_af', 'route_target_both_auto')
153
+ end
154
+
155
+ # --------------------------
156
+ def route_target_both_auto_evpn
157
+ config_get('vrf_af', 'route_target_both_auto_evpn', @get_args)
158
+ end
159
+
160
+ def route_target_both_auto_evpn=(state)
161
+ route_target_feature_enable(:require_nv_overlay)
162
+ set_args_keys(state: (state ? '' : 'no'))
163
+ config_set('vrf_af', 'route_target_both_auto_evpn', @set_args)
164
+ end
165
+
166
+ def default_route_target_both_auto_evpn
167
+ config_get_default('vrf_af', 'route_target_both_auto_evpn')
168
+ end
169
+
170
+ # --------------------------
171
+ def route_target_both_auto_mvpn
172
+ config_get('vrf_af', 'route_target_both_auto_mvpn', @get_args)
173
+ end
174
+
175
+ def route_target_both_auto_mvpn=(state)
176
+ route_target_feature_enable(nil, :require_ngmvpn)
177
+ set_args_keys(state: (state ? '' : 'no'))
178
+ config_set('vrf_af', 'route_target_both_auto_mvpn', @set_args)
179
+ end
180
+
181
+ def default_route_target_both_auto_mvpn
182
+ config_get_default('vrf_af', 'route_target_both_auto_mvpn')
183
+ end
184
+
185
+ # --------------------------
186
+ def route_target_export
187
+ cmds = config_get('vrf_af', 'route_target_export', @get_args)
188
+ cmds.nil? ? nil : cmds.sort
189
+ end
190
+
191
+ def route_target_export=(should)
192
+ route_target_feature_enable
193
+ route_target_delta(should, route_target_export, 'route_target_export')
194
+ end
195
+
196
+ def default_route_target_export
197
+ config_get_default('vrf_af', 'route_target_export')
198
+ end
199
+
200
+ # --------------------------
201
+ def route_target_export_evpn
202
+ cmds = config_get('vrf_af', 'route_target_export_evpn', @get_args)
203
+ cmds.nil? ? nil : cmds.sort
204
+ end
205
+
206
+ def route_target_export_evpn=(should)
207
+ route_target_feature_enable(:require_nv_overlay)
208
+ route_target_delta(should, route_target_export_evpn,
209
+ 'route_target_export_evpn')
210
+ end
211
+
212
+ def default_route_target_export_evpn
213
+ config_get_default('vrf_af', 'route_target_export_evpn')
214
+ end
215
+
216
+ # --------------------------
217
+ def route_target_export_mvpn
218
+ cmds = config_get('vrf_af', 'route_target_export_mvpn', @get_args)
219
+ cmds.nil? ? nil : cmds.sort
220
+ end
221
+
222
+ def route_target_export_mvpn=(should)
223
+ route_target_feature_enable(nil, :require_ngmvpn)
224
+ route_target_delta(should, route_target_export_mvpn,
225
+ 'route_target_export_mvpn')
226
+ end
227
+
228
+ def default_route_target_export_mvpn
229
+ config_get_default('vrf_af', 'route_target_export_mvpn')
230
+ end
231
+
232
+ # --------------------------
233
+ def route_target_export_stitching
234
+ cmds = config_get('vrf_af', 'route_target_export_stitching', @get_args)
235
+ cmds.nil? ? nil : cmds.sort
236
+ end
237
+
238
+ def route_target_export_stitching=(should)
239
+ route_target_delta(should, route_target_export_stitching,
240
+ 'route_target_export_stitching')
241
+ end
242
+
243
+ def default_route_target_export_stitching
244
+ config_get_default('vrf_af', 'route_target_export_stitching')
245
+ end
246
+
247
+ # --------------------------
248
+ def route_target_import
249
+ cmds = config_get('vrf_af', 'route_target_import', @get_args)
250
+ cmds.nil? ? nil : cmds.sort
251
+ end
252
+
253
+ def route_target_import=(should)
254
+ route_target_feature_enable
255
+ route_target_delta(should, route_target_import, 'route_target_import')
256
+ end
257
+
258
+ def default_route_target_import
259
+ config_get_default('vrf_af', 'route_target_import')
260
+ end
261
+
262
+ # --------------------------
263
+ def route_target_import_evpn
264
+ cmds = config_get('vrf_af', 'route_target_import_evpn', @get_args)
265
+ cmds.nil? ? nil : cmds.sort
266
+ end
267
+
268
+ def route_target_import_evpn=(should)
269
+ route_target_feature_enable(:require_nv_overlay)
270
+ route_target_delta(should, route_target_import_evpn,
271
+ 'route_target_import_evpn')
272
+ end
273
+
274
+ def default_route_target_import_evpn
275
+ config_get_default('vrf_af', 'route_target_import_evpn')
276
+ end
277
+
278
+ # --------------------------
279
+ def route_target_import_mvpn
280
+ cmds = config_get('vrf_af', 'route_target_import_mvpn', @get_args)
281
+ cmds.nil? ? nil : cmds.sort
282
+ end
283
+
284
+ def route_target_import_mvpn=(should)
285
+ route_target_feature_enable(nil, :require_ngmvpn)
286
+ route_target_delta(should, route_target_import_mvpn,
287
+ 'route_target_import_mvpn')
288
+ end
289
+
290
+ def default_route_target_import_mvpn
291
+ config_get_default('vrf_af', 'route_target_import_mvpn')
292
+ end
293
+
294
+ # --------------------------
295
+ def route_target_import_stitching
296
+ cmds = config_get('vrf_af', 'route_target_import_stitching', @get_args)
297
+ cmds.nil? ? nil : cmds.sort
298
+ end
299
+
300
+ def route_target_import_stitching=(should)
301
+ route_target_delta(should, route_target_import_stitching,
302
+ 'route_target_import_stitching')
303
+ end
304
+
305
+ def default_route_target_import_stitching
306
+ config_get_default('vrf_af', 'route_target_import_stitching')
307
+ end
308
+
309
+ # --------------------------
310
+ # route_target_delta is a common helper function for the route_target
311
+ # properties. It walks the delta hash and adds/removes each target cli.
312
+ def route_target_delta(should, is, prop)
313
+ fail Cisco::UnsupportedError.new('vrf_af', prop) if is.nil?
314
+ delta_hash = Utils.delta_add_remove(should, is)
315
+ return if delta_hash.values.flatten.empty?
316
+ [:add, :remove].each do |action|
317
+ Cisco::Logger.debug("#{prop}" \
318
+ "#{@get_args}\n #{action}: #{delta_hash[action]}")
319
+ delta_hash[action].each do |community|
320
+ state = (action == :add) ? '' : 'no'
321
+ set_args_keys(state: state, community: community)
322
+ config_set('vrf_af', prop, @set_args)
323
+ end
324
+ end
325
+ end
326
+ end # class
327
+ end # module
@@ -0,0 +1,125 @@
1
+ # Mike Wiebe, November 2014
2
+ #
3
+ # Copyright (c) 2014-2016 Cisco and/or its affiliates.
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require_relative 'node_util'
18
+ require_relative 'logger'
19
+
20
+ module Cisco
21
+ # Vtp - node utility class for VTP configuration management
22
+ class Vtp < NodeUtil
23
+ attr_reader :name
24
+
25
+ MAX_VTP_DOMAIN_NAME_SIZE = 32
26
+ MAX_VTP_PASSWORD_SIZE = 64
27
+
28
+ # Constructor for Vtp
29
+ def initialize(instantiate=true)
30
+ Feature.vtp_enable if instantiate
31
+ end
32
+
33
+ # Get vtp domain name
34
+ def self.domain
35
+ dom_def = config_get_default('vtp', 'domain')
36
+ if Feature.vtp_enabled?
37
+ dom = config_get('vtp', 'domain')
38
+ return dom == '-' ? dom_def : dom
39
+ else
40
+ dom_def
41
+ end
42
+ end
43
+
44
+ # The only way to remove a vtp domain is to turn the vtp
45
+ # feature off.
46
+ def destroy
47
+ Feature.vtp_disable
48
+ end
49
+
50
+ def domain
51
+ Vtp.domain
52
+ end
53
+
54
+ # Set vtp domain name
55
+ def domain=(d)
56
+ d = d.to_s
57
+ fail ArgumentError unless d.length.between?(1, MAX_VTP_DOMAIN_NAME_SIZE)
58
+ config_set('vtp', 'domain', domain: d)
59
+ end
60
+
61
+ # Get vtp password
62
+ def password
63
+ # Unfortunately nxapi returns "\\" when the password is not set
64
+ password = config_get('vtp', 'password') if Feature.vtp_enabled?
65
+ return '' if password.nil? || password == '\\'
66
+ password
67
+ rescue Cisco::RequestNotSupported => e
68
+ # Certain platforms generate a Cisco::RequestNotSupported when the
69
+ # vtp password is not set. We catch this specific error and
70
+ # return empty '' for the password.
71
+ return '' if e.message[/Structured output not supported/]
72
+ end
73
+
74
+ # Set vtp password
75
+ def password=(password)
76
+ fail TypeError if password.nil?
77
+ fail TypeError unless password.is_a? String
78
+ fail ArgumentError if password.length > MAX_VTP_PASSWORD_SIZE
79
+ Feature.vtp_enable
80
+ state = (password == default_password) ? 'no' : ''
81
+ config_set('vtp', 'password', state: state, password: password)
82
+ end
83
+
84
+ # Get default vtp password
85
+ def default_password
86
+ config_get_default('vtp', 'password')
87
+ end
88
+
89
+ # Get vtp filename
90
+ def filename
91
+ filename = config_get('vtp', 'filename') if Feature.vtp_enabled?
92
+ filename.nil? ? default_filename : filename
93
+ end
94
+
95
+ # Set vtp filename
96
+ def filename=(uri)
97
+ fail TypeError if uri.nil?
98
+ Feature.vtp_enable
99
+ uri = uri.to_s
100
+ state = uri.empty? ? 'no' : ''
101
+ config_set('vtp', 'filename', state: state, uri: uri)
102
+ end
103
+
104
+ # Get default vtp filename
105
+ def default_filename
106
+ config_get_default('vtp', 'filename')
107
+ end
108
+
109
+ # Get vtp version
110
+ def version
111
+ Feature.vtp_enabled? ? config_get('vtp', 'version') : default_version
112
+ end
113
+
114
+ # Set vtp version
115
+ def version=(v)
116
+ Feature.vtp_enable
117
+ config_set('vtp', 'version', version: v)
118
+ end
119
+
120
+ # Get default vtp version
121
+ def default_version
122
+ config_get_default('vtp', 'version')
123
+ end
124
+ end
125
+ end