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