cisco_node_utils 1.6.0 → 1.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +60 -1
- data/Gemfile +1 -1
- data/LICENSE +1 -1
- data/README.md +1 -1
- data/cisco_node_utils.gemspec +1 -1
- data/docs/README-develop-node-utils-APIs.md +2 -0
- data/docs/README-maintainers.md +45 -80
- data/lib/cisco_node_utils/ace.rb +24 -43
- data/lib/cisco_node_utils/bfd_global.rb +1 -0
- data/lib/cisco_node_utils/bgp_af_aggr_addr.rb +207 -0
- data/lib/cisco_node_utils/bgp_neighbor.rb +8 -5
- data/lib/cisco_node_utils/bgp_neighbor_af.rb +8 -6
- data/lib/cisco_node_utils/cisco_cmn_utils.rb +40 -0
- data/lib/cisco_node_utils/cmd_ref/bfd_global.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/bgp.yaml +8 -4
- data/lib/cisco_node_utils/cmd_ref/bgp_af_aa.yaml +38 -0
- data/lib/cisco_node_utils/cmd_ref/bgp_neighbor.yaml +9 -4
- data/lib/cisco_node_utils/cmd_ref/bgp_neighbor_af.yaml +8 -3
- data/lib/cisco_node_utils/cmd_ref/dhcp_relay_global.yaml +2 -1
- data/lib/cisco_node_utils/cmd_ref/feature.yaml +5 -0
- data/lib/cisco_node_utils/cmd_ref/interface.yaml +8 -0
- data/lib/cisco_node_utils/cmd_ref/interface_channel_group.yaml +7 -3
- data/lib/cisco_node_utils/cmd_ref/inventory.yaml +3 -3
- data/lib/cisco_node_utils/cmd_ref/ntp_auth_key.yaml +10 -0
- data/lib/cisco_node_utils/cmd_ref/ntp_config.yaml +13 -0
- data/lib/cisco_node_utils/cmd_ref/ntp_server.yaml +10 -2
- data/lib/cisco_node_utils/cmd_ref/overlay_global.yaml +6 -1
- data/lib/cisco_node_utils/cmd_ref/route_map.yaml +8 -0
- data/lib/cisco_node_utils/cmd_ref/span_session.yaml +65 -0
- data/lib/cisco_node_utils/cmd_ref/stp_global.yaml +2 -1
- data/lib/cisco_node_utils/cmd_ref/vpc.yaml +22 -3
- data/lib/cisco_node_utils/cmd_ref/vxlan_vtep.yaml +2 -1
- data/lib/cisco_node_utils/cmd_ref/vxlan_vtep_vni.yaml +6 -3
- data/lib/cisco_node_utils/cmd_ref/yum.yaml +48 -4
- data/lib/cisco_node_utils/command_reference.rb +5 -2
- data/lib/cisco_node_utils/feature.rb +14 -1
- data/lib/cisco_node_utils/interface.rb +13 -0
- data/lib/cisco_node_utils/interface_channel_group.rb +33 -25
- data/lib/cisco_node_utils/itd_device_group.rb +17 -37
- data/lib/cisco_node_utils/itd_service.rb +9 -32
- data/lib/cisco_node_utils/node.rb +12 -4
- data/lib/cisco_node_utils/ntp_auth_key.rb +67 -0
- data/lib/cisco_node_utils/ntp_config.rb +19 -1
- data/lib/cisco_node_utils/ntp_server.rb +28 -27
- data/lib/cisco_node_utils/route_map.rb +33 -51
- data/lib/cisco_node_utils/snmpuser.rb +2 -2
- data/lib/cisco_node_utils/span_session.rb +149 -0
- data/lib/cisco_node_utils/upgrade.rb +21 -17
- data/lib/cisco_node_utils/version.rb +2 -2
- data/lib/cisco_node_utils/vlan.rb +1 -1
- data/lib/cisco_node_utils/vpc.rb +40 -0
- data/lib/cisco_node_utils/yum.rb +136 -13
- data/spec/schema.yaml +2 -0
- data/tests/ciscotest.rb +36 -0
- data/tests/test_ace.rb +6 -0
- data/tests/test_bfd_global.rb +1 -7
- data/tests/test_bgp_af.rb +2 -2
- data/tests/test_bgp_af_aa.rb +108 -0
- data/tests/test_bgp_neighbor.rb +2 -1
- data/tests/test_bgp_neighbor_af.rb +6 -6
- data/tests/test_dhcp_relay_global.rb +1 -0
- data/tests/test_interface.rb +18 -2
- data/tests/test_interface_channel_group.rb +47 -0
- data/tests/test_interface_svi.rb +1 -1
- data/tests/test_ntp_auth_key.rb +77 -0
- data/tests/test_ntp_config.rb +51 -4
- data/tests/test_ntp_server.rb +69 -9
- data/tests/test_overlay_global.rb +1 -0
- data/tests/test_route_map.rb +13 -24
- data/tests/test_router_bgp.rb +14 -9
- data/tests/test_span_session.rb +155 -0
- data/tests/test_stp_global.rb +1 -0
- data/tests/test_upgrade.rb +2 -3
- data/tests/test_vlan.rb +24 -3
- data/tests/test_vlan_private.rb +1 -1
- data/tests/test_vpc.rb +42 -17
- data/tests/test_vxlan_vtep.rb +1 -0
- data/tests/test_vxlan_vtep_vni.rb +5 -1
- data/tests/test_yum.rb +7 -30
- data/tests/yum_package.yaml +20 -0
- metadata +13 -3
@@ -207,12 +207,14 @@ match_mac_list:
|
|
207
207
|
default_value: []
|
208
208
|
|
209
209
|
match_metric:
|
210
|
+
os_version: 'N9k-F:7.0.3.F2.1'
|
210
211
|
get_value: '/^match metric (.*)$/'
|
211
212
|
set_value: "<state> match metric <metric>"
|
212
213
|
default_value: []
|
213
214
|
|
214
215
|
match_ospf_area:
|
215
216
|
_exclude: [N5k, N6k, N7k, N9k-F]
|
217
|
+
os_version: 'N3k, N9k:7.0.3.I5.1'
|
216
218
|
get_value: '/^match ospf-area (.*)$/'
|
217
219
|
set_value: "<state> match ospf-area <area>"
|
218
220
|
default_value: []
|
@@ -303,6 +305,7 @@ set_comm_list:
|
|
303
305
|
default_value: false
|
304
306
|
|
305
307
|
set_community:
|
308
|
+
os_version: 'N9k:7.0.3.I5.1'
|
306
309
|
get_value: '/^set community(?:\s+.*)?$/'
|
307
310
|
set_value: "<state> set community <string>"
|
308
311
|
|
@@ -363,6 +366,7 @@ set_extcomm_list:
|
|
363
366
|
default_value: false
|
364
367
|
|
365
368
|
set_extcommunity_4bytes:
|
369
|
+
os_version: 'N9k-F:7.0.3.F2.1'
|
366
370
|
get_value: '/^set extcommunity 4byteas-generic (.*)$/'
|
367
371
|
set_value: "<state> set extcommunity 4byteas-generic <string>"
|
368
372
|
|
@@ -438,6 +442,7 @@ set_ipv4_next_hop:
|
|
438
442
|
|
439
443
|
set_ipv4_next_hop_load_share:
|
440
444
|
_exclude: [N5k, N6k]
|
445
|
+
os_version: 'N9k-F:7.0.3.F2.1; N9k:7.0.3.I5.1'
|
441
446
|
default_value: false
|
442
447
|
|
443
448
|
set_ipv4_next_hop_peer_addr:
|
@@ -448,6 +453,7 @@ set_ipv4_next_hop_peer_addr:
|
|
448
453
|
|
449
454
|
set_ipv4_next_hop_redist:
|
450
455
|
kind: boolean
|
456
|
+
os_version: 'N3k, N9k:7.0.3.I5.1'
|
451
457
|
get_value: '/^set ip next-hop redist-unchanged$/'
|
452
458
|
set_value: "<state> set ip next-hop redist-unchanged"
|
453
459
|
default_value: false
|
@@ -487,6 +493,7 @@ set_ipv6_next_hop:
|
|
487
493
|
|
488
494
|
set_ipv6_next_hop_load_share:
|
489
495
|
_exclude: [N5k, N6k]
|
496
|
+
os_version: 'N9k-F:7.0.3.F2.1; N9k:7.0.3.I5.1'
|
490
497
|
default_value: false
|
491
498
|
|
492
499
|
set_ipv6_next_hop_peer_addr:
|
@@ -497,6 +504,7 @@ set_ipv6_next_hop_peer_addr:
|
|
497
504
|
|
498
505
|
set_ipv6_next_hop_redist:
|
499
506
|
kind: boolean
|
507
|
+
os_version: 'N3k, N9k:7.0.3.I5.1'
|
500
508
|
get_value: '/^set ipv6 next-hop redist-unchanged$/'
|
501
509
|
set_value: "<state> set ipv6 next-hop redist-unchanged"
|
502
510
|
default_value: false
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# SPAN session
|
2
|
+
---
|
3
|
+
_exclude: [N5k, N6k, N7k]
|
4
|
+
|
5
|
+
_template:
|
6
|
+
get_command: "show running monitor all"
|
7
|
+
get_context: ["monitor session <id>(?: .*)?"]
|
8
|
+
set_context: ["monitor session <id>"]
|
9
|
+
|
10
|
+
all_sessions:
|
11
|
+
multiple:
|
12
|
+
get_context: ~
|
13
|
+
get_value: '/^monitor session (\d+)/'
|
14
|
+
|
15
|
+
create:
|
16
|
+
set_context: ~
|
17
|
+
set_value: 'monitor session <id>'
|
18
|
+
|
19
|
+
description:
|
20
|
+
kind: string
|
21
|
+
get_value: '/^description (.*)/'
|
22
|
+
set_value: '<state> description <description>'
|
23
|
+
default_value: ''
|
24
|
+
|
25
|
+
destination:
|
26
|
+
kind: string
|
27
|
+
get_value: '/^destination interface (\S+)$/'
|
28
|
+
set_value: '<state> destination interface <intf_name>'
|
29
|
+
|
30
|
+
destroy:
|
31
|
+
set_context: ~
|
32
|
+
set_value: 'no monitor session <id>'
|
33
|
+
|
34
|
+
session_id:
|
35
|
+
kind: int
|
36
|
+
default_value: false
|
37
|
+
get_context: ~
|
38
|
+
get_value: '/^monitor session (\d+)/'
|
39
|
+
set_context: ~
|
40
|
+
set_value: '<state> monitor session <id> <type> <val>'
|
41
|
+
|
42
|
+
shutdown:
|
43
|
+
kind: boolean
|
44
|
+
default_value: true
|
45
|
+
get_value: '/^no shut$/'
|
46
|
+
set_value: '<state> shut'
|
47
|
+
|
48
|
+
source_interfaces:
|
49
|
+
multiple:
|
50
|
+
get_value: '/^source interface (\S+) (\w+)$/'
|
51
|
+
set_value: '<state> source interface <int_name> <direction>'
|
52
|
+
default_value: []
|
53
|
+
|
54
|
+
source_vlans:
|
55
|
+
get_value: '/^source vlan (\S+) (\w+)$/'
|
56
|
+
set_value: '<state> source vlan <vlans> <direction>'
|
57
|
+
default_value: []
|
58
|
+
|
59
|
+
type:
|
60
|
+
kind: string
|
61
|
+
default_value: 'local'
|
62
|
+
get_context: ~
|
63
|
+
get_value: '/^monitor session \d+ type (\S+)$/'
|
64
|
+
set_context: ~
|
65
|
+
set_value: 'monitor session <id> type <type>'
|
@@ -7,6 +7,12 @@ _template:
|
|
7
7
|
get_context: ['/^vpc domain\s*(\d+)$/']
|
8
8
|
set_context: ['vpc domain <domain>']
|
9
9
|
|
10
|
+
arp_synchronize:
|
11
|
+
kind: boolean
|
12
|
+
default_value: false
|
13
|
+
get_value: '/^ip arp synchronize/'
|
14
|
+
set_value: "<state> ip arp synchronize"
|
15
|
+
|
10
16
|
auto_recovery:
|
11
17
|
kind: boolean
|
12
18
|
_exclude: [N5k, N6k]
|
@@ -89,12 +95,19 @@ graceful_consistency_check:
|
|
89
95
|
default_value: true
|
90
96
|
|
91
97
|
layer3_peer_routing:
|
98
|
+
os_version: 'N3k, N9k:7.0.3.I6.1'
|
92
99
|
kind: boolean
|
93
|
-
_exclude: [N3k, N9k-F, N9k]
|
94
100
|
get_value: '/^layer3 peer-router$/'
|
95
101
|
set_value: "<state> layer3 peer-router"
|
96
102
|
default_value: false
|
97
103
|
|
104
|
+
nd_synchronize:
|
105
|
+
kind: boolean
|
106
|
+
set_context: ['terminal dont-ask', 'vpc domain <domain>']
|
107
|
+
get_value: '/^ipv6 nd synchronize/'
|
108
|
+
set_value: "<state> ipv6 nd synchronize"
|
109
|
+
default_value: false
|
110
|
+
|
98
111
|
peer_gateway:
|
99
112
|
kind: boolean
|
100
113
|
set_context: ['terminal dont-ask', 'vpc domain <domain>']
|
@@ -160,6 +173,13 @@ peer_keepalive_vrf:
|
|
160
173
|
get_value: '/^peer-keepalive .*vrf (\S+)/'
|
161
174
|
default_value: 'management'
|
162
175
|
|
176
|
+
peer_switch:
|
177
|
+
kind: boolean
|
178
|
+
set_context: ['terminal dont-ask', 'vpc domain <domain>']
|
179
|
+
get_value: '/^peer-switch/'
|
180
|
+
set_value: "<state> peer-switch"
|
181
|
+
default_value: false
|
182
|
+
|
163
183
|
phy_port_vpc_module_pids:
|
164
184
|
_exclude: [N3k, N5k, N6k, N9k-F, N9k]
|
165
185
|
default_only: 'N7[K7]-(?:F2|F3|F4|M3)'
|
@@ -186,8 +206,8 @@ self_isolation:
|
|
186
206
|
default_value: false
|
187
207
|
|
188
208
|
shutdown:
|
209
|
+
os_version: 'N3k, N9k:7.0.3.I6.1'
|
189
210
|
kind: boolean
|
190
|
-
_exclude: [N3k, N9k-F, N9k]
|
191
211
|
get_value: '/^shutdown/'
|
192
212
|
set_value: "<state> shutdown"
|
193
213
|
default_value: false
|
@@ -211,4 +231,3 @@ track:
|
|
211
231
|
get_value: '/^track\s+(\d+)/'
|
212
232
|
set_value: "<state> track <val>"
|
213
233
|
default_value: 0
|
214
|
-
|
@@ -50,7 +50,8 @@ source_intf:
|
|
50
50
|
default_value: ''
|
51
51
|
|
52
52
|
source_intf_hold_down_time:
|
53
|
-
_exclude: [N5k, N6k
|
53
|
+
_exclude: [N5k, N6k]
|
54
|
+
os_version: 'N7k:8.1.1'
|
54
55
|
kind: int
|
55
56
|
get_value: '/^source-interface hold-down-time (\d+)$/'
|
56
57
|
set_value: '<state> source-interface hold-down-time <time>'
|
@@ -16,7 +16,8 @@ all_vnis:
|
|
16
16
|
get_value: '/^member vni (\d+|\d+-\d+) ?(associate-vrf)?$/'
|
17
17
|
|
18
18
|
ingress_replication:
|
19
|
-
_exclude: [N5k, N6k
|
19
|
+
_exclude: [N5k, N6k]
|
20
|
+
os_version: 'N7k:8.1.1'
|
20
21
|
kind: string
|
21
22
|
get_value: '/^ingress-replication protocol (\S+)$/'
|
22
23
|
set_value: '<state> ingress-replication protocol <protocol>'
|
@@ -28,7 +29,8 @@ multicast_group:
|
|
28
29
|
default_value: ''
|
29
30
|
|
30
31
|
peer_list:
|
31
|
-
_exclude: [N5k, N6k
|
32
|
+
_exclude: [N5k, N6k]
|
33
|
+
os_version: 'N7k:8.1.1'
|
32
34
|
multiple:
|
33
35
|
get_context:
|
34
36
|
- '/^interface <name>$/i'
|
@@ -49,7 +51,8 @@ suppress_arp:
|
|
49
51
|
default_value: false
|
50
52
|
|
51
53
|
suppress_uuc:
|
52
|
-
_exclude: [
|
54
|
+
_exclude: [N9k-F, N9k]
|
55
|
+
os_version: 'N7k:8.1.1'
|
53
56
|
kind: boolean
|
54
57
|
get_value: '/^suppress-unknown-unicast$/'
|
55
58
|
set_value: '<state> suppress-unknown-unicast'
|
@@ -1,12 +1,26 @@
|
|
1
1
|
# yum
|
2
2
|
---
|
3
|
-
_exclude: [ios_xr]
|
3
|
+
_exclude: [ios_xr, N5k, N6k, N7k]
|
4
|
+
|
5
|
+
activate:
|
6
|
+
set_value: "install activate <pkg>"
|
7
|
+
|
8
|
+
add:
|
9
|
+
set_value: "install add <pkg> <vrf>"
|
10
|
+
|
11
|
+
commit:
|
12
|
+
set_value: "install commit <pkg>"
|
4
13
|
|
5
14
|
deactivate:
|
6
|
-
set_value: "install deactivate
|
15
|
+
set_value: "install deactivate <pkg>"
|
7
16
|
|
8
17
|
install:
|
9
|
-
set_value: "install add
|
18
|
+
set_value: "install add <pkg> <vrf> activate"
|
19
|
+
|
20
|
+
pkg_name:
|
21
|
+
kind: string
|
22
|
+
get_command: "show install pkg-info <pkg>"
|
23
|
+
get_value: '/Name\s+:\s+(\S+)/i'
|
10
24
|
|
11
25
|
query:
|
12
26
|
multiple: true
|
@@ -14,11 +28,41 @@ query:
|
|
14
28
|
# pass in the pkg name, retrieve version
|
15
29
|
get_value: '/^%s\S*\s+(\S+)\s+(?:installed|@\S+)/'
|
16
30
|
|
31
|
+
query_activated:
|
32
|
+
kind: boolean
|
33
|
+
get_command: "show install pkg-info <pkg>"
|
34
|
+
get_value: '/Patch\s+State\s+:\s+Active/i'
|
35
|
+
|
36
|
+
query_added:
|
37
|
+
kind: boolean
|
38
|
+
get_command: "show install pkg-info <pkg>"
|
39
|
+
get_value: '/Name\s+:\s+\S+/i'
|
40
|
+
|
17
41
|
query_all:
|
18
42
|
multiple: true
|
19
43
|
get_command: "show install packages"
|
20
44
|
get_value: '/^(\S+)\s+(\S+)\s+(\S+)$/'
|
21
45
|
default_value: []
|
22
46
|
|
47
|
+
query_committed:
|
48
|
+
multiple: true
|
49
|
+
get_command: "show install committed"
|
50
|
+
get_value: '/<pkg>/'
|
51
|
+
|
52
|
+
query_inactive:
|
53
|
+
kind: boolean
|
54
|
+
get_command: "show install pkg-info <pkg>"
|
55
|
+
get_value: '/Patch\s+State\s+:\s+Inactive/i'
|
56
|
+
|
57
|
+
query_removed:
|
58
|
+
kind: boolean
|
59
|
+
get_command: "show install pkg-info <pkg>"
|
60
|
+
get_value: '/Name\s+:\s+\S+/i'
|
61
|
+
|
62
|
+
query_state:
|
63
|
+
kind: string
|
64
|
+
get_command: "show install pkg-info <pkg>"
|
65
|
+
get_value: '/Patch\s+State\s+:\s+(\S+)/i'
|
66
|
+
|
23
67
|
remove:
|
24
|
-
set_value: "install remove
|
68
|
+
set_value: "install remove <pkg> forced"
|
@@ -19,7 +19,7 @@ module Cisco
|
|
19
19
|
# Control a reference for an attribute.
|
20
20
|
class CmdRef
|
21
21
|
attr_reader :feature, :name, :hash
|
22
|
-
attr_reader :auto_default, :multiple, :kind, :default_only
|
22
|
+
attr_reader :auto_default, :multiple, :kind, :default_only, :os_version
|
23
23
|
alias_method :auto_default?, :auto_default
|
24
24
|
alias_method :default_only?, :default_only
|
25
25
|
alias_method :multiple?, :multiple
|
@@ -28,7 +28,7 @@ module Cisco
|
|
28
28
|
data_format context value
|
29
29
|
get_data_format get_command get_context get_value
|
30
30
|
set_data_format set_context set_value
|
31
|
-
auto_default multiple kind)
|
31
|
+
auto_default multiple kind os_version)
|
32
32
|
|
33
33
|
def self.keys
|
34
34
|
KEYS
|
@@ -48,6 +48,7 @@ module Cisco
|
|
48
48
|
@default_only = false
|
49
49
|
@multiple = false
|
50
50
|
@kind = nil
|
51
|
+
@os_version = nil
|
51
52
|
|
52
53
|
values_to_hash(values, file)
|
53
54
|
|
@@ -86,6 +87,8 @@ module Cisco
|
|
86
87
|
when 'kind'
|
87
88
|
fail "Unknown 'kind': '#{value}'" unless KINDS.include?(value)
|
88
89
|
@kind = value.to_sym
|
90
|
+
when 'os_version'
|
91
|
+
@os_version = value
|
89
92
|
else
|
90
93
|
# default_value overrides default_only
|
91
94
|
@default_only = false if key == 'default_value'
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# January 2016, Robert W Gries
|
2
2
|
#
|
3
|
-
# Copyright (c) 2015-
|
3
|
+
# Copyright (c) 2015-2017 Cisco and/or its affiliates.
|
4
4
|
#
|
5
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
6
|
# you may not use this file except in compliance with the License.
|
@@ -147,6 +147,19 @@ module Cisco
|
|
147
147
|
return false
|
148
148
|
end
|
149
149
|
|
150
|
+
def self.lacp_enable
|
151
|
+
return if lacp_enabled?
|
152
|
+
config_set('feature', 'lacp')
|
153
|
+
end
|
154
|
+
|
155
|
+
def self.lacp_enabled?
|
156
|
+
config_get('feature', 'lacp')
|
157
|
+
rescue Cisco::CliError => e
|
158
|
+
# cmd will syntax reject when feature is not enabled.
|
159
|
+
raise unless e.clierror =~ /Syntax error/
|
160
|
+
return false
|
161
|
+
end
|
162
|
+
|
150
163
|
# ---------------------------
|
151
164
|
def self.nv_overlay_enable
|
152
165
|
# Note: vdc platforms restrict this feature to F3 or newer linecards
|
@@ -1988,5 +1988,18 @@ module Cisco
|
|
1988
1988
|
end
|
1989
1989
|
end
|
1990
1990
|
end
|
1991
|
+
|
1992
|
+
def purge_config=(val)
|
1993
|
+
return unless val
|
1994
|
+
fail ArgumentError,
|
1995
|
+
'purge_config is only supported on Ethernet interfaces' unless
|
1996
|
+
@name[/ethernet/]
|
1997
|
+
config_set('interface', 'purge_config', name: @name) if val
|
1998
|
+
end
|
1999
|
+
|
2000
|
+
def purge_config
|
2001
|
+
state = config_get('interface', 'purge_config', name: @name)
|
2002
|
+
state.nil? ? true : false
|
2003
|
+
end
|
1991
2004
|
end # Class
|
1992
2005
|
end # Module
|
@@ -15,6 +15,7 @@
|
|
15
15
|
# limitations under the License.
|
16
16
|
|
17
17
|
require_relative 'node_util'
|
18
|
+
require_relative 'feature'
|
18
19
|
|
19
20
|
# Add some interface-specific constants to the Cisco namespace
|
20
21
|
module Cisco
|
@@ -60,39 +61,46 @@ module Cisco
|
|
60
61
|
# PROPERTIES #
|
61
62
|
########################################################
|
62
63
|
|
63
|
-
def
|
64
|
-
config_get('interface_channel_group', 'channel_group', @get_args)
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
64
|
+
def channel_group_mode
|
65
|
+
match = config_get('interface_channel_group', 'channel_group', @get_args)
|
66
|
+
return match unless match
|
67
|
+
mode = match[1].nil? ? default_channel_group_mode : match[1]
|
68
|
+
mode
|
69
|
+
end
|
70
|
+
|
71
|
+
def channel_group_mode_set(group, mode=false)
|
72
|
+
cgroup = channel_group
|
73
|
+
set_args_keys(state: 'no', group: cgroup, force: '', mode: '', val: '')
|
74
|
+
config_set('interface_channel_group', 'channel_group', @set_args) if
|
75
|
+
cgroup
|
76
|
+
return unless group
|
77
|
+
mode = false if mode && mode.to_str == 'on'
|
78
|
+
if mode
|
79
|
+
Cisco::Feature.lacp_enable
|
80
|
+
set_args_keys(state: '', group: group, force: 'force',
|
81
|
+
mode: 'mode', val: mode)
|
82
|
+
config_set('interface_channel_group', 'channel_group', @set_args)
|
78
83
|
else
|
79
|
-
state
|
80
|
-
|
84
|
+
set_args_keys(state: '', group: group, force: 'force',
|
85
|
+
mode: '', val: '')
|
86
|
+
config_set('interface_channel_group', 'channel_group', @set_args)
|
81
87
|
end
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
raise unless e.message[/the entered commands do not exist/]
|
89
|
-
raise Cisco::UnsupportedError.new('interface', 'channel_group')
|
88
|
+
end
|
89
|
+
|
90
|
+
def channel_group
|
91
|
+
match = config_get('interface_channel_group', 'channel_group', @get_args)
|
92
|
+
return match unless match
|
93
|
+
match[0].to_i
|
90
94
|
end
|
91
95
|
|
92
96
|
def default_channel_group
|
93
97
|
config_get_default('interface_channel_group', 'channel_group')
|
94
98
|
end
|
95
99
|
|
100
|
+
def default_channel_group_mode
|
101
|
+
config_get_default('interface_channel_group', 'channel_group_mode')
|
102
|
+
end
|
103
|
+
|
96
104
|
# ----------------------------
|
97
105
|
def description
|
98
106
|
config_get('interface_channel_group', 'description', @get_args)
|