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,378 @@
1
+ # March 2015, Alex Hunsberger
2
+ #
3
+ # Copyright (c) 2015-2017 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 'ipaddr'
18
+ require_relative 'node_util'
19
+ require_relative 'interface'
20
+ # Interestingly enough, interface OSPF configuration can exist completely
21
+ # independent of router OSPF configuration... so we don't need RouterOspf here.
22
+
23
+ module Cisco
24
+ # InterfaceOspf - node utility class for per-interface OSPF config management
25
+ class InterfaceOspf < NodeUtil
26
+ attr_reader :intf_name, :ospf_name, :area, :show_name
27
+
28
+ def initialize(intf_name, ospf_name, area, create=true, show_name=nil)
29
+ fail TypeError unless intf_name.is_a? String
30
+ fail TypeError unless ospf_name.is_a? String
31
+ fail TypeError unless area.is_a? String
32
+ fail ArgumentError unless intf_name.length > 0
33
+ fail ArgumentError unless ospf_name.length > 0
34
+ fail ArgumentError unless area.length > 0
35
+
36
+ # normalize
37
+ @intf_name = intf_name.downcase
38
+ @show_name = show_name.nil? ? '' : Utils.normalize_intf_pattern(show_name)
39
+ fail "interface #{@intf_name} does not exist" if
40
+ Interface.interfaces(nil, @intf_name)[@intf_name].nil?
41
+ @ospf_name = ospf_name
42
+ @area = area
43
+ @get_args = { name: intf_name, show_name: @show_name }
44
+ set_args_keys_default
45
+
46
+ return unless create
47
+ Feature.ospf_enable
48
+ self.area = area
49
+ end
50
+
51
+ def set_args_keys_default
52
+ @set_args = { name: @intf_name, ospf_name: @ospf_name, area: @area }
53
+ end
54
+
55
+ # can't re-use Interface.interfaces because we need to filter based on
56
+ # "ip router ospf <name>", which Interface doesn't retrieve
57
+ def self.interfaces(ospf_name=nil, show_name=nil)
58
+ fail TypeError unless ospf_name.is_a?(String) || ospf_name.nil?
59
+ ints = {}
60
+ show_name = Utils.normalize_intf_pattern(show_name)
61
+ begin
62
+ intf_list = config_get('interface_ospf', 'all_interfaces',
63
+ show_name: show_name)
64
+ rescue CliError => e
65
+ raise unless show_name
66
+ # ignore logical interfaces that do not exist
67
+ debug 'InterfaceOspf.interfaces ignoring CliError => ' + e.to_s
68
+ end
69
+ return ints if intf_list.nil?
70
+ intf_list.each do |name|
71
+ # Find interfaces with 'ip router ospf <name> area <area>'
72
+ match = config_get('interface_ospf', 'area',
73
+ name: name, show_name: show_name)
74
+ next if match.nil?
75
+ ospf = match[0]
76
+ area = match[1]
77
+ next unless ospf_name.nil? || ospf == ospf_name
78
+ int = name.downcase
79
+ ints[int] = InterfaceOspf.new(int, ospf, area, false, show_name)
80
+ end
81
+ ints
82
+ end
83
+
84
+ def area
85
+ match = config_get('interface_ospf', 'area', @get_args)
86
+ return nil if match.nil?
87
+ val = match[1]
88
+ # Coerce numeric area to the expected dot-decimal format.
89
+ val = IPAddr.new(val.to_i, Socket::AF_INET).to_s unless val.match(/\./)
90
+ val
91
+ end
92
+
93
+ def area=(a)
94
+ config_set('interface_ospf', 'area',
95
+ @set_args.merge!(state: '', area: a))
96
+ set_args_keys_default
97
+ end
98
+
99
+ def destroy
100
+ config_set('interface_ospf', 'area', @set_args.merge!(state: 'no'))
101
+ set_args_keys_default
102
+ # Reset everything else back to default as well:
103
+ self.message_digest = default_message_digest
104
+ message_digest_key_set(default_message_digest_key_id, '', '', '')
105
+ self.cost = default_cost
106
+ destroy_interval('hello_interval')
107
+ destroy_interval('dead_interval')
108
+ self.bfd = default_bfd
109
+ self.mtu_ignore = default_mtu_ignore
110
+ self.priority = default_priority
111
+ self.network_type = default_network_type
112
+ self.passive_interface = default_passive_interface if passive_interface
113
+ self.shutdown = default_shutdown
114
+ self.transmit_delay = default_transmit_delay
115
+ end
116
+
117
+ def default_message_digest
118
+ config_get_default('interface_ospf', 'message_digest')
119
+ end
120
+
121
+ def message_digest
122
+ config_get('interface_ospf', 'message_digest', @get_args)
123
+ end
124
+
125
+ def message_digest=(enable)
126
+ return if enable == message_digest
127
+ @set_args[:state] = (enable ? '' : 'no')
128
+ config_set('interface_ospf', 'message_digest', @set_args)
129
+ set_args_keys_default
130
+ end
131
+
132
+ def default_message_digest_key_id
133
+ config_get_default('interface_ospf', 'message_digest_key_id')
134
+ end
135
+
136
+ def message_digest_key_id
137
+ config_get('interface_ospf', 'message_digest_key_id', @get_args)
138
+ end
139
+
140
+ def default_message_digest_algorithm_type
141
+ config_get_default('interface_ospf',
142
+ 'message_digest_alg_type').to_sym
143
+ end
144
+
145
+ def message_digest_algorithm_type
146
+ match = config_get('interface_ospf', 'message_digest_alg_type',
147
+ @get_args)
148
+ match.to_sym
149
+ end
150
+
151
+ def default_message_digest_encryption_type
152
+ Encryption.cli_to_symbol(
153
+ config_get_default('interface_ospf', 'message_digest_enc_type'))
154
+ end
155
+
156
+ def message_digest_encryption_type
157
+ match = config_get('interface_ospf', 'message_digest_enc_type',
158
+ @get_args)
159
+ Encryption.cli_to_symbol(match)
160
+ end
161
+
162
+ def message_digest_password
163
+ config_get('interface_ospf', 'message_digest_password', @get_args)
164
+ end
165
+
166
+ def default_message_digest_password
167
+ config_get_default('interface_ospf', 'message_digest_password')
168
+ end
169
+
170
+ def message_digest_key_set(keyid, algtype, enctype, password)
171
+ current_keyid = message_digest_key_id
172
+ if keyid == default_message_digest_key_id && current_keyid != keyid
173
+ @set_args.merge!(state: 'no',
174
+ keyid: current_keyid,
175
+ algtype: '',
176
+ enctype: '',
177
+ password: '')
178
+ config_set('interface_ospf', 'message_digest_key_set', @set_args)
179
+ elsif keyid != default_message_digest_key_id
180
+ fail TypeError unless password.is_a?(String)
181
+ fail ArgumentError unless password.length > 0
182
+ enctype = Encryption.symbol_to_cli(enctype)
183
+ @set_args.merge!(state: '',
184
+ keyid: keyid,
185
+ algtype: algtype,
186
+ enctype: enctype,
187
+ password: password)
188
+ config_set('interface_ospf', 'message_digest_key_set', @set_args)
189
+ end
190
+ set_args_keys_default
191
+ end
192
+
193
+ def cost
194
+ config_get('interface_ospf', 'cost', @get_args)
195
+ end
196
+
197
+ def default_cost
198
+ config_get_default('interface_ospf', 'cost')
199
+ end
200
+
201
+ def cost=(c)
202
+ if c == default_cost
203
+ @set_args.merge!(state: 'no', cost: '')
204
+ else
205
+ @set_args.merge!(state: '', cost: c)
206
+ end
207
+ config_set('interface_ospf', 'cost', @set_args)
208
+ set_args_keys_default
209
+ end
210
+
211
+ def hello_interval
212
+ config_get('interface_ospf', 'hello_interval', @get_args)
213
+ end
214
+
215
+ def default_hello_interval
216
+ config_get_default('interface_ospf', 'hello_interval')
217
+ end
218
+
219
+ def hello_interval=(interval)
220
+ # Previous behavior always sets interval and ignores 'no' cmd
221
+ @set_args.merge!(state: '', interval: interval.to_i)
222
+ config_set('interface_ospf', 'hello_interval', @set_args)
223
+ set_args_keys_default
224
+ end
225
+
226
+ def destroy_interval(prop)
227
+ # Helper to remove cli completely
228
+ @set_args.merge!(state: 'no', interval: '')
229
+ config_set('interface_ospf', prop, @set_args)
230
+ set_args_keys_default
231
+ end
232
+
233
+ def dead_interval
234
+ config_get('interface_ospf', 'dead_interval', @get_args)
235
+ end
236
+
237
+ def default_dead_interval
238
+ config_get_default('interface_ospf', 'dead_interval')
239
+ end
240
+
241
+ def dead_interval=(interval)
242
+ # Previous behavior always sets interval and ignores 'no' cmd
243
+ @set_args.merge!(state: '', interval: interval.to_i)
244
+ config_set('interface_ospf', 'dead_interval', @set_args)
245
+ set_args_keys_default
246
+ end
247
+
248
+ # CLI can be either of the following or none
249
+ # ip ospf bfd
250
+ # ip ospf bfd disable
251
+ def bfd
252
+ val = config_get('interface_ospf', 'bfd', @get_args)
253
+ return if val.nil?
254
+ val.include?('disable') ? false : true
255
+ end
256
+
257
+ def bfd=(val)
258
+ return if val == bfd
259
+ Feature.bfd_enable
260
+ state = (val == default_bfd) ? 'no' : ''
261
+ disable = val ? '' : 'disable'
262
+ config_set('interface_ospf', 'bfd',
263
+ @set_args.merge!(state: state, disable: disable))
264
+ set_args_keys_default
265
+ end
266
+
267
+ def default_bfd
268
+ config_get_default('interface_ospf', 'bfd')
269
+ end
270
+
271
+ def default_network_type
272
+ case @intf_name
273
+ when /loopback/i
274
+ lookup = 'network_type_loopback_default'
275
+ else
276
+ lookup = 'network_type_default'
277
+ end
278
+ config_get_default('interface_ospf', lookup)
279
+ end
280
+
281
+ def mtu_ignore
282
+ config_get('interface_ospf', 'mtu_ignore', @get_args)
283
+ end
284
+
285
+ def mtu_ignore=(enable)
286
+ @set_args[:state] = enable ? '' : 'no'
287
+ config_set('interface_ospf', 'mtu_ignore', @set_args)
288
+ set_args_keys_default
289
+ end
290
+
291
+ def default_mtu_ignore
292
+ config_get_default('interface_ospf', 'mtu_ignore')
293
+ end
294
+
295
+ def network_type
296
+ type = config_get('interface_ospf', 'network_type', @get_args)
297
+ return 'p2p' if type == 'point-to-point'
298
+ return default_network_type if type.nil?
299
+ type
300
+ end
301
+
302
+ def network_type=(type)
303
+ if type == default_network_type
304
+ @set_args.merge!(state: 'no', network_type: '')
305
+ else
306
+ network = 'point-to-point' if type.to_s == 'p2p'
307
+ @set_args.merge!(state: '', network_type: network)
308
+ end
309
+ config_set('interface_ospf', 'network_type', @set_args)
310
+ set_args_keys_default
311
+ end
312
+
313
+ def default_passive_interface
314
+ config_get_default('interface_ospf', 'passive_interface')
315
+ end
316
+
317
+ def passive_interface
318
+ config_get('interface_ospf', 'passive_interface', @get_args)
319
+ end
320
+
321
+ def passive_interface=(enable)
322
+ fail TypeError unless enable == true || enable == false
323
+ @set_args[:state] = enable ? '' : 'no'
324
+ config_set('interface_ospf', 'passive_interface', @set_args)
325
+ set_args_keys_default
326
+ end
327
+
328
+ def priority
329
+ config_get('interface_ospf', 'priority', @get_args)
330
+ end
331
+
332
+ def priority=(val)
333
+ if val == default_priority
334
+ @set_args.merge!(state: 'no', priority: '')
335
+ else
336
+ @set_args.merge!(state: '', priority: val)
337
+ end
338
+ config_set('interface_ospf', 'priority', @set_args)
339
+ set_args_keys_default
340
+ end
341
+
342
+ def default_priority
343
+ config_get_default('interface_ospf', 'priority')
344
+ end
345
+
346
+ def shutdown
347
+ config_get('interface_ospf', 'shutdown', @get_args)
348
+ end
349
+
350
+ def shutdown=(enable)
351
+ @set_args[:state] = enable ? '' : 'no'
352
+ config_set('interface_ospf', 'shutdown', @set_args)
353
+ set_args_keys_default
354
+ end
355
+
356
+ def default_shutdown
357
+ config_get_default('interface_ospf', 'shutdown')
358
+ end
359
+
360
+ def transmit_delay
361
+ config_get('interface_ospf', 'transmit_delay', @get_args)
362
+ end
363
+
364
+ def transmit_delay=(val)
365
+ if val == default_transmit_delay
366
+ @set_args.merge!(state: 'no', delay: '')
367
+ else
368
+ @set_args.merge!(state: '', delay: val)
369
+ end
370
+ config_set('interface_ospf', 'transmit_delay', @set_args)
371
+ set_args_keys_default
372
+ end
373
+
374
+ def default_transmit_delay
375
+ config_get_default('interface_ospf', 'transmit_delay')
376
+ end
377
+ end
378
+ end
@@ -0,0 +1,180 @@
1
+ # December 2015, Sai Chintalapudi
2
+ #
3
+ # Copyright (c) 2015-2017 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 'interface'
19
+
20
+ # Add some interface-specific constants to the Cisco namespace
21
+ module Cisco
22
+ # InterfacePortChannel - node utility class for port channel config management
23
+ class InterfacePortChannel < NodeUtil
24
+ attr_reader :name
25
+
26
+ def initialize(name, instantiate=true)
27
+ fail TypeError unless name.is_a?(String)
28
+ fail ArgumentError unless name.length > 0
29
+ @name = name.downcase
30
+ fail ArgumentError unless @name.start_with?('port-channel')
31
+
32
+ create if instantiate
33
+ end
34
+
35
+ def to_s
36
+ "interface_port_channel #{name}"
37
+ end
38
+
39
+ def self.interfaces
40
+ hash = {}
41
+ intf_list = config_get('interface_portchannel', 'all_interfaces')
42
+ return hash if intf_list.nil?
43
+
44
+ intf_list.each do |id|
45
+ id = id.downcase
46
+ next unless id.start_with?('port-channel')
47
+ hash[id] = InterfacePortChannel.new(id, false)
48
+ end
49
+ hash
50
+ end
51
+
52
+ def create
53
+ config_set('interface_portchannel', 'create', @name)
54
+ end
55
+
56
+ def destroy
57
+ config_set('interface_portchannel', 'destroy', @name)
58
+ end
59
+
60
+ ########################################################
61
+ # PROPERTIES #
62
+ ########################################################
63
+
64
+ def bfd_per_link
65
+ config_get('interface_portchannel', 'bfd_per_link', @name)
66
+ end
67
+
68
+ def bfd_per_link=(state)
69
+ return if state == bfd_per_link
70
+ no_cmd = (state ? '' : 'no')
71
+ Feature.bfd_enable
72
+ config_set('interface_portchannel',
73
+ 'bfd_per_link', @name, no_cmd)
74
+ end
75
+
76
+ def default_bfd_per_link
77
+ config_get_default('interface_portchannel', 'bfd_per_link')
78
+ end
79
+
80
+ def lacp_graceful_convergence
81
+ config_get('interface_portchannel', 'lacp_graceful_convergence', @name)
82
+ end
83
+
84
+ def lacp_graceful_convergence=(state)
85
+ no_cmd = (state ? '' : 'no')
86
+ config_set('interface_portchannel',
87
+ 'lacp_graceful_convergence', @name, no_cmd)
88
+ end
89
+
90
+ def default_lacp_graceful_convergence
91
+ config_get_default('interface_portchannel', 'lacp_graceful_convergence')
92
+ end
93
+
94
+ def lacp_max_bundle
95
+ config_get('interface_portchannel', 'lacp_max_bundle', @name)
96
+ end
97
+
98
+ def lacp_max_bundle=(val)
99
+ config_set('interface_portchannel', 'lacp_max_bundle', @name, val)
100
+ end
101
+
102
+ def default_lacp_max_bundle
103
+ config_get_default('interface_portchannel', 'lacp_max_bundle')
104
+ end
105
+
106
+ def lacp_min_links
107
+ config_get('interface_portchannel', 'lacp_min_links', @name)
108
+ end
109
+
110
+ def lacp_min_links=(val)
111
+ config_set('interface_portchannel', 'lacp_min_links', @name, val)
112
+ end
113
+
114
+ def default_lacp_min_links
115
+ config_get_default('interface_portchannel', 'lacp_min_links')
116
+ end
117
+
118
+ def lacp_suspend_shut_needed?
119
+ config_get('interface_portchannel', 'lacp_suspend_shut_needed')
120
+ end
121
+
122
+ def lacp_suspend_individual
123
+ config_get('interface_portchannel', 'lacp_suspend_individual', @name)
124
+ end
125
+
126
+ def lacp_suspend_individual=(state)
127
+ no_cmd = (state ? '' : 'no')
128
+ # This property can only be set if the port-channel is shutdown on
129
+ # some platforms.
130
+ # This setter will:
131
+ # 1) Query the current state of the port-channel interface.
132
+ # 2) Shutdown the port-channel interface if needed.
133
+ # 3) Set the lacp_suspend_individual property.
134
+ # 4) Restore the original state of the port-channel interface if needed.
135
+ int = Interface.new(@name, false)
136
+ current_state = int.shutdown
137
+ int.shutdown = true if lacp_suspend_shut_needed? && !current_state
138
+ config_set('interface_portchannel',
139
+ 'lacp_suspend_individual', @name, no_cmd)
140
+ int.shutdown = current_state unless current_state == int.shutdown
141
+ end
142
+
143
+ def default_lacp_suspend_individual
144
+ config_get_default('interface_portchannel', 'lacp_suspend_individual')
145
+ end
146
+
147
+ def port_hash_distribution
148
+ config_get('interface_portchannel', 'port_hash_distribution', @name)
149
+ end
150
+
151
+ def port_hash_distribution=(val)
152
+ if val
153
+ state = ''
154
+ else
155
+ state = 'no'
156
+ val = ''
157
+ end
158
+ config_set('interface_portchannel',
159
+ 'port_hash_distribution', @name, state, val)
160
+ end
161
+
162
+ def default_port_hash_distribution
163
+ config_get_default('interface_portchannel', 'port_hash_distribution')
164
+ end
165
+
166
+ def port_load_defer
167
+ config_get('interface_portchannel', 'port_load_defer', @name)
168
+ end
169
+
170
+ def port_load_defer=(state)
171
+ no_cmd = (state ? '' : 'no')
172
+ config_set('interface_portchannel',
173
+ 'port_load_defer', @name, no_cmd)
174
+ end
175
+
176
+ def default_port_load_defer
177
+ config_get_default('interface_portchannel', 'port_load_defer')
178
+ end
179
+ end # Class
180
+ end # Module
@@ -0,0 +1,132 @@
1
+ # December 2015, Chris Van Heuveln
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
+ require_relative 'feature'
19
+
20
+ module Cisco
21
+ # InterfaceServiceVni - node utility class for Service VNI Instance commands
22
+ class InterfaceServiceVni < NodeUtil
23
+ attr_reader :name
24
+
25
+ def initialize(intf, sid, instantiate=true)
26
+ @name = intf.to_s.downcase
27
+ @sid = sid.to_s
28
+ fail ArgumentError if @name.empty? || @sid.empty?
29
+ set_args_keys_default
30
+ create if instantiate
31
+ end
32
+
33
+ def to_s
34
+ "interface_service_vni #{name} #{@sid}"
35
+ end
36
+
37
+ def self.svc_vni_ids
38
+ hash = {}
39
+ intf_list = config_get('interface_service_vni', 'all_interfaces')
40
+ return hash if intf_list.nil?
41
+
42
+ intf_list.each do |intf|
43
+ intf.downcase!
44
+ svc_ids = config_get('interface_service_vni', 'all_service_vni_ids',
45
+ name: intf)
46
+ next if svc_ids.nil?
47
+ hash[intf] = {}
48
+ svc_ids.each do |sid|
49
+ hash[intf][sid] = InterfaceServiceVni.new(intf, sid, false)
50
+ end
51
+ end
52
+ hash
53
+ end
54
+
55
+ def create
56
+ Feature.vni_enable
57
+ @set_args[:state] = ''
58
+ config_set('interface_service_vni', 'create_destroy', @set_args)
59
+ end
60
+
61
+ def destroy
62
+ @set_args[:state] = 'no'
63
+ config_set('interface_service_vni', 'create_destroy', @set_args)
64
+ end
65
+
66
+ def set_args_keys_default
67
+ keys = { name: @name, sid: @sid }
68
+ @get_args = @set_args = keys
69
+ end
70
+
71
+ # rubocop:disable Style/AccessorMethodName
72
+ def set_args_keys(hash={})
73
+ set_args_keys_default
74
+ @set_args = @get_args.merge!(hash) unless hash.empty?
75
+ end
76
+ # rubocop:enable Style/AccessorMethodNamefor
77
+
78
+ ########################################################
79
+ # PROPERTIES #
80
+ ########################################################
81
+
82
+ #
83
+ # encapsulation_profile_vni
84
+ #
85
+ # cli: service instance 1 vni
86
+ # encapsulation profile vni_500_5000 default
87
+ # type: 'vni_500_5000'
88
+ def encapsulation_profile_vni
89
+ config_get('interface_service_vni', 'encapsulation_profile_vni',
90
+ @get_args)
91
+ end
92
+
93
+ def encapsulation_profile_vni=(profile)
94
+ Feature.vni_enable
95
+ state = profile.empty? ? 'no' : ''
96
+ current = encapsulation_profile_vni
97
+
98
+ if state[/no/]
99
+ config_set('interface_service_vni', 'encapsulation_profile_vni',
100
+ set_args_keys(state: state, profile: current)) unless
101
+ current.empty?
102
+ else
103
+ # Remove current profile before adding a new one
104
+ config_set('interface_service_vni', 'encapsulation_profile_vni',
105
+ set_args_keys(state: 'no', profile: current)) unless
106
+ current.empty?
107
+ config_set('interface_service_vni', 'encapsulation_profile_vni',
108
+ set_args_keys(state: state, profile: profile))
109
+ end
110
+ end
111
+
112
+ def default_encapsulation_profile_vni
113
+ config_get_default('interface_service_vni', 'encapsulation_profile_vni')
114
+ end
115
+
116
+ #
117
+ # shutdown
118
+ #
119
+ def shutdown
120
+ config_get('interface_service_vni', 'shutdown', @get_args)
121
+ end
122
+
123
+ def shutdown=(state)
124
+ config_set('interface_service_vni', 'shutdown',
125
+ set_args_keys(state: state ? '' : 'no'))
126
+ end
127
+
128
+ def default_shutdown
129
+ config_get_default('interface_service_vni', 'shutdown')
130
+ end
131
+ end # Class
132
+ end # Module