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.
- checksums.yaml +7 -0
- data/.gitignore +10 -0
- data/.rspec +2 -0
- data/.rubocop.yml +96 -0
- data/.travis.yml +17 -0
- data/CHANGELOG.md +676 -0
- data/CONTRIBUTING.md +43 -0
- data/Gemfile +10 -0
- data/LICENSE +201 -0
- data/README.md +246 -0
- data/Rakefile +44 -0
- data/SUPPORT.md +3 -0
- data/bin/.rubocop.yml +18 -0
- data/bin/check_metric_limits.rb +109 -0
- data/bin/git/hooks/commit-msg/enforce_style +89 -0
- data/bin/git/hooks/hook_lib +115 -0
- data/bin/git/hooks/hooks-wrapper +38 -0
- data/bin/git/hooks/post-flow-hotfix-start/update-version +24 -0
- data/bin/git/hooks/post-flow-release-finish/update-version +29 -0
- data/bin/git/hooks/post-flow-release-start/update-version +19 -0
- data/bin/git/hooks/post-merge/update-hooks +6 -0
- data/bin/git/hooks/post-rewrite/update-hooks +6 -0
- data/bin/git/hooks/pre-commit/check_unstaged_changes +18 -0
- data/bin/git/hooks/pre-commit/rubocop +25 -0
- data/bin/git/hooks/pre-commit/validate-diffs +45 -0
- data/bin/git/hooks/pre-commit/validate-yaml +18 -0
- data/bin/git/hooks/pre-push/check-changelog +24 -0
- data/bin/git/hooks/pre-push/rubocop +7 -0
- data/bin/git/update-hooks +123 -0
- data/bin/show_running_yang.rb +233 -0
- data/cisco_node_utils.gemspec +41 -0
- data/docs/README-develop-best-practices.md +521 -0
- data/docs/README-develop-node-utils-APIs.md +570 -0
- data/docs/README-maintainers.md +77 -0
- data/docs/README-test-execution.md +57 -0
- data/docs/README-utilities.md +14 -0
- data/docs/agent_files.png +0 -0
- data/docs/cisco_node_utils.yaml.example +36 -0
- data/docs/template-router.rb +123 -0
- data/docs/template-test_router.rb +104 -0
- data/ext/mkrf_conf.rb +63 -0
- data/lib/.rubocop.yml +18 -0
- data/lib/cisco_node_utils/aaa_authentication_login.rb +95 -0
- data/lib/cisco_node_utils/aaa_authentication_login_service.rb +138 -0
- data/lib/cisco_node_utils/aaa_authorization_service.rb +156 -0
- data/lib/cisco_node_utils/ace.rb +467 -0
- data/lib/cisco_node_utils/acl.rb +101 -0
- data/lib/cisco_node_utils/banner.rb +63 -0
- data/lib/cisco_node_utils/bfd_global.rb +305 -0
- data/lib/cisco_node_utils/bgp.rb +988 -0
- data/lib/cisco_node_utils/bgp_af.rb +545 -0
- data/lib/cisco_node_utils/bgp_af_aggr_addr.rb +207 -0
- data/lib/cisco_node_utils/bgp_neighbor.rb +527 -0
- data/lib/cisco_node_utils/bgp_neighbor_af.rb +780 -0
- data/lib/cisco_node_utils/bridge_domain.rb +178 -0
- data/lib/cisco_node_utils/bridge_domain_vni.rb +206 -0
- data/lib/cisco_node_utils/cisco_cmn_utils.rb +444 -0
- data/lib/cisco_node_utils/client/client.rb +238 -0
- data/lib/cisco_node_utils/client/grpc/client.rb +395 -0
- data/lib/cisco_node_utils/client/grpc/ems.proto +148 -0
- data/lib/cisco_node_utils/client/grpc/ems.rb +111 -0
- data/lib/cisco_node_utils/client/grpc/ems_services.rb +49 -0
- data/lib/cisco_node_utils/client/grpc.rb +33 -0
- data/lib/cisco_node_utils/client/nxapi/client.rb +368 -0
- data/lib/cisco_node_utils/client/nxapi.rb +31 -0
- data/lib/cisco_node_utils/client/utils.rb +180 -0
- data/lib/cisco_node_utils/client.rb +35 -0
- data/lib/cisco_node_utils/cmd_ref/README_YAML.md +590 -0
- data/lib/cisco_node_utils/cmd_ref/aaa_auth_login_service.yaml +25 -0
- data/lib/cisco_node_utils/cmd_ref/aaa_authentication_login.yaml +38 -0
- data/lib/cisco_node_utils/cmd_ref/aaa_authorization_service.yaml +40 -0
- data/lib/cisco_node_utils/cmd_ref/acl.yaml +48 -0
- data/lib/cisco_node_utils/cmd_ref/banner.yaml +11 -0
- data/lib/cisco_node_utils/cmd_ref/bfd_global.yaml +117 -0
- data/lib/cisco_node_utils/cmd_ref/bgp.yaml +383 -0
- data/lib/cisco_node_utils/cmd_ref/bgp_af.yaml +223 -0
- data/lib/cisco_node_utils/cmd_ref/bgp_af_aa.yaml +38 -0
- data/lib/cisco_node_utils/cmd_ref/bgp_neighbor.yaml +174 -0
- data/lib/cisco_node_utils/cmd_ref/bgp_neighbor_af.yaml +236 -0
- data/lib/cisco_node_utils/cmd_ref/bridge_domain.yaml +49 -0
- data/lib/cisco_node_utils/cmd_ref/bridge_domain_vni.yaml +33 -0
- data/lib/cisco_node_utils/cmd_ref/dhcp_relay_global.yaml +128 -0
- data/lib/cisco_node_utils/cmd_ref/dnsclient.yaml +55 -0
- data/lib/cisco_node_utils/cmd_ref/encapsulation.yaml +25 -0
- data/lib/cisco_node_utils/cmd_ref/evpn_multicast.yaml +12 -0
- data/lib/cisco_node_utils/cmd_ref/evpn_multisite.yaml +18 -0
- data/lib/cisco_node_utils/cmd_ref/evpn_stormcontrol.yaml +18 -0
- data/lib/cisco_node_utils/cmd_ref/evpn_vni.yaml +48 -0
- data/lib/cisco_node_utils/cmd_ref/fabricpath.yaml +183 -0
- data/lib/cisco_node_utils/cmd_ref/fabricpath_topology.yaml +40 -0
- data/lib/cisco_node_utils/cmd_ref/feature.yaml +126 -0
- data/lib/cisco_node_utils/cmd_ref/hostname.yaml +8 -0
- data/lib/cisco_node_utils/cmd_ref/hsrp_global.yaml +25 -0
- data/lib/cisco_node_utils/cmd_ref/images.yaml +8 -0
- data/lib/cisco_node_utils/cmd_ref/interface.yaml +781 -0
- data/lib/cisco_node_utils/cmd_ref/interface_channel_group.yaml +45 -0
- data/lib/cisco_node_utils/cmd_ref/interface_evpn_multisite.yaml +17 -0
- data/lib/cisco_node_utils/cmd_ref/interface_hsrp_group.yaml +120 -0
- data/lib/cisco_node_utils/cmd_ref/interface_ospf.yaml +112 -0
- data/lib/cisco_node_utils/cmd_ref/interface_portchannel.yaml +87 -0
- data/lib/cisco_node_utils/cmd_ref/interface_service_vni.yaml +42 -0
- data/lib/cisco_node_utils/cmd_ref/inventory.yaml +45 -0
- data/lib/cisco_node_utils/cmd_ref/ip_multicast.yaml +22 -0
- data/lib/cisco_node_utils/cmd_ref/itd_device_group.yaml +83 -0
- data/lib/cisco_node_utils/cmd_ref/itd_service.yaml +119 -0
- data/lib/cisco_node_utils/cmd_ref/memory.yaml +24 -0
- data/lib/cisco_node_utils/cmd_ref/ntp_auth_key.yaml +10 -0
- data/lib/cisco_node_utils/cmd_ref/ntp_config.yaml +27 -0
- data/lib/cisco_node_utils/cmd_ref/ntp_server.yaml +34 -0
- data/lib/cisco_node_utils/cmd_ref/object_group.yaml +32 -0
- data/lib/cisco_node_utils/cmd_ref/ospf.yaml +91 -0
- data/lib/cisco_node_utils/cmd_ref/ospf_area.yaml +91 -0
- data/lib/cisco_node_utils/cmd_ref/ospf_area_vlink.yaml +88 -0
- data/lib/cisco_node_utils/cmd_ref/overlay_global.yaml +37 -0
- data/lib/cisco_node_utils/cmd_ref/pim.yaml +43 -0
- data/lib/cisco_node_utils/cmd_ref/portchannel_global.yaml +86 -0
- data/lib/cisco_node_utils/cmd_ref/radius_global.yaml +37 -0
- data/lib/cisco_node_utils/cmd_ref/radius_server.yaml +100 -0
- data/lib/cisco_node_utils/cmd_ref/radius_server_group.yaml +19 -0
- data/lib/cisco_node_utils/cmd_ref/route_map.yaml +601 -0
- data/lib/cisco_node_utils/cmd_ref/show_system.yaml +9 -0
- data/lib/cisco_node_utils/cmd_ref/show_version.yaml +84 -0
- data/lib/cisco_node_utils/cmd_ref/snmp_community.yaml +81 -0
- data/lib/cisco_node_utils/cmd_ref/snmp_group.yaml +9 -0
- data/lib/cisco_node_utils/cmd_ref/snmp_notification_receiver.yaml +74 -0
- data/lib/cisco_node_utils/cmd_ref/snmp_server.yaml +91 -0
- data/lib/cisco_node_utils/cmd_ref/snmp_user.yaml +57 -0
- data/lib/cisco_node_utils/cmd_ref/snmpnotification.yaml +23 -0
- data/lib/cisco_node_utils/cmd_ref/span_session.yaml +65 -0
- data/lib/cisco_node_utils/cmd_ref/stp_global.yaml +235 -0
- data/lib/cisco_node_utils/cmd_ref/syslog_facility.yaml +10 -0
- data/lib/cisco_node_utils/cmd_ref/syslog_server.yaml +34 -0
- data/lib/cisco_node_utils/cmd_ref/syslog_settings.yaml +45 -0
- data/lib/cisco_node_utils/cmd_ref/system.yaml +7 -0
- data/lib/cisco_node_utils/cmd_ref/tacacs_global.yaml +37 -0
- data/lib/cisco_node_utils/cmd_ref/tacacs_server.yaml +63 -0
- data/lib/cisco_node_utils/cmd_ref/tacacs_server_group.yaml +45 -0
- data/lib/cisco_node_utils/cmd_ref/tacacs_server_host.yaml +64 -0
- data/lib/cisco_node_utils/cmd_ref/upgrade.yaml +38 -0
- data/lib/cisco_node_utils/cmd_ref/vdc.yaml +52 -0
- data/lib/cisco_node_utils/cmd_ref/virtual_service.yaml +8 -0
- data/lib/cisco_node_utils/cmd_ref/vlan.yaml +106 -0
- data/lib/cisco_node_utils/cmd_ref/vpc.yaml +233 -0
- data/lib/cisco_node_utils/cmd_ref/vrf.yaml +86 -0
- data/lib/cisco_node_utils/cmd_ref/vrf_af.yaml +139 -0
- data/lib/cisco_node_utils/cmd_ref/vtp.yaml +32 -0
- data/lib/cisco_node_utils/cmd_ref/vxlan_vtep.yaml +114 -0
- data/lib/cisco_node_utils/cmd_ref/vxlan_vtep_vni.yaml +71 -0
- data/lib/cisco_node_utils/cmd_ref/yang.yaml +7 -0
- data/lib/cisco_node_utils/cmd_ref/yum.yaml +68 -0
- data/lib/cisco_node_utils/command_reference.rb +724 -0
- data/lib/cisco_node_utils/configparser_lib.rb +195 -0
- data/lib/cisco_node_utils/constants.rb +40 -0
- data/lib/cisco_node_utils/dhcp_relay_global.rb +302 -0
- data/lib/cisco_node_utils/dns_domain.rb +93 -0
- data/lib/cisco_node_utils/domain_name.rb +82 -0
- data/lib/cisco_node_utils/encapsulation.rb +112 -0
- data/lib/cisco_node_utils/environment.rb +110 -0
- data/lib/cisco_node_utils/evpn_multicast.rb +66 -0
- data/lib/cisco_node_utils/evpn_multisite.rb +96 -0
- data/lib/cisco_node_utils/evpn_stormcontrol.rb +84 -0
- data/lib/cisco_node_utils/evpn_vni.rb +159 -0
- data/lib/cisco_node_utils/exceptions.rb +140 -0
- data/lib/cisco_node_utils/fabricpath_global.rb +405 -0
- data/lib/cisco_node_utils/fabricpath_topology.rb +137 -0
- data/lib/cisco_node_utils/feature.rb +377 -0
- data/lib/cisco_node_utils/hostname.rb +62 -0
- data/lib/cisco_node_utils/hsrp_global.rb +97 -0
- data/lib/cisco_node_utils/interface.rb +2128 -0
- data/lib/cisco_node_utils/interface_channel_group.rb +142 -0
- data/lib/cisco_node_utils/interface_evpn_multisite.rb +72 -0
- data/lib/cisco_node_utils/interface_hsrp_group.rb +557 -0
- data/lib/cisco_node_utils/interface_ospf.rb +378 -0
- data/lib/cisco_node_utils/interface_portchannel.rb +180 -0
- data/lib/cisco_node_utils/interface_service_vni.rb +132 -0
- data/lib/cisco_node_utils/ip_multicast.rb +90 -0
- data/lib/cisco_node_utils/itd_device_group.rb +228 -0
- data/lib/cisco_node_utils/itd_device_group_node.rb +144 -0
- data/lib/cisco_node_utils/itd_service.rb +511 -0
- data/lib/cisco_node_utils/logger.rb +78 -0
- data/lib/cisco_node_utils/name_server.rb +64 -0
- data/lib/cisco_node_utils/node.rb +443 -0
- data/lib/cisco_node_utils/node_util.rb +111 -0
- data/lib/cisco_node_utils/ntp_auth_key.rb +67 -0
- data/lib/cisco_node_utils/ntp_config.rb +83 -0
- data/lib/cisco_node_utils/ntp_server.rb +86 -0
- data/lib/cisco_node_utils/object_group.rb +75 -0
- data/lib/cisco_node_utils/object_group_entry.rb +143 -0
- data/lib/cisco_node_utils/overlay_global.rb +142 -0
- data/lib/cisco_node_utils/pim.rb +131 -0
- data/lib/cisco_node_utils/pim_group_list.rb +109 -0
- data/lib/cisco_node_utils/pim_rp_address.rb +103 -0
- data/lib/cisco_node_utils/platform.rb +217 -0
- data/lib/cisco_node_utils/portchannel_global.rb +347 -0
- data/lib/cisco_node_utils/radius_global.rb +165 -0
- data/lib/cisco_node_utils/radius_server.rb +421 -0
- data/lib/cisco_node_utils/radius_server_group.rb +117 -0
- data/lib/cisco_node_utils/route_map.rb +2540 -0
- data/lib/cisco_node_utils/router_ospf.rb +77 -0
- data/lib/cisco_node_utils/router_ospf_area.rb +416 -0
- data/lib/cisco_node_utils/router_ospf_area_vlink.rb +313 -0
- data/lib/cisco_node_utils/router_ospf_vrf.rb +342 -0
- data/lib/cisco_node_utils/snmp_notification_receiver.rb +176 -0
- data/lib/cisco_node_utils/snmpcommunity.rb +109 -0
- data/lib/cisco_node_utils/snmpgroup.rb +54 -0
- data/lib/cisco_node_utils/snmpnotification.rb +57 -0
- data/lib/cisco_node_utils/snmpserver.rb +132 -0
- data/lib/cisco_node_utils/snmpuser.rb +403 -0
- data/lib/cisco_node_utils/span_session.rb +149 -0
- data/lib/cisco_node_utils/stp_global.rb +676 -0
- data/lib/cisco_node_utils/syslog_facility.rb +64 -0
- data/lib/cisco_node_utils/syslog_server.rb +146 -0
- data/lib/cisco_node_utils/syslog_settings.rb +174 -0
- data/lib/cisco_node_utils/tacacs_global.rb +137 -0
- data/lib/cisco_node_utils/tacacs_server.rb +173 -0
- data/lib/cisco_node_utils/tacacs_server_group.rb +149 -0
- data/lib/cisco_node_utils/tacacs_server_host.rb +216 -0
- data/lib/cisco_node_utils/upgrade.rb +122 -0
- data/lib/cisco_node_utils/vdc.rb +118 -0
- data/lib/cisco_node_utils/version.rb +21 -0
- data/lib/cisco_node_utils/vlan.rb +301 -0
- data/lib/cisco_node_utils/vpc.rb +466 -0
- data/lib/cisco_node_utils/vrf.rb +192 -0
- data/lib/cisco_node_utils/vrf_af.rb +327 -0
- data/lib/cisco_node_utils/vtp.rb +125 -0
- data/lib/cisco_node_utils/vxlan_vtep.rb +286 -0
- data/lib/cisco_node_utils/vxlan_vtep_vni.rb +331 -0
- data/lib/cisco_node_utils/yang.rb +160 -0
- data/lib/cisco_node_utils/yum.rb +213 -0
- data/lib/cisco_node_utils.rb +21 -0
- data/lib/minitest/environment_plugin.rb +31 -0
- data/lib/minitest/log_level_plugin.rb +41 -0
- data/spec/client_spec.rb +7 -0
- data/spec/environment_spec.rb +384 -0
- data/spec/grpc_client_spec.rb +23 -0
- data/spec/isolate/all_clients_spec.rb +9 -0
- data/spec/isolate/grpc_only_spec.rb +16 -0
- data/spec/isolate/no_clients_spec.rb +26 -0
- data/spec/isolate/nxapi_only_spec.rb +16 -0
- data/spec/nxapi_client_spec.rb +42 -0
- data/spec/schema.yaml +82 -0
- data/spec/shared_examples_for_clients.rb +14 -0
- data/spec/spec_helper.rb +91 -0
- data/spec/whitespace_spec.rb +10 -0
- data/spec/yaml_spec.rb +42 -0
- data/tests/.rubocop.yml +18 -0
- data/tests/CSCuxdublin-1.0.0-7.0.3.I3.1.lib32_n9000.rpm +0 -0
- data/tests/basetest.rb +243 -0
- data/tests/ciscotest.rb +577 -0
- data/tests/cmd_config.yaml +75 -0
- data/tests/cmd_config_invalid.yaml +16 -0
- data/tests/n9000_sample-1.0.0-7.0.3.x86_64.rpm +0 -0
- data/tests/noop.rb +7 -0
- data/tests/platform_info.rb +63 -0
- data/tests/tacacs_server.yaml.example +6 -0
- data/tests/test_aaa_authentication_login.rb +243 -0
- data/tests/test_aaa_authentication_login_service.rb +761 -0
- data/tests/test_aaa_authorization_service.rb +874 -0
- data/tests/test_ace.rb +304 -0
- data/tests/test_acl.rb +185 -0
- data/tests/test_banner.rb +85 -0
- data/tests/test_bfd_global.rb +272 -0
- data/tests/test_bgp_af.rb +875 -0
- data/tests/test_bgp_af_aa.rb +108 -0
- data/tests/test_bgp_neighbor.rb +596 -0
- data/tests/test_bgp_neighbor_af.rb +781 -0
- data/tests/test_bridge_domain.rb +198 -0
- data/tests/test_bridge_domain_vni.rb +109 -0
- data/tests/test_client_utils.rb +111 -0
- data/tests/test_cmn_utils.rb +76 -0
- data/tests/test_command_config.rb +206 -0
- data/tests/test_command_reference.rb +669 -0
- data/tests/test_dhcp_relay_global.rb +286 -0
- data/tests/test_dns_domain.rb +123 -0
- data/tests/test_domain_name.rb +96 -0
- data/tests/test_encapsulation.rb +75 -0
- data/tests/test_evpn_multicast.rb +65 -0
- data/tests/test_evpn_multisite.rb +70 -0
- data/tests/test_evpn_stormcontrol.rb +56 -0
- data/tests/test_evpn_vni.rb +131 -0
- data/tests/test_fabricpath_global.rb +246 -0
- data/tests/test_fabricpath_topology.rb +77 -0
- data/tests/test_feature.rb +272 -0
- data/tests/test_grpc.rb +166 -0
- data/tests/test_hostname.rb +64 -0
- data/tests/test_hsrp_global.rb +79 -0
- data/tests/test_interface.rb +1958 -0
- data/tests/test_interface_bdi.rb +80 -0
- data/tests/test_interface_channel_group.rb +131 -0
- data/tests/test_interface_evpn_multisite.rb +94 -0
- data/tests/test_interface_hsrp.rb +134 -0
- data/tests/test_interface_hsrp_group.rb +570 -0
- data/tests/test_interface_ospf.rb +820 -0
- data/tests/test_interface_portchannel.rb +135 -0
- data/tests/test_interface_private_vlan.rb +365 -0
- data/tests/test_interface_service_vni.rb +203 -0
- data/tests/test_interface_svi.rb +210 -0
- data/tests/test_interface_switchport.rb +468 -0
- data/tests/test_ip_multicast.rb +80 -0
- data/tests/test_itd_device_group.rb +145 -0
- data/tests/test_itd_device_group_node.rb +199 -0
- data/tests/test_itd_service.rb +314 -0
- data/tests/test_logger.rb +43 -0
- data/tests/test_name_server.rb +94 -0
- data/tests/test_node.rb +50 -0
- data/tests/test_node_ext.rb +406 -0
- data/tests/test_node_util.rb +119 -0
- data/tests/test_ntp_auth_key.rb +77 -0
- data/tests/test_ntp_config.rb +100 -0
- data/tests/test_ntp_server.rb +146 -0
- data/tests/test_nxapi.rb +236 -0
- data/tests/test_object_group.rb +122 -0
- data/tests/test_overlay_global.rb +108 -0
- data/tests/test_pim.rb +203 -0
- data/tests/test_pim_group_list.rb +147 -0
- data/tests/test_pim_rp_address.rb +155 -0
- data/tests/test_platform.rb +254 -0
- data/tests/test_portchannel_global.rb +322 -0
- data/tests/test_radius_global.rb +108 -0
- data/tests/test_radius_server.rb +377 -0
- data/tests/test_radius_server_group.rb +151 -0
- data/tests/test_route_map.rb +1479 -0
- data/tests/test_router_bgp.rb +1325 -0
- data/tests/test_router_ospf.rb +56 -0
- data/tests/test_router_ospf_area.rb +433 -0
- data/tests/test_router_ospf_area_vlink.rb +298 -0
- data/tests/test_router_ospf_vrf.rb +690 -0
- data/tests/test_snmp_notification_receiver.rb +169 -0
- data/tests/test_snmpcommunity.rb +422 -0
- data/tests/test_snmpgroup.rb +71 -0
- data/tests/test_snmpnotification.rb +91 -0
- data/tests/test_snmpserver.rb +251 -0
- data/tests/test_snmpuser.rb +666 -0
- data/tests/test_span_session.rb +155 -0
- data/tests/test_stp_global.rb +575 -0
- data/tests/test_syslog_facility.rb +80 -0
- data/tests/test_syslog_server.rb +119 -0
- data/tests/test_syslog_settings.rb +123 -0
- data/tests/test_tacacs_global.rb +109 -0
- data/tests/test_tacacs_server.rb +436 -0
- data/tests/test_tacacs_server_group.rb +434 -0
- data/tests/test_tacacs_server_host.rb +427 -0
- data/tests/test_upgrade.rb +105 -0
- data/tests/test_vdc.rb +64 -0
- data/tests/test_vlan.rb +386 -0
- data/tests/test_vlan_private.rb +656 -0
- data/tests/test_vpc.rb +548 -0
- data/tests/test_vrf.rb +248 -0
- data/tests/test_vrf_af.rb +288 -0
- data/tests/test_vtp.rb +278 -0
- data/tests/test_vxlan_vtep.rb +327 -0
- data/tests/test_vxlan_vtep_vni.rb +326 -0
- data/tests/test_yang.rb +369 -0
- data/tests/test_yum.rb +109 -0
- data/tests/upgrade_info.yaml.example +3 -0
- data/tests/yum_package.yaml +94 -0
- 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
|