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,165 @@
1
+ # Radius Global provider class
2
+
3
+ # Jonathan Tripathy et al., September 2015
4
+
5
+ # Copyright (c) 2014-2017 Cisco and/or its affiliates.
6
+
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+
19
+ require_relative 'node_util'
20
+
21
+ module Cisco
22
+ # RadiusGlobal - node utility class for
23
+ # Radius Global configuration management
24
+ class RadiusGlobal < NodeUtil
25
+ attr_reader :name
26
+
27
+ def initialize(name)
28
+ fail TypeError unless name.is_a?(String)
29
+ fail ArgumentError,
30
+ "This provider only accepts an id of 'default'" \
31
+ unless name.eql?('default')
32
+ @name = name
33
+ end
34
+
35
+ def self.radius_global
36
+ hash = {}
37
+ hash['default'] = RadiusGlobal.new('default')
38
+ hash
39
+ end
40
+
41
+ def ==(other)
42
+ name == other.name
43
+ end
44
+
45
+ def timeout
46
+ config_get('radius_global', 'timeout')
47
+ end
48
+
49
+ def default_timeout
50
+ config_get_default('radius_global', 'timeout')
51
+ end
52
+
53
+ def timeout=(val)
54
+ unless val.nil?
55
+ fail ArgumentError, 'timeout must be an Integer' \
56
+ unless val.is_a?(Integer)
57
+ end
58
+
59
+ if val.nil?
60
+ config_set('radius_global',
61
+ 'timeout',
62
+ state: 'no',
63
+ timeout: timeout)
64
+ else
65
+ config_set('radius_global',
66
+ 'timeout',
67
+ state: '',
68
+ timeout: val)
69
+ end
70
+ end
71
+
72
+ def retransmit_count
73
+ config_get('radius_global', 'retransmit')
74
+ end
75
+
76
+ def default_retransmit_count
77
+ config_get_default('radius_global', 'retransmit').to_i
78
+ end
79
+
80
+ def retransmit_count=(val)
81
+ unless val.nil?
82
+ fail ArgumentError, 'retransmit_count must be an Integer' \
83
+ unless val.is_a?(Integer)
84
+ end
85
+
86
+ if val.nil?
87
+ config_set('radius_global',
88
+ 'retransmit',
89
+ state: 'no',
90
+ count: retransmit_count)
91
+ else
92
+ config_set('radius_global',
93
+ 'retransmit',
94
+ state: '',
95
+ count: val)
96
+ end
97
+ end
98
+
99
+ def key_format
100
+ config_get('radius_global', 'key_format')
101
+ end
102
+
103
+ def key
104
+ str = config_get('radius_global', 'key')
105
+ return if str.nil?
106
+ str.strip
107
+ end
108
+
109
+ def key_set(value, format)
110
+ unless value.nil?
111
+ fail ArgumentError, 'value must be a String' \
112
+ unless value.is_a?(String)
113
+ end
114
+
115
+ unless format.nil?
116
+ fail ArgumentError, 'format must be an Integer' \
117
+ unless format.is_a?(Integer)
118
+ end
119
+
120
+ if value.nil? && !key.nil?
121
+ value = Utils.add_quotes(key)
122
+ config_set('radius_global',
123
+ 'key',
124
+ state: 'no',
125
+ key: "#{key_format} #{value}")
126
+ elsif !format.nil?
127
+ value = Utils.add_quotes(value)
128
+ config_set('radius_global',
129
+ 'key',
130
+ state: '',
131
+ key: "#{format} #{value}")
132
+ else
133
+ value = Utils.add_quotes(value)
134
+ config_set('radius_global',
135
+ 'key',
136
+ state: '',
137
+ key: "#{value}")
138
+ end
139
+ end
140
+
141
+ # Get default source interface
142
+ def default_source_interface
143
+ config_get_default('radius_global', 'source_interface')
144
+ end
145
+
146
+ # Set source interface
147
+ def source_interface=(name)
148
+ if name
149
+ config_set(
150
+ 'radius_global', 'source_interface',
151
+ state: '', source_interface: name)
152
+ else
153
+ config_set(
154
+ 'radius_global', 'source_interface',
155
+ state: 'no', source_interface: '')
156
+ end
157
+ end
158
+
159
+ # Get source interface
160
+ def source_interface
161
+ i = config_get('radius_global', 'source_interface')
162
+ i.nil? ? default_source_interface : i.downcase
163
+ end
164
+ end # class
165
+ end # module
@@ -0,0 +1,421 @@
1
+ # Radius Server provider class
2
+
3
+ # Jonathan Tripathy et al., September 2015
4
+
5
+ # Copyright (c) 2014-2016 Cisco and/or its affiliates.
6
+
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+
19
+ require File.join(File.dirname(__FILE__), 'node_util')
20
+ require 'ipaddr'
21
+
22
+ module Cisco
23
+ # RadiusServer - node utility class for
24
+ # Raidus Server configuration management
25
+ class RadiusServer < NodeUtil
26
+ attr_reader :name
27
+
28
+ def initialize(name, instantiate=true, auth_p=nil, acct_p=nil)
29
+ unless name =~ /^[a-zA-Z0-9\.\:]*$/
30
+ fail ArgumentError,
31
+ 'Invalid value (IPv4/IPv6 address contains invalid characters)'
32
+ end
33
+
34
+ begin
35
+ IPAddr.new(name)
36
+ rescue
37
+ raise ArgumentError,
38
+ 'Invalid value (Name is not a valid single IPv4/IPv6 address)'
39
+ end
40
+ @name = name
41
+
42
+ if platform == :ios_xr
43
+ if auth_p.nil?
44
+ @auth_port = config_get_default('radius_server', 'auth-port')
45
+ else
46
+ fail ArgumentError, 'auth_p must be an Integer' \
47
+ unless auth_p.is_a?(Integer)
48
+ @auth_port = auth_p
49
+ end
50
+
51
+ if acct_p.nil?
52
+ @acct_port = config_get_default('radius_server', 'acct-port')
53
+ else
54
+ fail ArgumentError, 'acct_p must be an Integer' \
55
+ unless acct_p.is_a?(Integer)
56
+ @acct_port = acct_p
57
+ end
58
+ end
59
+
60
+ create if instantiate
61
+
62
+ return if platform == :ios_xr
63
+ unless auth_p.nil?
64
+ fail ArgumentError, 'auth_p must be an Integer' \
65
+ unless auth_p.is_a?(Integer)
66
+ self.auth_port = auth_p
67
+ end
68
+
69
+ return if acct_p.nil?
70
+ fail ArgumentError, 'acct_p must be an Integer' \
71
+ unless acct_p.is_a?(Integer)
72
+ self.acct_port = acct_p
73
+ end
74
+
75
+ def self.radiusservers
76
+ hash = {}
77
+
78
+ radiusservers_list = config_get('radius_server', 'hosts')
79
+ return hash if radiusservers_list.empty?
80
+ radiusservers_list.each do |id|
81
+ if platform == :ios_xr
82
+ authp = config_get('radius_server', 'auth-port', ip: id)
83
+ authp = authp[0] if authp.is_a?(Array)
84
+ authp = authp.to_i
85
+
86
+ acctp = config_get('radius_server', 'acct-port', ip: id)
87
+ acctp = acctp[0] if acctp.is_a?(Array)
88
+ acctp = acctp.to_i
89
+
90
+ hash[id] = RadiusServer.new(id, false, authp, acctp)
91
+ else
92
+ hash[id] = RadiusServer.new(id, false)
93
+ end
94
+ end
95
+
96
+ hash
97
+ end
98
+
99
+ def create
100
+ destroy if platform == :ios_xr
101
+ config_set('radius_server',
102
+ 'hosts',
103
+ state: '',
104
+ ip: @name,
105
+ auth_port: @auth_port,
106
+ acct_port: @acct_port)
107
+ end
108
+
109
+ def destroy
110
+ if platform == :ios_xr
111
+ # This provider only support a 1-1 mapping between host and ports.
112
+ # Thus, we must remove the other entries on different ports.
113
+ all_hosts = config_get('radius_server', 'host_port_pairs', ip: @name)
114
+ return unless all_hosts.is_a?(Array)
115
+
116
+ warn("#{name} is configured multiple times on the device" \
117
+ ' (possibly using different ports). This is unsupported by this' \
118
+ ' API and the duplicate entries are being deleted.') \
119
+ if all_hosts.count > 1
120
+
121
+ all_hosts.each do |host|
122
+ auth = host[0]
123
+ acct = host[1]
124
+
125
+ config_set('radius_server',
126
+ 'hosts',
127
+ state: 'no',
128
+ ip: @name,
129
+ auth_port: auth,
130
+ acct_port: acct)
131
+ end
132
+ else
133
+ config_set('radius_server',
134
+ 'hosts',
135
+ state: 'no',
136
+ ip: @name,
137
+ auth_port: @auth_port,
138
+ acct_port: @acct_port)
139
+ end
140
+ end
141
+
142
+ def ==(other)
143
+ name == other.name
144
+ end
145
+
146
+ def auth_port
147
+ platform == :ios_xr ? @auth_port : config_get('radius_server',
148
+ 'auth-port', ip: @name)
149
+ end
150
+
151
+ def default_auth_port
152
+ config_get_default('radius_server', 'auth-port')
153
+ end
154
+
155
+ def auth_port=(val)
156
+ fail("'auth_port' setter method not applicable for this platform." \
157
+ 'auth_port must be passed in to the constructor.') \
158
+ if platform == :ios_xr
159
+
160
+ unless val.nil?
161
+ fail ArgumentError, 'auth_port must be an Integer' \
162
+ unless val.is_a?(Integer)
163
+ end
164
+
165
+ if val.nil?
166
+ config_set('radius_server',
167
+ 'auth-port',
168
+ state: 'no',
169
+ ip: @name,
170
+ port: auth_port)
171
+ else
172
+ config_set('radius_server',
173
+ 'auth-port',
174
+ state: '',
175
+ ip: @name,
176
+ port: val)
177
+ end
178
+ end
179
+
180
+ def acct_port
181
+ platform == :ios_xr ? @acct_port : config_get('radius_server',
182
+ 'acct-port', ip: @name)
183
+ end
184
+
185
+ def default_acct_port
186
+ config_get_default('radius_server', 'acct-port')
187
+ end
188
+
189
+ def acct_port=(val)
190
+ fail("'acct_port' setter method not applicable for this platform." \
191
+ 'acct_port must be passed in to the constructor.') \
192
+ if platform == :ios_xr
193
+
194
+ unless val.nil?
195
+ fail ArgumentError, 'acct_port must be an Integer' \
196
+ unless val.is_a?(Integer)
197
+ end
198
+
199
+ if val.nil?
200
+ config_set('radius_server',
201
+ 'acct-port',
202
+ state: 'no',
203
+ ip: @name,
204
+ port: acct_port)
205
+ else
206
+ config_set('radius_server',
207
+ 'acct-port',
208
+ state: '',
209
+ ip: @name,
210
+ port: val)
211
+ end
212
+ end
213
+
214
+ def timeout
215
+ val = config_get('radius_server',
216
+ 'timeout',
217
+ ip: @name,
218
+ auth_port: @auth_port,
219
+ acct_port: @acct_port)
220
+
221
+ val = val[0] if val.is_a?(Array)
222
+ val = val.to_i unless val.nil?
223
+ val
224
+ end
225
+
226
+ def default_timeout
227
+ config_get_default('radius_server', 'timeout')
228
+ end
229
+
230
+ def timeout=(val)
231
+ unless val.nil?
232
+ fail ArgumentError, 'timeout must be an Integer' \
233
+ unless val.is_a?(Integer)
234
+ end
235
+
236
+ if val.nil?
237
+ return if timeout.nil?
238
+ config_set('radius_server',
239
+ 'timeout',
240
+ state: 'no',
241
+ ip: @name,
242
+ auth_port: @auth_port,
243
+ acct_port: @acct_port,
244
+ timeout: timeout)
245
+ else
246
+ config_set('radius_server',
247
+ 'timeout',
248
+ state: '',
249
+ ip: @name,
250
+ auth_port: @auth_port,
251
+ acct_port: @acct_port,
252
+ timeout: val)
253
+ end
254
+ end
255
+
256
+ def retransmit_count
257
+ val = config_get('radius_server',
258
+ 'retransmit',
259
+ ip: @name,
260
+ auth_port: @auth_port,
261
+ acct_port: @acct_port)
262
+ val = val[0] if val.is_a?(Array)
263
+ val = val.to_i unless val.nil?
264
+ val
265
+ end
266
+
267
+ def default_retransmit_count
268
+ config_get_default('radius_server', 'retransmit')
269
+ end
270
+
271
+ def retransmit_count=(val)
272
+ unless val.nil?
273
+ fail ArgumentError, 'retransmit_count must be an Integer' \
274
+ unless val.is_a?(Integer)
275
+ end
276
+
277
+ if val.nil?
278
+ return if retransmit_count.nil?
279
+ config_set('radius_server',
280
+ 'retransmit',
281
+ state: 'no',
282
+ ip: @name,
283
+ auth_port: @auth_port,
284
+ acct_port: @acct_port,
285
+ count: retransmit_count)
286
+ else
287
+ config_set('radius_server',
288
+ 'retransmit',
289
+ state: '',
290
+ ip: @name,
291
+ auth_port: @auth_port,
292
+ acct_port: @acct_port,
293
+ count: val)
294
+ end
295
+ end
296
+
297
+ def accounting
298
+ return nil if platform == :ios_xr
299
+ val = config_get('radius_server', 'accounting', ip: @name)
300
+ if val.nil?
301
+ false
302
+ else
303
+ val
304
+ end
305
+ end
306
+
307
+ def default_accounting
308
+ config_get_default('radius_server', 'accounting')
309
+ end
310
+
311
+ def accounting=(val)
312
+ if !val
313
+ config_set('radius_server',
314
+ 'accounting',
315
+ state: 'no',
316
+ ip: @name)
317
+ else
318
+ config_set('radius_server',
319
+ 'accounting',
320
+ state: '',
321
+ ip: @name)
322
+ end
323
+ end
324
+
325
+ def authentication
326
+ return nil if platform == :ios_xr
327
+ val = config_get('radius_server', 'authentication', ip: @name)
328
+ if val.nil?
329
+ false
330
+ else
331
+ val
332
+ end
333
+ end
334
+
335
+ def default_authentication
336
+ config_get_default('radius_server', 'authentication')
337
+ end
338
+
339
+ def authentication=(val)
340
+ if !val
341
+ config_set('radius_server',
342
+ 'authentication',
343
+ state: 'no',
344
+ ip: @name)
345
+ else
346
+ config_set('radius_server',
347
+ 'authentication',
348
+ state: '',
349
+ ip: @name)
350
+ end
351
+ end
352
+
353
+ def key_format
354
+ val = config_get('radius_server',
355
+ 'key_format',
356
+ ip: @name,
357
+ auth_port: @auth_port,
358
+ acct_port: @acct_port)
359
+
360
+ val = val[0] if val.is_a?(Array)
361
+ val
362
+ end
363
+
364
+ def key
365
+ val = config_get('radius_server',
366
+ 'key',
367
+ ip: @name,
368
+ auth_port: @auth_port,
369
+ acct_port: @acct_port)
370
+
371
+ val = val[0] if val.is_a?(Array)
372
+ return if val.nil? || val.empty?
373
+ index = val.index('auth-port')
374
+ val = val[0..index - 2] unless index.nil?
375
+ val.strip
376
+ end
377
+
378
+ def key_set(value, format)
379
+ unless value.nil?
380
+ fail ArgumentError, 'value must be a String' \
381
+ unless value.is_a?(String)
382
+ end
383
+
384
+ unless format.nil?
385
+ fail ArgumentError, 'format must be an Integer' \
386
+ unless format.is_a?(Integer)
387
+ end
388
+
389
+ # Return as we don't need to do anything
390
+ return if value.nil? && key.nil?
391
+
392
+ if value.nil? && !key.nil?
393
+ config_set('radius_server',
394
+ 'key',
395
+ state: 'no',
396
+ ip: @name,
397
+ auth_port: @auth_port,
398
+ acct_port: @acct_port,
399
+ key: "#{key_format} #{key}")
400
+ elsif !format.nil?
401
+ value = Utils.add_quotes(value)
402
+ config_set('radius_server',
403
+ 'key',
404
+ state: '',
405
+ ip: @name,
406
+ auth_port: @auth_port,
407
+ acct_port: @acct_port,
408
+ key: "#{format} #{value}")
409
+ else
410
+ value = Utils.add_quotes(value)
411
+ config_set('radius_server',
412
+ 'key',
413
+ state: '',
414
+ ip: @name,
415
+ auth_port: @auth_port,
416
+ acct_port: @acct_port,
417
+ key: "#{value}")
418
+ end
419
+ end
420
+ end # class
421
+ end # module
@@ -0,0 +1,117 @@
1
+ # Radius Server Group provider class
2
+
3
+ # Jonathan Tripathy et al., October 2015
4
+
5
+ # Copyright (c) 2014-2016 Cisco and/or its affiliates.
6
+
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+
19
+ require_relative 'node_util'
20
+ require 'ipaddr'
21
+
22
+ module Cisco
23
+ # RadiusServerGroup - node utility class for
24
+ # Raidus Server configuration management
25
+ class RadiusServerGroup < NodeUtil
26
+ attr_reader :name
27
+
28
+ def initialize(name, instantiate=true)
29
+ unless name.is_a?(String)
30
+ fail ArgumentError, 'Invalid value (Name is not a String)'
31
+ end
32
+
33
+ @name = name
34
+
35
+ create if instantiate
36
+ end
37
+
38
+ def self.radius_server_groups
39
+ hash = {}
40
+ group_list = config_get('radius_server_group', 'group')
41
+ return hash if group_list.nil?
42
+
43
+ group_list.each do |id|
44
+ hash[id] = RadiusServerGroup.new(id, false)
45
+ end
46
+
47
+ hash
48
+ end
49
+
50
+ def create
51
+ config_set('radius_server_group',
52
+ 'group',
53
+ state: '',
54
+ name: @name)
55
+ end
56
+
57
+ def destroy
58
+ config_set('radius_server_group',
59
+ 'group',
60
+ state: 'no',
61
+ name: @name)
62
+ end
63
+
64
+ def ==(other)
65
+ name == other.name
66
+ end
67
+
68
+ def default_servers
69
+ config_get_default('radius_server_group', 'servers')
70
+ end
71
+
72
+ def servers
73
+ val = config_get('radius_server_group', 'servers', @name)
74
+ val = default_servers if val.nil?
75
+ val
76
+ end
77
+
78
+ def servers=(val)
79
+ fail ArgumentError, 'Servers must be an array of valid IP addresses' \
80
+ unless val.is_a?(Array)
81
+
82
+ current = servers
83
+
84
+ # Remove IPs that are no longer required
85
+ current.each do |old_ip|
86
+ next if val.include?(old_ip)
87
+ config_set('radius_server_group',
88
+ 'servers',
89
+ group: @name,
90
+ state: 'no',
91
+ ip: old_ip)
92
+ end
93
+
94
+ # Add new IPs that aren't already on the device
95
+ val.each do |new_ip|
96
+ unless new_ip =~ /^[a-zA-Z0-9\.\:]*$/
97
+ fail ArgumentError,
98
+ 'Servers must be an array of valid IPv4/IPv6 addresses'
99
+ end
100
+
101
+ begin
102
+ IPAddr.new(new_ip)
103
+ rescue
104
+ raise ArgumentError,
105
+ 'Servers must be an array of valid IPv4/IPv6 addresses'
106
+ end
107
+
108
+ next unless current.nil? || !current.include?(new_ip)
109
+ config_set('radius_server_group',
110
+ 'servers',
111
+ group: @name,
112
+ state: '',
113
+ ip: new_ip)
114
+ end
115
+ end
116
+ end # class
117
+ end # module