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,64 @@
1
+ # Syslog facility provider class
2
+ #
3
+ # Rick Sherman et al., August 2018
4
+ #
5
+ # Copyright (c) 2014-2018 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
+ # SyslogFacility - node utility class for Syslog facility severity management
23
+ class SyslogFacility < NodeUtil
24
+ attr_reader :facility, :level
25
+
26
+ def initialize(opts, instantiate=true)
27
+ @facility = opts['facility']
28
+ @level = opts['level']
29
+
30
+ create if instantiate
31
+ end
32
+
33
+ def self.facilities
34
+ keys = %w(facility level)
35
+ hash = {}
36
+ facility_key_list = config_get('syslog_facility', 'facility')
37
+ return hash if facility_key_list.nil?
38
+
39
+ facility_key_list.each do |id|
40
+ hash[id[0]] = SyslogFacility.new(Hash[keys.zip(id)], false)
41
+ end
42
+
43
+ hash
44
+ end
45
+
46
+ def ==(other)
47
+ facility == other.facility && level == other.level
48
+ end
49
+
50
+ def create
51
+ config_set('syslog_facility', 'facility', state: '', facility: @facility,
52
+ level: @level)
53
+ end
54
+
55
+ def destroy
56
+ config_set('syslog_facility', 'facility', state: 'no',
57
+ facility: @facility, level: @level)
58
+ end
59
+
60
+ def level
61
+ @level.to_i
62
+ end
63
+ end # class
64
+ end # module
@@ -0,0 +1,146 @@
1
+ # Syslog Server provider class
2
+ #
3
+ # June 2018
4
+ # Jonathan Tripathy et al., September 2015
5
+ #
6
+ # Copyright (c) 2014-2018 Cisco and/or its affiliates.
7
+ #
8
+ # Licensed under the Apache License, Version 2.0 (the "License");
9
+ # you may not use this file except in compliance with the License.
10
+ # You may obtain a copy of the License at
11
+ #
12
+ # http://www.apache.org/licenses/LICENSE-2.0
13
+ #
14
+ # Unless required by applicable law or agreed to in writing, software
15
+ # distributed under the License is distributed on an "AS IS" BASIS,
16
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ # See the License for the specific language governing permissions and
18
+ # limitations under the License.
19
+
20
+ require_relative 'node_util'
21
+ require 'resolv'
22
+
23
+ module Cisco
24
+ # SyslogServer - node utility class for syslog server configuration management
25
+ class SyslogServer < NodeUtil
26
+ attr_reader :name, :level, :port, :vrf, :severity_level, :facility
27
+
28
+ LEVEL_TO_NUM = { 'emergencies' => 0,
29
+ 'alerts' => 1,
30
+ 'critical' => 2,
31
+ 'error' => 3,
32
+ 'warning' => 4,
33
+ 'notifications' => 5,
34
+ 'info' => 6,
35
+ 'debugging' => 7 }.freeze
36
+ NUM_TO_LEVEL = LEVEL_TO_NUM.invert.freeze
37
+
38
+ def initialize(opts, instantiate=true)
39
+ @name = opts['name']
40
+ @level = opts['level'] || opts['severity_level']
41
+ @port = opts['port']
42
+ @vrf = opts['vrf']
43
+ @severity_level = opts['severity_level'] || opts['level']
44
+ @facility = opts['facility']
45
+
46
+ hostname_regex = /^(?=.{1,255}$)[0-9A-Za-z]
47
+ (?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?
48
+ (?:\.[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?)*\.?$/x
49
+
50
+ unless @name =~ Resolv::AddressRegex ||
51
+ @name =~ hostname_regex
52
+ fail ArgumentError,
53
+ "Invalid value '#{@name}' \
54
+ (Must be valid IPv4/IPv6 address or hostname)"
55
+ end
56
+
57
+ create if instantiate
58
+ end
59
+
60
+ def self.syslogservers
61
+ keys = %w(name level port vrf facility severity_level)
62
+ hash = {}
63
+ syslogservers_list = config_get('syslog_server', 'server')
64
+ return hash if syslogservers_list.nil?
65
+
66
+ syslogservers_list.each do |id|
67
+ value_hash = Hash[keys.zip(id)]
68
+ value_hash['severity_level'] = value_hash['level']
69
+ value_hash['vrf'] = 'default' if value_hash['vrf'].nil?
70
+ value_hash['facility'] = 'local7' if value_hash['facility'].nil?
71
+ hash[id[0]] = SyslogServer.new(value_hash, false)
72
+ end
73
+
74
+ hash
75
+ end
76
+
77
+ def ==(other)
78
+ (name == other.name) && (vrf == other.vrf)
79
+ end
80
+
81
+ def create
82
+ if platform == :ios_xr
83
+
84
+ # This provider only support a 1-1 mapping between host and VRF.
85
+ # Thus, we must remove the other entries on different VRFs.
86
+ all_vrfs = config_get('syslog_server', 'vrf', name)
87
+ destroy(all_vrfs) if all_vrfs.is_a?(Array) && all_vrfs.count > 1
88
+
89
+ config_set('syslog_server',
90
+ 'server',
91
+ state: '',
92
+ ip: @name,
93
+ level: @level ? "severity #{NUM_TO_LEVEL[@level]}" : '',
94
+ vrf: @vrf ? "vrf #{@vrf}" : '',
95
+ )
96
+ else
97
+ config_set('syslog_server',
98
+ 'server',
99
+ state: '',
100
+ ip: @name,
101
+ level: @level ? "#{@level}" : '',
102
+ port: @port ? "port #{@port}" : '',
103
+ vrf: @vrf ? "use-vrf #{@vrf}" : '',
104
+ facility: @facility ? "facility #{@facility}" : '',
105
+ )
106
+ end
107
+ end
108
+
109
+ def destroy(duplicate_vrfs=[])
110
+ if platform == :ios_xr
111
+ if duplicate_vrfs.empty?
112
+ config_set('syslog_server',
113
+ 'server',
114
+ state: 'no',
115
+ ip: @name,
116
+ level: '',
117
+ vrf: @vrf ? "vrf #{@vrf}" : '',
118
+ )
119
+ else
120
+ warn("#{name} is configured multiple times on the device" \
121
+ ' (possibly in different VRFs). This is unsupported by this' \
122
+ ' API and the duplicate entries are being deleted.')
123
+ duplicate_vrfs.each do |dup|
124
+ config_set('syslog_server',
125
+ 'server',
126
+ state: 'no',
127
+ ip: @name,
128
+ level: '',
129
+ vrf: "vrf #{dup}",
130
+ )
131
+ end
132
+ end
133
+ else
134
+ config_set('syslog_server',
135
+ 'server',
136
+ state: 'no',
137
+ ip: @name,
138
+ level: '',
139
+ port: '',
140
+ vrf: '',
141
+ facility: '',
142
+ )
143
+ end
144
+ end
145
+ end # class
146
+ end # module
@@ -0,0 +1,174 @@
1
+ # Syslog Settings provider class
2
+ #
3
+ # August 2018
4
+ # Jonathan Tripathy et al., September 2015
5
+ #
6
+ # Copyright (c) 2014-2018 Cisco and/or its affiliates.
7
+ #
8
+ # Licensed under the Apache License, Version 2.0 (the "License");
9
+ # you may not use this file except in compliance with the License.
10
+ # You may obtain a copy of the License at
11
+ #
12
+ # http://www.apache.org/licenses/LICENSE-2.0
13
+ #
14
+ # Unless required by applicable law or agreed to in writing, software
15
+ # distributed under the License is distributed on an "AS IS" BASIS,
16
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ # See the License for the specific language governing permissions and
18
+ # limitations under the License.
19
+
20
+ require_relative 'node_util'
21
+
22
+ module Cisco
23
+ # SyslogSettings - node utility class for
24
+ # Syslog Settings configuration management
25
+ class SyslogSettings < NodeUtil
26
+ attr_reader :name
27
+
28
+ def initialize(name)
29
+ fail TypeError unless name.is_a?(String)
30
+ fail ArgumentError,
31
+ "This provider only accepts an id of 'default'" \
32
+ unless name.eql?('default')
33
+ @name = name
34
+ end
35
+
36
+ def self.syslogsettings
37
+ hash = {}
38
+ hash['default'] = SyslogSettings.new('default')
39
+ hash
40
+ end
41
+
42
+ def ==(other)
43
+ name == other.name
44
+ end
45
+
46
+ def default_console
47
+ config_get_default('syslog_settings', 'console')
48
+ end
49
+
50
+ def console
51
+ console = config_get('syslog_settings', 'console')
52
+ if console.is_a?(Array)
53
+ console = console[0] == 'no' ? 'unset' : console[1]
54
+ end
55
+ console
56
+ end
57
+
58
+ def console=(severity)
59
+ if severity
60
+ config_set(
61
+ 'syslog_settings', 'console',
62
+ state: '', severity: severity)
63
+ else
64
+ config_set(
65
+ 'syslog_settings', 'console',
66
+ state: 'no', severity: '')
67
+ end
68
+ end
69
+
70
+ def default_monitor
71
+ config_get_default('syslog_settings', 'monitor')
72
+ end
73
+
74
+ def monitor
75
+ monitor = config_get('syslog_settings', 'monitor')
76
+ if monitor.is_a?(Array)
77
+ monitor = monitor[0] == 'no' ? 'unset' : monitor[1]
78
+ end
79
+ monitor
80
+ end
81
+
82
+ def monitor=(severity)
83
+ if severity
84
+ config_set(
85
+ 'syslog_settings', 'monitor',
86
+ state: '', severity: severity)
87
+ else
88
+ config_set(
89
+ 'syslog_settings', 'monitor',
90
+ state: 'no', severity: '')
91
+ end
92
+ end
93
+
94
+ def default_source_interface
95
+ config_get_default('syslog_settings', 'source_interface')
96
+ end
97
+
98
+ def source_interface
99
+ i = config_get('syslog_settings', 'source_interface')
100
+ i.nil? ? default_source_interface : i.downcase
101
+ end
102
+
103
+ def source_interface=(name)
104
+ if name
105
+ config_set(
106
+ 'syslog_settings', 'source_interface',
107
+ state: '', source_interface: name)
108
+ else
109
+ config_set(
110
+ 'syslog_settings', 'source_interface',
111
+ state: 'no', source_interface: '')
112
+ end
113
+ end
114
+
115
+ def timestamp
116
+ config_get('syslog_settings', 'timestamp')
117
+ end
118
+
119
+ def timestamp=(val)
120
+ fail TypeError \
121
+ unless %w(seconds milliseconds).include?(val.to_s)
122
+
123
+ # There is no unset version as timestamp has a default value
124
+ config_set('syslog_settings',
125
+ 'timestamp',
126
+ state: '',
127
+ units: val)
128
+ end
129
+
130
+ def logfile_severity_level
131
+ logfile_severity_level =
132
+ config_get('syslog_settings', 'logfile_severity_level')
133
+ if logfile_severity_level.is_a?(Array)
134
+ if logfile_severity_level[0] == 'no'
135
+ logfile_severity_level = nil
136
+ else
137
+ logfile_severity_level = logfile_severity_level[1]
138
+ end
139
+ end
140
+ logfile_severity_level
141
+ end
142
+
143
+ def logfile_name=(logname, severity, size)
144
+ if logname
145
+ config_set(
146
+ 'syslog_settings', 'logfile_name',
147
+ state: '', logname: logname, severity: severity, size: size)
148
+ else
149
+ config_set(
150
+ 'syslog_settings', 'logfile_name',
151
+ state: 'no', logname: logname, severity: severity, size: size)
152
+ end
153
+ end
154
+
155
+ def logfile_name
156
+ logfile_name = config_get('syslog_settings', 'logfile_name')
157
+ if logfile_name.is_a?(Array)
158
+ logfile_name = (logfile_name[0] == 'no') ? 'unset' : logfile_name[1]
159
+ end
160
+ logfile_name
161
+ end
162
+
163
+ def logfile_size
164
+ logfile_size = config_get('syslog_settings', 'logfile_size')
165
+ if logfile_size.is_a?(Array)
166
+ logfile_size = (logfile_size[0] == 'no') ? nil : logfile_size[1]
167
+ end
168
+ logfile_size
169
+ end
170
+
171
+ alias_method :time_stamp_units, :timestamp
172
+ alias_method :time_stamp_units=, :timestamp=
173
+ end # class
174
+ end # module
@@ -0,0 +1,137 @@
1
+ # Tacacs Global provider class
2
+
3
+ # TP HONEY et al., June 2014-2017
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
+ # Tacacs Global configuration management
22
+ module Cisco
23
+ # TacacsGlobal - node utility class for
24
+ class TacacsGlobal < 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.tacacs_global
36
+ hash = {}
37
+ hash['default'] = TacacsGlobal.new('default')
38
+ hash
39
+ end
40
+
41
+ def ==(other)
42
+ name == other.name
43
+ end
44
+
45
+ def timeout
46
+ return nil unless Feature.tacacs_enabled?
47
+ config_get('tacacs_global', 'timeout')
48
+ end
49
+
50
+ def default_timeout
51
+ config_get_default('tacacs_global', 'timeout')
52
+ end
53
+
54
+ def timeout=(val)
55
+ unless val.nil?
56
+ fail ArgumentError, 'timeout must be an Integer' \
57
+ unless val.is_a?(Integer)
58
+ end
59
+
60
+ if val.nil?
61
+ fail ArgumentError, 'timeout cannot be unset if TACACS enabled - ' \
62
+ "use default value #{default_timeout}" \
63
+ if Feature.tacacs_enabled?
64
+ else
65
+ Feature.tacacs_enable
66
+ config_set('tacacs_global',
67
+ 'timeout',
68
+ state: '',
69
+ timeout: val)
70
+ end
71
+ end
72
+
73
+ def key_format
74
+ match = config_get('tacacs_global', 'key_format')
75
+ match.nil? ? TACACS_GLOBAL_ENC_UNKNOWN : match[0].to_i
76
+ end
77
+
78
+ def key
79
+ return nil unless Feature.tacacs_enabled?
80
+ str = config_get('tacacs_global', 'key')
81
+ return TacacsGlobal.default_key if str.empty?
82
+ str[1].strip.gsub(/\"/, '')
83
+ end
84
+
85
+ # Get default encryption password
86
+ def self.default_key
87
+ config_get_default('tacacs_global', 'key')
88
+ end
89
+
90
+ def encryption_key_set(key_format, key)
91
+ # If we get an empty key - remove default if configured
92
+ if key.nil? || key.to_s.empty?
93
+ key = self.key
94
+ return if key.empty?
95
+ key_format = self.key_format
96
+ config_set('tacacs_server', 'encryption', state: 'no',
97
+ option: key_format, key: key)
98
+ else
99
+ Feature.tacacs_enable
100
+ key = Utils.add_quotes(key)
101
+ if key_format.nil? || key_format.to_s.empty?
102
+ config_set('tacacs_server', 'encryption', state: '', option: '',
103
+ key: key)
104
+ else
105
+ config_set('tacacs_server', 'encryption', state: '',
106
+ option: key_format, key: key)
107
+ end
108
+ end
109
+ end
110
+
111
+ # Get default source interface
112
+ def default_source_interface
113
+ config_get_default('tacacs_global', 'source_interface')
114
+ end
115
+
116
+ # Set source interface
117
+ def source_interface=(name)
118
+ if name
119
+ Feature.tacacs_enable
120
+ config_set(
121
+ 'tacacs_global', 'source_interface',
122
+ state: '', source_interface: name)
123
+ else
124
+ config_set(
125
+ 'tacacs_global', 'source_interface',
126
+ state: 'no', source_interface: '')
127
+ end
128
+ end
129
+
130
+ # Get source interface
131
+ def source_interface
132
+ return nil unless Feature.tacacs_enabled?
133
+ i = config_get('tacacs_global', 'source_interface')
134
+ i.nil? ? default_source_interface : i.downcase
135
+ end
136
+ end # class
137
+ end # module
@@ -0,0 +1,173 @@
1
+ # Mike Wiebe, January 2015
2
+ #
3
+ # Copyright (c) 2015-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
+
19
+ # Add some TACACS+ server related constants to the Cisco namespace
20
+ module Cisco
21
+ TACACS_SERVER_ENC_NONE = 0
22
+ TACACS_SERVER_ENC_CISCO_TYPE_7 = 7
23
+ TACACS_SERVER_ENC_UNKNOWN = 8
24
+
25
+ # TacacsServer - node utility class for TACACS+ server config management
26
+ class TacacsServer < NodeUtil
27
+ def initialize(instantiate=true)
28
+ enable if instantiate && !TacacsServer.enabled
29
+ end
30
+
31
+ # Check feature enablement
32
+ def self.enabled
33
+ Feature.tacacs_enabled?
34
+ end
35
+
36
+ # Enable tacacs_server feature
37
+ def enable
38
+ config_set('tacacs_server', 'feature', '') unless platform == :ios_xr
39
+ end
40
+
41
+ # Disable tacacs_server feature
42
+ def destroy
43
+ config_set('tacacs_server', 'feature', 'no') unless platform == :ios_xr
44
+ end
45
+
46
+ # --------------------
47
+ # Getters and Setters
48
+ # --------------------
49
+
50
+ # Set timeout
51
+ def timeout=(timeout)
52
+ # 'no tacacs timeout' will fail.
53
+ # Just set it to the requested timeout value.
54
+ config_set('tacacs_server', 'timeout', state: '', timeout: timeout)
55
+ end
56
+
57
+ # Get timeout
58
+ def timeout
59
+ config_get('tacacs_server', 'timeout')
60
+ end
61
+
62
+ # Get default timeout
63
+ def self.default_timeout
64
+ config_get_default('tacacs_server', 'timeout')
65
+ end
66
+
67
+ # Set deadtime
68
+ def deadtime=(deadtime)
69
+ # 'no tacacs deadtime' will fail.
70
+ # Just set it to the requested timeout value.
71
+ config_set('tacacs_server', 'deadtime', '', deadtime)
72
+ end
73
+
74
+ # Get deadtime
75
+ def deadtime
76
+ config_get('tacacs_server', 'deadtime')
77
+ end
78
+
79
+ # Get default deadtime
80
+ def self.default_deadtime
81
+ config_get_default('tacacs_server', 'deadtime')
82
+ end
83
+
84
+ # Set directed_request
85
+ def directed_request=(state)
86
+ fail TypeError unless state == true || state == false
87
+ if state == TacacsServer.default_directed_request
88
+ config_set('tacacs_server', 'directed_request', 'no')
89
+ else
90
+ config_set('tacacs_server', 'directed_request', '')
91
+ end
92
+ end
93
+
94
+ # Check if directed request is enabled
95
+ def directed_request?
96
+ config_get('tacacs_server', 'directed_request')
97
+ end
98
+
99
+ # Get default directed_request
100
+ def self.default_directed_request
101
+ config_get_default('tacacs_server', 'directed_request')
102
+ end
103
+
104
+ # Set source interface
105
+ def source_interface=(name)
106
+ fail TypeError unless name.is_a? String
107
+ if name.empty?
108
+ config_set('tacacs_server', 'source_interface', 'no', '')
109
+ else
110
+ config_set('tacacs_server', 'source_interface', '', name)
111
+ end
112
+ end
113
+
114
+ # Get source interface
115
+ def source_interface
116
+ # Sample output
117
+ # ip tacacs source-interface Ethernet1/1
118
+ # no tacacs source-interface
119
+ match = config_get('tacacs_server', 'source_interface')
120
+ return TacacsServer.default_source_interface if match.empty?
121
+ # match_data will contain one of the following
122
+ # [nil, " Ethernet1/1"] or ["no", nil]
123
+ match[0] == 'no' ? TacacsServer.default_source_interface : match[1]
124
+ end
125
+
126
+ # Get default source interface
127
+ def self.default_source_interface
128
+ config_get_default('tacacs_server', 'source_interface')
129
+ end
130
+
131
+ # Get encryption type used for the key
132
+ def encryption_type
133
+ match = config_get('tacacs_server', 'encryption_type')
134
+ match.nil? ? TACACS_SERVER_ENC_UNKNOWN : match[0].to_i
135
+ end
136
+
137
+ # Get default encryption type
138
+ def self.default_encryption_type
139
+ config_get_default('tacacs_server', 'encryption_type')
140
+ end
141
+
142
+ # Get encryption password
143
+ def encryption_password
144
+ str = config_get('tacacs_server', 'encryption_password')
145
+ return TacacsServer.default_encryption_password if str.empty?
146
+ str[1].strip
147
+ end
148
+
149
+ # Get default encryption password
150
+ def self.default_encryption_password
151
+ config_get_default('tacacs_server', 'encryption_password')
152
+ end
153
+
154
+ # Set encryption type and password
155
+ def encryption_key_set(enctype, password)
156
+ password = Utils.add_quotes(password)
157
+ # if enctype is TACACS_SERVER_ENC_UNKNOWN, we will unset the key
158
+ if enctype == TACACS_SERVER_ENC_UNKNOWN
159
+ # if current encryption type is not TACACS_SERVER_ENC_UNKNOWN, we
160
+ # need to unset it. Otherwise the box is not configured with key, we
161
+ # don't need to do anything
162
+ if encryption_type != TACACS_SERVER_ENC_UNKNOWN
163
+ config_set('tacacs_server', 'encryption', state: 'no',
164
+ option: encryption_type,
165
+ key: encryption_password)
166
+ end
167
+ else
168
+ config_set('tacacs_server', 'encryption', state: '', option: enctype,
169
+ key: password)
170
+ end
171
+ end
172
+ end
173
+ end