cisco_node_utils 1.2.0 → 1.3.0
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 +4 -4
- data/.gitignore +2 -0
- data/.rspec +2 -0
- data/.rubocop.yml +13 -0
- data/.travis.yml +4 -1
- data/CHANGELOG.md +81 -2
- data/CONTRIBUTING.md +2 -17
- data/Gemfile +5 -0
- data/README.md +92 -47
- data/Rakefile +23 -1
- data/bin/git/hooks/hook_lib +7 -0
- data/bin/git/hooks/pre-commit/check_unstaged_changes +18 -0
- data/bin/git/hooks/pre-commit/rubocop +7 -2
- data/bin/git/hooks/pre-commit/validate-diffs +18 -4
- data/bin/git/hooks/pre-commit/validate-yaml +18 -0
- data/bin/git/update-hooks +64 -6
- data/cisco_node_utils.gemspec +9 -6
- data/docs/README-develop-best-practices.md +149 -50
- data/docs/README-develop-node-utils-APIs.md +92 -42
- data/docs/README-maintainers.md +7 -4
- data/docs/README-test-execution.md +57 -0
- data/docs/cisco_node_utils.yaml.example +30 -0
- data/docs/template-router.rb +4 -0
- data/ext/mkrf_conf.rb +63 -0
- data/lib/.rubocop.yml +2 -2
- data/lib/cisco_node_utils.rb +5 -0
- data/lib/cisco_node_utils/aaa_authentication_login.rb +5 -6
- data/lib/cisco_node_utils/aaa_authorization_service.rb +1 -1
- data/lib/cisco_node_utils/ace.rb +165 -12
- data/lib/cisco_node_utils/acl.rb +2 -1
- data/lib/cisco_node_utils/bgp.rb +184 -21
- data/lib/cisco_node_utils/bgp_af.rb +94 -249
- data/lib/cisco_node_utils/bgp_neighbor.rb +94 -14
- data/lib/cisco_node_utils/bgp_neighbor_af.rb +75 -8
- data/lib/cisco_node_utils/bridge_domain.rb +183 -0
- data/lib/cisco_node_utils/bridge_domain_vni.rb +206 -0
- data/lib/cisco_node_utils/cisco_cmn_utils.rb +85 -2
- data/lib/cisco_node_utils/client.rb +35 -0
- data/lib/cisco_node_utils/client/client.rb +234 -0
- data/lib/cisco_node_utils/client/grpc.rb +33 -0
- data/lib/cisco_node_utils/client/grpc/client.rb +311 -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/nxapi.rb +31 -0
- data/lib/cisco_node_utils/client/nxapi/client.rb +305 -0
- data/lib/cisco_node_utils/client/utils.rb +164 -0
- data/lib/cisco_node_utils/cmd_ref/README_YAML.md +222 -254
- data/lib/cisco_node_utils/cmd_ref/aaa_auth_login_service.yaml +11 -8
- data/lib/cisco_node_utils/cmd_ref/aaa_authentication_login.yaml +22 -15
- data/lib/cisco_node_utils/cmd_ref/aaa_authorization_service.yaml +11 -8
- data/lib/cisco_node_utils/cmd_ref/acl.yaml +21 -16
- data/lib/cisco_node_utils/cmd_ref/bgp.yaml +239 -109
- data/lib/cisco_node_utils/cmd_ref/bgp_af.yaml +114 -55
- data/lib/cisco_node_utils/cmd_ref/bgp_neighbor.yaml +76 -52
- data/lib/cisco_node_utils/cmd_ref/bgp_neighbor_af.yaml +106 -62
- data/lib/cisco_node_utils/cmd_ref/bridge_domain.yaml +71 -0
- data/lib/cisco_node_utils/cmd_ref/bridge_domain_vni.yaml +33 -0
- data/lib/cisco_node_utils/cmd_ref/dnsclient.yaml +35 -14
- data/lib/cisco_node_utils/cmd_ref/encapsulation.yaml +25 -0
- data/lib/cisco_node_utils/cmd_ref/evpn_vni.yaml +23 -17
- data/lib/cisco_node_utils/cmd_ref/fabricpath.yaml +94 -83
- data/lib/cisco_node_utils/cmd_ref/fabricpath_topology.yaml +22 -17
- data/lib/cisco_node_utils/cmd_ref/feature.yaml +76 -26
- data/lib/cisco_node_utils/cmd_ref/images.yaml +3 -2
- data/lib/cisco_node_utils/cmd_ref/interface.yaml +381 -153
- data/lib/cisco_node_utils/cmd_ref/interface_channel_group.yaml +21 -11
- data/lib/cisco_node_utils/cmd_ref/interface_ospf.yaml +21 -21
- data/lib/cisco_node_utils/cmd_ref/interface_portchannel.yaml +30 -21
- data/lib/cisco_node_utils/cmd_ref/interface_service_vni.yaml +18 -13
- data/lib/cisco_node_utils/cmd_ref/inventory.yaml +26 -31
- 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 +17 -6
- data/lib/cisco_node_utils/cmd_ref/ntp_config.yaml +10 -3
- data/lib/cisco_node_utils/cmd_ref/ntp_server.yaml +17 -5
- data/lib/cisco_node_utils/cmd_ref/ospf.yaml +33 -29
- data/lib/cisco_node_utils/cmd_ref/overlay_global.yaml +12 -10
- data/lib/cisco_node_utils/cmd_ref/pim.yaml +16 -19
- data/lib/cisco_node_utils/cmd_ref/portchannel_global.yaml +40 -25
- data/lib/cisco_node_utils/cmd_ref/radius_global.yaml +17 -12
- data/lib/cisco_node_utils/cmd_ref/radius_server.yaml +71 -35
- data/lib/cisco_node_utils/cmd_ref/radius_server_group.yaml +10 -5
- data/lib/cisco_node_utils/cmd_ref/show_system.yaml +6 -2
- data/lib/cisco_node_utils/cmd_ref/show_version.yaml +47 -43
- data/lib/cisco_node_utils/cmd_ref/snmp_community.yaml +13 -11
- data/lib/cisco_node_utils/cmd_ref/snmp_group.yaml +4 -2
- data/lib/cisco_node_utils/cmd_ref/snmp_notification_receiver.yaml +23 -21
- data/lib/cisco_node_utils/cmd_ref/snmp_server.yaml +26 -22
- data/lib/cisco_node_utils/cmd_ref/snmp_user.yaml +19 -17
- data/lib/cisco_node_utils/cmd_ref/snmpnotification.yaml +18 -6
- data/lib/cisco_node_utils/cmd_ref/stp_global.yaml +234 -0
- data/lib/cisco_node_utils/cmd_ref/syslog_server.yaml +24 -9
- data/lib/cisco_node_utils/cmd_ref/syslog_settings.yaml +5 -3
- data/lib/cisco_node_utils/cmd_ref/system.yaml +4 -3
- data/lib/cisco_node_utils/cmd_ref/tacacs_server.yaml +22 -20
- data/lib/cisco_node_utils/cmd_ref/tacacs_server_group.yaml +27 -15
- data/lib/cisco_node_utils/cmd_ref/tacacs_server_host.yaml +45 -16
- data/lib/cisco_node_utils/cmd_ref/vdc.yaml +21 -11
- data/lib/cisco_node_utils/cmd_ref/virtual_service.yaml +3 -2
- data/lib/cisco_node_utils/cmd_ref/vlan.yaml +60 -32
- data/lib/cisco_node_utils/cmd_ref/vpc.yaml +118 -101
- data/lib/cisco_node_utils/cmd_ref/vrf.yaml +54 -58
- data/lib/cisco_node_utils/cmd_ref/vrf_af.yaml +118 -0
- data/lib/cisco_node_utils/cmd_ref/vtp.yaml +19 -25
- data/lib/cisco_node_utils/cmd_ref/vxlan_vtep.yaml +28 -18
- data/lib/cisco_node_utils/cmd_ref/vxlan_vtep_vni.yaml +34 -17
- data/lib/cisco_node_utils/cmd_ref/yum.yaml +6 -4
- data/lib/cisco_node_utils/command_reference.rb +261 -142
- data/lib/cisco_node_utils/constants.rb +33 -0
- data/lib/cisco_node_utils/encapsulation.rb +112 -0
- data/lib/cisco_node_utils/environment.rb +102 -0
- data/lib/cisco_node_utils/evpn_vni.rb +5 -3
- data/lib/cisco_node_utils/exceptions.rb +111 -0
- data/lib/cisco_node_utils/fabricpath_global.rb +52 -35
- data/lib/cisco_node_utils/fabricpath_topology.rb +44 -57
- data/lib/cisco_node_utils/feature.rb +165 -3
- data/lib/cisco_node_utils/interface.rb +1051 -260
- data/lib/cisco_node_utils/interface_channel_group.rb +11 -10
- data/lib/cisco_node_utils/interface_ospf.rb +1 -2
- data/lib/cisco_node_utils/interface_portchannel.rb +4 -12
- data/lib/cisco_node_utils/interface_service_vni.rb +7 -7
- data/lib/cisco_node_utils/itd_device_group.rb +248 -0
- data/lib/cisco_node_utils/itd_device_group_node.rb +144 -0
- data/lib/cisco_node_utils/itd_service.rb +523 -0
- data/lib/cisco_node_utils/logger.rb +75 -0
- data/lib/cisco_node_utils/node.rb +62 -192
- data/lib/cisco_node_utils/node_util.rb +56 -10
- data/lib/cisco_node_utils/overlay_global.rb +2 -2
- data/lib/cisco_node_utils/pim.rb +2 -13
- data/lib/cisco_node_utils/pim_group_list.rb +1 -1
- data/lib/cisco_node_utils/pim_rp_address.rb +1 -1
- data/lib/cisco_node_utils/platform.rb +52 -21
- data/lib/cisco_node_utils/portchannel_global.rb +89 -19
- data/lib/cisco_node_utils/radius_server.rb +168 -37
- data/lib/cisco_node_utils/router_ospf.rb +20 -35
- data/lib/cisco_node_utils/router_ospf_vrf.rb +4 -4
- data/lib/cisco_node_utils/snmpserver.rb +1 -6
- data/lib/cisco_node_utils/snmpuser.rb +6 -4
- data/lib/cisco_node_utils/stp_global.rb +676 -0
- data/lib/cisco_node_utils/syslog_server.rb +77 -18
- data/lib/cisco_node_utils/syslog_settings.rb +1 -1
- data/lib/cisco_node_utils/tacacs_server_group.rb +8 -4
- data/lib/cisco_node_utils/tacacs_server_host.rb +115 -25
- data/lib/cisco_node_utils/vdc.rb +12 -0
- data/lib/cisco_node_utils/version.rb +1 -1
- data/lib/cisco_node_utils/vlan.rb +147 -29
- data/lib/cisco_node_utils/vpc.rb +55 -3
- data/lib/cisco_node_utils/vrf.rb +72 -11
- data/lib/cisco_node_utils/vrf_af.rb +114 -29
- data/lib/cisco_node_utils/vtp.rb +34 -52
- data/lib/cisco_node_utils/vxlan_vtep.rb +34 -8
- data/lib/cisco_node_utils/vxlan_vtep_vni.rb +36 -4
- 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 +263 -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 +75 -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 +2 -2
- data/tests/CSCuxdublin-1.0.0-7.0.3.I3.1.lib32_n9000.rpm +0 -0
- data/tests/basetest.rb +96 -36
- data/tests/ciscotest.rb +220 -12
- data/tests/cmd_config.yaml +71 -49
- data/tests/cmd_config_invalid.yaml +1 -1
- data/tests/test_aaa_authentication_login.rb +1 -0
- data/tests/test_aaa_authentication_login_service.rb +9 -0
- data/tests/test_aaa_authorization_service.rb +173 -367
- data/tests/test_ace.rb +171 -100
- data/tests/test_acl.rb +10 -1
- data/tests/test_bgp_af.rb +395 -728
- data/tests/test_bgp_neighbor.rb +274 -115
- data/tests/test_bgp_neighbor_af.rb +178 -77
- data/tests/test_bridge_domain.rb +191 -0
- data/tests/test_bridge_domain_vni.rb +116 -0
- data/tests/test_client_utils.rb +111 -0
- data/tests/test_command_config.rb +9 -5
- data/tests/test_command_reference.rb +380 -102
- data/tests/test_dns_domain.rb +13 -3
- data/tests/test_domain_name.rb +13 -3
- data/tests/test_encapsulation.rb +77 -0
- data/tests/test_evpn_vni.rb +25 -7
- data/tests/test_fabricpath_global.rb +167 -163
- data/tests/test_fabricpath_topology.rb +12 -33
- data/tests/test_feature.rb +215 -0
- data/tests/test_grpc.rb +166 -0
- data/tests/test_interface.rb +585 -344
- data/tests/test_interface_bdi.rb +80 -0
- data/tests/test_interface_channel_group.rb +6 -3
- data/tests/test_interface_ospf.rb +26 -24
- data/tests/test_interface_portchannel.rb +1 -0
- data/tests/test_interface_private_vlan.rb +724 -0
- data/tests/test_interface_service_vni.rb +37 -66
- data/tests/test_interface_svi.rb +98 -101
- data/tests/test_interface_switchport.rb +419 -549
- 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 +298 -0
- data/tests/test_logger.rb +43 -0
- data/tests/test_name_server.rb +11 -2
- data/tests/test_node.rb +16 -75
- data/tests/test_node_ext.rb +174 -163
- data/tests/test_node_util.rb +119 -0
- data/tests/test_ntp_config.rb +5 -1
- data/tests/test_ntp_server.rb +2 -2
- data/tests/test_nxapi.rb +221 -0
- data/tests/test_overlay_global.rb +47 -38
- data/tests/test_pim.rb +2 -0
- data/tests/test_pim_group_list.rb +2 -0
- data/tests/test_pim_rp_address.rb +2 -0
- data/tests/test_platform.rb +86 -39
- data/tests/test_portchannel_global.rb +211 -135
- data/tests/test_radius_global.rb +13 -5
- data/tests/test_radius_server.rb +256 -104
- data/tests/test_radius_server_group.rb +2 -0
- data/tests/test_router_bgp.rb +781 -485
- data/tests/test_router_ospf.rb +26 -103
- data/tests/test_router_ospf_vrf.rb +52 -57
- data/tests/test_snmp_notification_receiver.rb +2 -0
- data/tests/test_snmpcommunity.rb +2 -0
- data/tests/test_snmpgroup.rb +2 -0
- data/tests/test_snmpnotification.rb +40 -21
- data/tests/test_snmpserver.rb +2 -0
- data/tests/test_snmpuser.rb +2 -0
- data/tests/test_stp_global.rb +563 -0
- data/tests/test_syslog_server.rb +32 -8
- data/tests/test_syslog_settings.rb +22 -9
- data/tests/test_tacacs_server.rb +32 -27
- data/tests/test_tacacs_server_group.rb +100 -45
- data/tests/test_tacacs_server_host.rb +135 -43
- data/tests/test_vdc.rb +2 -16
- data/tests/test_vlan.rb +106 -54
- data/tests/test_vlan_mt_full.rb +11 -21
- data/tests/test_vlan_private.rb +669 -0
- data/tests/test_vpc.rb +312 -159
- data/tests/test_vrf.rb +122 -113
- data/tests/test_vrf_af.rb +238 -0
- data/tests/test_vtp.rb +58 -102
- data/tests/test_vxlan_vtep.rb +38 -17
- data/tests/test_vxlan_vtep_vni.rb +61 -9
- data/tests/test_yum.rb +49 -25
- metadata +122 -36
- data/lib/cisco_node_utils/cmd_ref/fex.yaml +0 -9
- data/lib/cisco_node_utils/cmd_ref/vni.yaml +0 -76
- data/lib/cisco_node_utils/vni.rb +0 -227
- data/tests/test_vni.rb +0 -106
|
@@ -25,7 +25,7 @@ module Cisco
|
|
|
25
25
|
class RadiusServer < NodeUtil
|
|
26
26
|
attr_reader :name
|
|
27
27
|
|
|
28
|
-
def initialize(name, instantiate=true)
|
|
28
|
+
def initialize(name, instantiate=true, auth_p=nil, acct_p=nil)
|
|
29
29
|
unless name =~ /^[a-zA-Z0-9\.\:]*$/
|
|
30
30
|
fail ArgumentError,
|
|
31
31
|
'Invalid value (IPv4/IPv6 address contains invalid characters)'
|
|
@@ -39,7 +39,37 @@ module Cisco
|
|
|
39
39
|
end
|
|
40
40
|
@name = name
|
|
41
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
|
+
|
|
42
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
|
|
43
73
|
end
|
|
44
74
|
|
|
45
75
|
def self.radiusservers
|
|
@@ -48,24 +78,65 @@ module Cisco
|
|
|
48
78
|
radiusservers_list = config_get('radius_server', 'hosts')
|
|
49
79
|
return hash if radiusservers_list.empty?
|
|
50
80
|
radiusservers_list.each do |id|
|
|
51
|
-
|
|
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
|
|
52
94
|
end
|
|
53
95
|
|
|
54
96
|
hash
|
|
55
97
|
end
|
|
56
98
|
|
|
57
99
|
def create
|
|
100
|
+
destroy if platform == :ios_xr
|
|
58
101
|
config_set('radius_server',
|
|
59
102
|
'hosts',
|
|
60
|
-
state:
|
|
61
|
-
ip:
|
|
103
|
+
state: '',
|
|
104
|
+
ip: @name,
|
|
105
|
+
auth_port: @auth_port,
|
|
106
|
+
acct_port: @acct_port)
|
|
62
107
|
end
|
|
63
108
|
|
|
64
109
|
def destroy
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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
|
|
69
140
|
end
|
|
70
141
|
|
|
71
142
|
def ==(other)
|
|
@@ -73,7 +144,8 @@ module Cisco
|
|
|
73
144
|
end
|
|
74
145
|
|
|
75
146
|
def auth_port
|
|
76
|
-
config_get('radius_server',
|
|
147
|
+
platform == :ios_xr ? @auth_port : config_get('radius_server',
|
|
148
|
+
'auth-port', ip: @name)
|
|
77
149
|
end
|
|
78
150
|
|
|
79
151
|
def default_auth_port
|
|
@@ -81,6 +153,10 @@ module Cisco
|
|
|
81
153
|
end
|
|
82
154
|
|
|
83
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
|
+
|
|
84
160
|
unless val.nil?
|
|
85
161
|
fail ArgumentError, 'auth_port must be an Integer' \
|
|
86
162
|
unless val.is_a?(Integer)
|
|
@@ -102,7 +178,8 @@ module Cisco
|
|
|
102
178
|
end
|
|
103
179
|
|
|
104
180
|
def acct_port
|
|
105
|
-
config_get('radius_server',
|
|
181
|
+
platform == :ios_xr ? @acct_port : config_get('radius_server',
|
|
182
|
+
'acct-port', ip: @name)
|
|
106
183
|
end
|
|
107
184
|
|
|
108
185
|
def default_acct_port
|
|
@@ -110,6 +187,10 @@ module Cisco
|
|
|
110
187
|
end
|
|
111
188
|
|
|
112
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
|
+
|
|
113
194
|
unless val.nil?
|
|
114
195
|
fail ArgumentError, 'acct_port must be an Integer' \
|
|
115
196
|
unless val.is_a?(Integer)
|
|
@@ -131,7 +212,15 @@ module Cisco
|
|
|
131
212
|
end
|
|
132
213
|
|
|
133
214
|
def timeout
|
|
134
|
-
config_get('radius_server',
|
|
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
|
|
135
224
|
end
|
|
136
225
|
|
|
137
226
|
def default_timeout
|
|
@@ -145,22 +234,34 @@ module Cisco
|
|
|
145
234
|
end
|
|
146
235
|
|
|
147
236
|
if val.nil?
|
|
237
|
+
return if timeout.nil?
|
|
148
238
|
config_set('radius_server',
|
|
149
239
|
'timeout',
|
|
150
|
-
state:
|
|
151
|
-
ip:
|
|
152
|
-
|
|
240
|
+
state: 'no',
|
|
241
|
+
ip: @name,
|
|
242
|
+
auth_port: @auth_port,
|
|
243
|
+
acct_port: @acct_port,
|
|
244
|
+
timeout: timeout)
|
|
153
245
|
else
|
|
154
246
|
config_set('radius_server',
|
|
155
247
|
'timeout',
|
|
156
|
-
state:
|
|
157
|
-
ip:
|
|
158
|
-
|
|
248
|
+
state: '',
|
|
249
|
+
ip: @name,
|
|
250
|
+
auth_port: @auth_port,
|
|
251
|
+
acct_port: @acct_port,
|
|
252
|
+
timeout: val)
|
|
159
253
|
end
|
|
160
254
|
end
|
|
161
255
|
|
|
162
256
|
def retransmit_count
|
|
163
|
-
config_get('radius_server',
|
|
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
|
|
164
265
|
end
|
|
165
266
|
|
|
166
267
|
def default_retransmit_count
|
|
@@ -174,22 +275,28 @@ module Cisco
|
|
|
174
275
|
end
|
|
175
276
|
|
|
176
277
|
if val.nil?
|
|
278
|
+
return if retransmit_count.nil?
|
|
177
279
|
config_set('radius_server',
|
|
178
280
|
'retransmit',
|
|
179
|
-
state:
|
|
180
|
-
ip:
|
|
181
|
-
|
|
281
|
+
state: 'no',
|
|
282
|
+
ip: @name,
|
|
283
|
+
auth_port: @auth_port,
|
|
284
|
+
acct_port: @acct_port,
|
|
285
|
+
count: retransmit_count)
|
|
182
286
|
else
|
|
183
287
|
config_set('radius_server',
|
|
184
288
|
'retransmit',
|
|
185
|
-
state:
|
|
186
|
-
ip:
|
|
187
|
-
|
|
289
|
+
state: '',
|
|
290
|
+
ip: @name,
|
|
291
|
+
auth_port: @auth_port,
|
|
292
|
+
acct_port: @acct_port,
|
|
293
|
+
count: val)
|
|
188
294
|
end
|
|
189
295
|
end
|
|
190
296
|
|
|
191
297
|
def accounting
|
|
192
|
-
|
|
298
|
+
return nil if platform == :ios_xr
|
|
299
|
+
val = config_get('radius_server', 'accounting', ip: @name)
|
|
193
300
|
if val.nil?
|
|
194
301
|
false
|
|
195
302
|
else
|
|
@@ -216,7 +323,8 @@ module Cisco
|
|
|
216
323
|
end
|
|
217
324
|
|
|
218
325
|
def authentication
|
|
219
|
-
|
|
326
|
+
return nil if platform == :ios_xr
|
|
327
|
+
val = config_get('radius_server', 'authentication', ip: @name)
|
|
220
328
|
if val.nil?
|
|
221
329
|
false
|
|
222
330
|
else
|
|
@@ -243,11 +351,25 @@ module Cisco
|
|
|
243
351
|
end
|
|
244
352
|
|
|
245
353
|
def key_format
|
|
246
|
-
config_get('radius_server',
|
|
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
|
|
247
362
|
end
|
|
248
363
|
|
|
249
364
|
def key
|
|
250
|
-
config_get('radius_server',
|
|
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
|
+
val
|
|
251
373
|
end
|
|
252
374
|
|
|
253
375
|
def key_set(value, format)
|
|
@@ -261,24 +383,33 @@ module Cisco
|
|
|
261
383
|
unless format.is_a?(Integer)
|
|
262
384
|
end
|
|
263
385
|
|
|
386
|
+
# Return as we don't need to do anything
|
|
387
|
+
return if value.nil? && key.nil?
|
|
388
|
+
|
|
264
389
|
if value.nil? && !key.nil?
|
|
265
390
|
config_set('radius_server',
|
|
266
391
|
'key',
|
|
267
|
-
state:
|
|
268
|
-
ip:
|
|
269
|
-
|
|
392
|
+
state: 'no',
|
|
393
|
+
ip: @name,
|
|
394
|
+
auth_port: @auth_port,
|
|
395
|
+
acct_port: @acct_port,
|
|
396
|
+
key: "#{key_format} #{key}")
|
|
270
397
|
elsif !format.nil?
|
|
271
398
|
config_set('radius_server',
|
|
272
399
|
'key',
|
|
273
|
-
state:
|
|
274
|
-
ip:
|
|
275
|
-
|
|
400
|
+
state: '',
|
|
401
|
+
ip: @name,
|
|
402
|
+
auth_port: @auth_port,
|
|
403
|
+
acct_port: @acct_port,
|
|
404
|
+
key: "#{format} #{value}")
|
|
276
405
|
else
|
|
277
406
|
config_set('radius_server',
|
|
278
407
|
'key',
|
|
279
|
-
state:
|
|
280
|
-
ip:
|
|
281
|
-
|
|
408
|
+
state: '',
|
|
409
|
+
ip: @name,
|
|
410
|
+
auth_port: @auth_port,
|
|
411
|
+
acct_port: @acct_port,
|
|
412
|
+
key: "#{value}")
|
|
282
413
|
end
|
|
283
414
|
end
|
|
284
415
|
end # class
|
|
@@ -44,49 +44,34 @@ module Cisco
|
|
|
44
44
|
return {}
|
|
45
45
|
end
|
|
46
46
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
raise unless e.clierror =~ /Syntax error/
|
|
53
|
-
return false
|
|
47
|
+
# Create one router ospf instance
|
|
48
|
+
def create
|
|
49
|
+
Feature.ospf_enable
|
|
50
|
+
config_set('ospf', 'router', state: '', name: @name)
|
|
51
|
+
wait_for_process_initialized
|
|
54
52
|
end
|
|
55
53
|
|
|
56
|
-
|
|
57
|
-
|
|
54
|
+
# Destroy one router ospf instance
|
|
55
|
+
def destroy
|
|
56
|
+
config_set('ospf', 'router', state: 'no', name: @name)
|
|
58
57
|
end
|
|
59
58
|
|
|
60
|
-
def
|
|
61
|
-
|
|
59
|
+
def process_initialized?
|
|
60
|
+
!config_get('ospf', 'process_initialized')
|
|
62
61
|
end
|
|
63
62
|
|
|
64
|
-
def
|
|
65
|
-
|
|
66
|
-
ospf_router(name)
|
|
67
|
-
end
|
|
63
|
+
def wait_for_process_initialized
|
|
64
|
+
return unless node.product_id[/N(5|6)/]
|
|
68
65
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
66
|
+
# Hack for slow-start platforms which will have setter failures if the
|
|
67
|
+
# ospf instance is still initializing. To see this problem in a sandbox
|
|
68
|
+
# or even the cli do 'router ospf 1 ; router ospf 1 ; shutdown'.
|
|
69
|
+
4.times do
|
|
70
|
+
return if process_initialized?
|
|
71
|
+
sleep 1
|
|
72
|
+
node.cache_flush
|
|
75
73
|
end
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
# Destroy one router ospf instance
|
|
79
|
-
def destroy
|
|
80
|
-
ospf_ids = config_get('ospf', 'router')
|
|
81
|
-
return if ospf_ids.nil?
|
|
82
|
-
if ospf_ids.size == 1
|
|
83
|
-
RouterOspf.enable('no')
|
|
84
|
-
else
|
|
85
|
-
ospf_router(name, 'no')
|
|
86
|
-
end
|
|
87
|
-
rescue Cisco::CliError => e
|
|
88
|
-
# cmd will syntax reject when feature is not enabled
|
|
89
|
-
raise unless e.clierror =~ /Syntax error/
|
|
74
|
+
fail 'OSPF process is not initialized yet'
|
|
90
75
|
end
|
|
91
76
|
end
|
|
92
77
|
end
|
|
@@ -155,13 +155,13 @@ module Cisco
|
|
|
155
155
|
config_get('ospf', 'router_id', @get_args)
|
|
156
156
|
end
|
|
157
157
|
|
|
158
|
-
def router_id=(
|
|
159
|
-
if
|
|
158
|
+
def router_id=(rid)
|
|
159
|
+
if rid == default_router_id
|
|
160
160
|
@set_args[:state] = 'no'
|
|
161
|
-
@set_args[:router_id] =
|
|
161
|
+
@set_args[:router_id] = router_id
|
|
162
162
|
else
|
|
163
163
|
@set_args[:state] = ''
|
|
164
|
-
@set_args[:router_id] =
|
|
164
|
+
@set_args[:router_id] = rid
|
|
165
165
|
end
|
|
166
166
|
|
|
167
167
|
config_set('ospf', 'router_id', @set_args)
|
|
@@ -24,12 +24,7 @@ module Cisco
|
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
def aaa_user_cache_timeout=(timeout)
|
|
27
|
-
|
|
28
|
-
config_set('snmp_server', 'aaa_user_cache_timeout', 'no',
|
|
29
|
-
aaa_user_cache_timeout)
|
|
30
|
-
else
|
|
31
|
-
config_set('snmp_server', 'aaa_user_cache_timeout', '', timeout)
|
|
32
|
-
end
|
|
27
|
+
config_set('snmp_server', 'aaa_user_cache_timeout', '', timeout)
|
|
33
28
|
end
|
|
34
29
|
|
|
35
30
|
def default_aaa_user_cache_timeout
|
|
@@ -222,7 +222,7 @@ module Cisco
|
|
|
222
222
|
current_pw = auth_password
|
|
223
223
|
if current_pw.nil?
|
|
224
224
|
fail "SNMP user #{@name} #{@engine_id} has auth #{auth_protocol} " \
|
|
225
|
-
"but no password?\n" + @@node.
|
|
225
|
+
"but no password?\n" + @@node.get(command: 'show run snmp all')
|
|
226
226
|
end
|
|
227
227
|
|
|
228
228
|
if is_localized
|
|
@@ -242,7 +242,8 @@ module Cisco
|
|
|
242
242
|
hashed_pw = SnmpUser.auth_password('dummy_user', @engine_id)
|
|
243
243
|
if hashed_pw.nil?
|
|
244
244
|
fail "SNMP dummy user #{dummy_user} #{@engine_id} was configured " \
|
|
245
|
-
"but password is missing?\n"
|
|
245
|
+
"but password is missing?\n" \
|
|
246
|
+
+ @@node.get(command: 'show run snmp all')
|
|
246
247
|
end
|
|
247
248
|
|
|
248
249
|
# Delete dummy user
|
|
@@ -267,7 +268,7 @@ module Cisco
|
|
|
267
268
|
current_pw = priv_password
|
|
268
269
|
if current_pw.nil?
|
|
269
270
|
fail "SNMP user #{@name} #{@engine_id} has priv #{priv_protocol} " \
|
|
270
|
-
"but no password?\n" + @@node.
|
|
271
|
+
"but no password?\n" + @@node.get(command: 'show run snmp all')
|
|
271
272
|
end
|
|
272
273
|
|
|
273
274
|
if is_localized
|
|
@@ -289,7 +290,8 @@ module Cisco
|
|
|
289
290
|
hashed_pw = SnmpUser.priv_password('dummy_user', @engine_id)
|
|
290
291
|
if hashed_pw.nil?
|
|
291
292
|
fail "SNMP dummy user #{dummy_user} #{@engine_id} was configured " \
|
|
292
|
-
"but password is missing?\n"
|
|
293
|
+
"but password is missing?\n" \
|
|
294
|
+
+ @@node.get(command: 'show run snmp all')
|
|
293
295
|
end
|
|
294
296
|
|
|
295
297
|
# Delete dummy user
|