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,123 @@
1
+ #!/bin/bash
2
+ #
3
+ # Based on:
4
+ # http://stackoverflow.com/questions/3462955/putting-git-hooks-into-repository
5
+ # https://github.com/sjungwirth/githooks
6
+
7
+ # Where hooks are stored in the repo
8
+ SRC_DIR="$(git rev-parse --show-toplevel)/bin/git/hooks"
9
+
10
+ # Where hooks need to be installed
11
+ HOOK_DIR="$(git rev-parse --show-toplevel)/.git/hooks"
12
+
13
+ . "$SRC_DIR/hook_lib"
14
+
15
+ usage() {
16
+ echo "Usage: update-hooks [OPTION]"
17
+ echo "Update the hooks in the local git repository to match those"
18
+ echo "under version control."
19
+ echo
20
+ echo "Options:"
21
+ echo " --dry-run Do not make any updates"
22
+ echo " -v --verbose Verbose output, including diffs of updated files"
23
+ echo " --[no-]pager Explicity request or suppress pagination in git diff"
24
+ echo " -h --help Display this help text"
25
+ }
26
+
27
+ # Flags that can be set from the command line, with default values
28
+ make_updates=1 # the inverse of --dry-run
29
+ verbose=0
30
+ pager= # default to whatever defaults git has configured
31
+
32
+ # parse command line options
33
+ while [ "$#" -gt 0 ]; do
34
+ case "$1" in
35
+ (-h|--help)
36
+ usage
37
+ exit 0
38
+ ;;
39
+ (-v|--verbose)
40
+ verbose=1
41
+ ;;
42
+ (--pager)
43
+ pager=--paginate
44
+ ;;
45
+ (--no-pager)
46
+ pager=--no-pager
47
+ ;;
48
+ (--dry-run)
49
+ make_updates=0
50
+ ;;
51
+ (*)
52
+ echo "Unrecognized option: $1"
53
+ usage
54
+ exit 1
55
+ ;;
56
+ esac
57
+ shift 1
58
+ done
59
+
60
+
61
+ install_hook_wrapper() {
62
+ local hook=$1
63
+ # Does the symlink exist?
64
+ if [ ! -h $HOOK_DIR/$hook ]; then
65
+ # If a hook already exists and is a file:
66
+ if [ -f $HOOK_DIR/$hook ]; then
67
+ step_name "Moving existing '$hook' script to '$hook-local'"
68
+ if [ $make_updates == 1 ]; then
69
+ mv $HOOK_DIR/$hook $HOOK_DIR/$hook-local
70
+ fi
71
+ fi
72
+ # create the symlink to our wrapper script
73
+ step_name "Installing hook wrapper script for '$hook'"
74
+ if [ $make_updates == 1 ]; then
75
+ ln -s -f ./hooks-wrapper $HOOK_DIR/$hook
76
+ fi
77
+ fi
78
+ }
79
+
80
+ check_update() {
81
+ local src=$1
82
+ local dest=$2
83
+ if [ ! -e "$dest" ] ; then
84
+ step_name "Creating new file at '$dest':"
85
+ if [ $verbose == 1 ]; then
86
+ git ${pager} diff --color --no-index /dev/null $src
87
+ fi
88
+ if [ $make_updates == 1 ]; then
89
+ cp $src $dest
90
+ fi
91
+ else
92
+ diff $src $dest >> /dev/null
93
+ if [ $? -ne 0 ] ; then
94
+ step_name "File '$dest' will be updated: "
95
+ if [ $verbose == 1 ]; then
96
+ git ${pager} diff --color --no-index $dest $src
97
+ fi
98
+ if [ $make_updates == 1 ]; then
99
+ cp -f $src $dest
100
+ fi
101
+ fi
102
+ fi
103
+ }
104
+
105
+ for item in "$SRC_DIR"/*; do
106
+ if [ ! -d "$item" ]; then
107
+ # Not a hook subdirectory, just a library file - update it as needed
108
+ file="${item##*/}"
109
+ check_update "$SRC_DIR/$file" "$HOOK_DIR/$file"
110
+ continue
111
+ fi
112
+ # Else it's a hook subdirectory.
113
+ hook="${item##*/}"
114
+ # First, make sure we have our hook-wrapper script installed for this hook:
115
+ install_hook_wrapper "$hook"
116
+ # Now descend into the subdirectory and update the individual scripts:
117
+ for file in "$item"/*; do
118
+ # bin/git/hooks/pre-commit/rubocop --> "pre-commit-rubocop"
119
+ hook_script="${hook}-${file##*/}"
120
+ check_update "$file" "$HOOK_DIR/$hook_script"
121
+ done
122
+ done
123
+
@@ -0,0 +1,233 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # June 2016, Charles Burkett
4
+ #
5
+ # Copyright (c) 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
+ # This is a utility to output the current state of an XR configuration.
20
+ # In order to run, this utility needs access to one or more *.yang files
21
+ # (found in the /pkg/yang directory on the XR box, as well as from other
22
+ # sources).
23
+
24
+ require 'cisco_node_utils'
25
+ require 'optparse'
26
+
27
+ module Cisco
28
+ # Utility class to output the current state of an XR configuration.
29
+ class YangViewer
30
+ def process(options)
31
+ @options = options
32
+
33
+ client # initialize the client
34
+
35
+ dir_or_file = options[:path]
36
+
37
+ file = nil
38
+ dir = nil
39
+
40
+ if File.exist?(dir_or_file)
41
+ if File.directory?(dir_or_file)
42
+ dir = dir_or_file
43
+ else
44
+ file = dir_or_file
45
+ end
46
+ else
47
+ puts "Directory or file not found: #{dir_or_file}"
48
+ exit(-1)
49
+ end
50
+
51
+ puts "File found: #{file}" if file
52
+ puts "Directory found: #{dir}" if dir
53
+ puts 'Searching for configuration data...' unless @options[:oper]
54
+ puts 'Searching for operational data...' if @options[:oper]
55
+
56
+ t1 = Time.now
57
+
58
+ @files = 0
59
+ @cnrs = 0
60
+ @errors = 0
61
+ if file
62
+ process_file(file)
63
+ @files += 1
64
+ else
65
+ Dir.glob(dir + '/*.yang').sort.each do |item|
66
+ process_file(item)
67
+ @files += 1
68
+ end
69
+ end
70
+
71
+ delta = Time.now - t1
72
+ puts '---------------------------------------------'
73
+ puts "Files Processed: #{@files}"
74
+ puts "Containers Processed: #{@cnrs}"
75
+ puts "Errors: #{@errors}"
76
+ puts "Time: #{delta.round(2)} seconds"
77
+ puts # spacer
78
+ end
79
+
80
+ def process_file(file)
81
+ @module = nil
82
+ @containers = {}
83
+ puts "[ Processing file #{file} ]" if @options[:verbose]
84
+
85
+ File.open(file) do |f|
86
+ loop do
87
+ break if (line = f.gets).nil?
88
+ process_line(line, f)
89
+ end
90
+ end
91
+ end
92
+
93
+ def process_line(line, file)
94
+ if @module.nil?
95
+ @module = Regexp.last_match(1) if line =~ /^module (.+) {/
96
+ elsif line =~ /^ container (.+) {/
97
+ process_root_container(@module, Regexp.last_match(1), file)
98
+ end
99
+ end
100
+
101
+ def process_root_container(module_name, container, file)
102
+ operation = :get_config
103
+ loop do
104
+ line = file.gets
105
+ break if !line || line.strip == ''
106
+ if line =~ /^ config false;/ # abort cnr if not config
107
+ operation = :get_oper
108
+ break
109
+ end
110
+ end
111
+
112
+ # only output config or operational data, depending on options
113
+ if @options[:oper]
114
+ return if operation == :get_config
115
+ else
116
+ return if operation != :get_config
117
+ end
118
+
119
+ # guard against duplicate containers
120
+ if @containers.key?(container)
121
+ puts "[ Duplicate container #{container} ]" if @options[:verbose]
122
+ return
123
+ end
124
+
125
+ yang_path = "{\"#{module_name}:#{container}\": [null]}"
126
+
127
+ @containers[container] = true
128
+ @cnrs += 1
129
+
130
+ begin
131
+ data = client.get(data_format: :yang_json,
132
+ command: yang_path,
133
+ mode: operation)
134
+ if data && data.strip.length > 0
135
+ puts "[ Processing container #{container} ]"\
136
+ if @options[:verbose]
137
+ output_data(yang_path, data)
138
+ else
139
+ puts "[ Processing container #{container}: no data returned ]"\
140
+ if @options[:verbose]
141
+ end
142
+ rescue Cisco::ClientError, Cisco::YangError => e
143
+ puts "[ Processing container #{container} ]" if @options[:verbose]
144
+ @errors += 1
145
+ puts "!!Error on '#{yang_path}': #{e}"
146
+ debug e.backtrace
147
+ puts # spacer
148
+ end
149
+ end
150
+
151
+ def output_data(yang_path, data)
152
+ if @options[:manifest]
153
+ puts " cisco_yang { '#{yang_path}':\n"\
154
+ " ensure => present,\n"\
155
+ " source => '#{data.chomp.gsub(/\n/, "\n ")}'\n"\
156
+ ' }'
157
+ else
158
+ puts data
159
+ end
160
+ puts # spacer
161
+ end
162
+
163
+ def client
164
+ unless @client
165
+ puts "[ Connecting to client environment: #{@options[:environment]} ]"\
166
+ if @options[:verbose]
167
+
168
+ @client = Cisco::Client.create(@options[:environment])
169
+
170
+ puts "[ Connected to client: #{@client} ]"\
171
+ if @options[:verbose]
172
+ end
173
+ @client
174
+ rescue Cisco::AuthenticationFailed
175
+ abort 'Unauthorized to connect'
176
+ rescue Cisco::ClientError, TypeError, ArgumentError => e
177
+ abort "Error in establishing connection: #{e}"
178
+ end
179
+ end # YangViewer
180
+ end # Cisco
181
+
182
+ options = { path: '/pkg/yang', environment: 'default' }
183
+ optparse = OptionParser.new do |opts|
184
+ opts.banner = 'Usage: ruby show_running_yang.rb '\
185
+ '[options] [file_or_directory_path]'
186
+
187
+ opts.on('-m', '--manifest', 'Output config in a form suitable '\
188
+ 'for inclusion in a Puppet manifest') do |_arg|
189
+ options[:manifest] = true
190
+ end
191
+
192
+ opts.on('-o', '--oper',
193
+ 'Retrieve operational data instead of configuration '\
194
+ '(warning: possibly returns a lot of data; use at own risk)') do
195
+ options[:oper] = true
196
+ end
197
+
198
+ opts.on('-e', '--environment node', 'The node in cisco_node_utils.yaml '\
199
+ 'from which to retrieve data') do |env|
200
+ options[:environment] = env
201
+ end
202
+
203
+ opts.on('-d', '--debug', 'Enable debug-level logging') do
204
+ Cisco::Logger.level = Logger::DEBUG
205
+ end
206
+
207
+ opts.on('-v', '--verbose', 'Enable verbose messages') do
208
+ options[:verbose] = true
209
+ end
210
+
211
+ opts.on('-h', '--help', 'Print this help') do
212
+ puts optparse
213
+ exit(0)
214
+ end
215
+ end
216
+ optparse.parse!
217
+
218
+ if options[:oper] && options[:manifest]
219
+ STDERR.puts '!! Operational data cannot be set in a manifest, '\
220
+ 'so option -m does not make sense in conjunction with -o.'
221
+ exit(-1)
222
+ end
223
+
224
+ # If there is a single ARGV left, use is as the file/dir path
225
+ if ARGV.length == 1
226
+ options[:path] = ARGV[0]
227
+ elsif ARGV.length > 1
228
+ puts optparse
229
+ exit(-1)
230
+ end
231
+
232
+ ycv = Cisco::YangViewer.new
233
+ ycv.process(options)
@@ -0,0 +1,41 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'cisco_node_utils/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'cisco_node_utils_mgx'
8
+ spec.version = CiscoNodeUtils::VERSION
9
+ spec.authors = ['Rob Gries', 'Alex Hunsberger', 'Glenn Matthews',
10
+ 'Chris Van Heuveln', 'Rich Wellum', 'Mike Wiebe',
11
+ 'Jie Yang', 'Sai Chintalapudi']
12
+ spec.email = 'cisco_agent_gem@cisco.com'
13
+ spec.summary = 'Utilities for management of Cisco network nodes'
14
+ spec.description = <<-EOF
15
+ Utilities for management of Cisco network nodes.
16
+ Designed to work with Puppet and Chef.
17
+ Currently supports NX-OS nodes.
18
+ EOF
19
+ spec.license = 'Apache-2.0'
20
+ spec.homepage = 'https://github.com/cisco/cisco-network-node-utils'
21
+
22
+ spec.files = `svn list -R`.split($/)
23
+ # Files in bin/git are not executables as far as the Gem is concerned
24
+ spec.executables = []
25
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
26
+ spec.require_paths = ['lib']
27
+
28
+ spec.required_ruby_version = '>= 2.0.0'
29
+ spec.required_rubygems_version = '>= 2.1.0'
30
+
31
+ spec.add_development_dependency 'bundler', '~> 1.7'
32
+ spec.add_development_dependency 'kwalify', '~> 0.7.2'
33
+ spec.add_development_dependency 'minitest', '~> 5.0'
34
+ spec.add_development_dependency 'net-telnet', '~> 0.1.1'
35
+ spec.add_development_dependency 'rake', '~> 10.0'
36
+ spec.add_development_dependency 'rspec', '~> 3.0'
37
+ spec.add_development_dependency 'rubocop', '= 0.35.1'
38
+ spec.add_development_dependency 'simplecov', '~> 0.9'
39
+
40
+ spec.extensions = ['ext/mkrf_conf.rb']
41
+ end