cisco_node_utils 1.4.1 → 1.5.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 +30 -0
- data/README.md +8 -7
- data/docs/README-maintainers.md +0 -1
- data/lib/cisco_node_utils/aaa_authentication_login_service.rb +2 -2
- data/lib/cisco_node_utils/bgp.rb +2 -2
- data/lib/cisco_node_utils/cisco_cmn_utils.rb +16 -0
- data/lib/cisco_node_utils/client/utils.rb +7 -1
- data/lib/cisco_node_utils/cmd_ref/DEPRECATED.yaml +12 -12
- data/lib/cisco_node_utils/cmd_ref/README_YAML.md +35 -7
- data/lib/cisco_node_utils/cmd_ref/aaa_authorization_service.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/bfd_global.yaml +4 -4
- data/lib/cisco_node_utils/cmd_ref/bgp_af.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/bgp_neighbor_af.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/bridge_domain.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/bridge_domain_vni.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/dhcp_relay_global.yaml +5 -5
- data/lib/cisco_node_utils/cmd_ref/encapsulation.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/fabricpath.yaml +5 -5
- data/lib/cisco_node_utils/cmd_ref/fabricpath_topology.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/feature.yaml +8 -3
- data/lib/cisco_node_utils/cmd_ref/hsrp_global.yaml +25 -0
- data/lib/cisco_node_utils/cmd_ref/interface.yaml +65 -14
- data/lib/cisco_node_utils/cmd_ref/interface_hsrp_group.yaml +117 -0
- data/lib/cisco_node_utils/cmd_ref/interface_portchannel.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/interface_service_vni.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/inventory.yaml +4 -8
- data/lib/cisco_node_utils/cmd_ref/itd_device_group.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/itd_service.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/ospf.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/pim.yaml +6 -0
- data/lib/cisco_node_utils/cmd_ref/portchannel_global.yaml +9 -9
- data/lib/cisco_node_utils/cmd_ref/snmp_server.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/stp_global.yaml +8 -8
- data/lib/cisco_node_utils/cmd_ref/vdc.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/vlan.yaml +16 -8
- data/lib/cisco_node_utils/cmd_ref/vpc.yaml +11 -11
- data/lib/cisco_node_utils/cmd_ref/vrf.yaml +2 -1
- data/lib/cisco_node_utils/cmd_ref/vxlan_vtep.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/vxlan_vtep_vni.yaml +1 -1
- data/lib/cisco_node_utils/command_reference.rb +8 -1
- data/lib/cisco_node_utils/domain_name.rb +17 -2
- data/lib/cisco_node_utils/feature.rb +14 -0
- data/lib/cisco_node_utils/hsrp_global.rb +97 -0
- data/lib/cisco_node_utils/interface.rb +146 -0
- data/lib/cisco_node_utils/interface_hsrp_group.rb +544 -0
- data/lib/cisco_node_utils/node.rb +93 -4
- data/lib/cisco_node_utils/pim.rb +17 -0
- data/lib/cisco_node_utils/portchannel_global.rb +2 -2
- data/lib/cisco_node_utils/version.rb +1 -1
- data/lib/cisco_node_utils/vlan.rb +2 -5
- data/lib/cisco_node_utils/yum.rb +11 -6
- data/spec/schema.yaml +3 -3
- data/tests/ciscotest.rb +25 -4
- data/tests/cmd_config.yaml +0 -2
- data/tests/test_bgp_af.rb +13 -2
- data/tests/test_feature.rb +5 -0
- data/tests/test_hsrp_global.rb +79 -0
- data/tests/test_interface.rb +23 -0
- data/tests/test_interface_hsrp.rb +134 -0
- data/tests/test_interface_hsrp_group.rb +582 -0
- data/tests/test_node_ext.rb +7 -1
- data/tests/test_pim.rb +27 -3
- data/tests/test_platform.rb +1 -1
- data/tests/test_radius_global.rb +4 -5
- data/tests/test_radius_server.rb +16 -11
- data/tests/test_router_bgp.rb +11 -6
- data/tests/test_router_ospf_area.rb +6 -6
- data/tests/test_tacacs_server.rb +2 -2
- data/tests/test_tacacs_server_host.rb +2 -2
- data/tests/test_vlan.rb +14 -0
- data/tests/test_yum.rb +2 -2
- data/tests/yum_package.yaml +4 -0
- metadata +10 -3
@@ -21,6 +21,12 @@ all_ssm_ranges:
|
|
21
21
|
multiple:
|
22
22
|
get_value : '/^<afi> pim ssm range (.*)$/'
|
23
23
|
|
24
|
+
bfd:
|
25
|
+
kind: boolean
|
26
|
+
get_value: '/^<afi> pim bfd$/'
|
27
|
+
set_value: "<state> <afi> pim bfd"
|
28
|
+
default_value: false
|
29
|
+
|
24
30
|
group_list:
|
25
31
|
default_value: ~
|
26
32
|
get_value: '/^<afi> pim rp-address (\S+) group-list (\S+)/'
|
@@ -6,7 +6,7 @@ _template:
|
|
6
6
|
get_command: "show running all"
|
7
7
|
|
8
8
|
asymmetric:
|
9
|
-
_exclude: [N3k, N5k, N6k,
|
9
|
+
_exclude: [N3k, N5k, N6k, N9k-F, N9k]
|
10
10
|
default_value: false
|
11
11
|
|
12
12
|
bundle_hash:
|
@@ -15,7 +15,7 @@ bundle_hash:
|
|
15
15
|
N5k: *bundle_hash_ip
|
16
16
|
N6k: *bundle_hash_ip
|
17
17
|
N7k: *bundle_hash_ip
|
18
|
-
|
18
|
+
N9k-F: &bundle_hash_ip_l4port
|
19
19
|
default_value: 'ip-l4port'
|
20
20
|
N9k: *bundle_hash_ip_l4port
|
21
21
|
|
@@ -23,18 +23,18 @@ bundle_select:
|
|
23
23
|
default_value: 'src-dst'
|
24
24
|
|
25
25
|
concatenation:
|
26
|
-
_exclude: [N3k, N5k, N6k, N7k,
|
26
|
+
_exclude: [N3k, N5k, N6k, N7k, N9k-F]
|
27
27
|
default_value: false
|
28
28
|
|
29
29
|
hash_distribution:
|
30
|
-
_exclude: [N3k, N5k, N6k,
|
30
|
+
_exclude: [N3k, N5k, N6k, N9k-F, N9k]
|
31
31
|
get_value: '/^port.channel hash.distribution (.*)$/'
|
32
32
|
set_context: ['terminal dont-ask']
|
33
33
|
set_value: "port-channel hash-distribution %s"
|
34
34
|
default_value: 'adaptive'
|
35
35
|
|
36
36
|
hash_poly:
|
37
|
-
_exclude: [N3k, N7k,
|
37
|
+
_exclude: [N3k, N7k, N9k-F, N9k]
|
38
38
|
default_value: ~
|
39
39
|
|
40
40
|
load_balance_type:
|
@@ -46,13 +46,13 @@ load_balance_type:
|
|
46
46
|
N6k: *load_balance_type_ethernet
|
47
47
|
N7k: &load_balance_type_asymmetric
|
48
48
|
default_only: "asymmetric"
|
49
|
-
|
49
|
+
N9k-F: &load_balance_type_no_hash
|
50
50
|
default_only: "no_hash"
|
51
51
|
N9k: &load_balance_type_symmetry
|
52
52
|
default_only: "symmetry"
|
53
53
|
|
54
54
|
load_defer:
|
55
|
-
_exclude: [N3k, N5k, N6k,
|
55
|
+
_exclude: [N3k, N5k, N6k, N9k-F, N9k]
|
56
56
|
kind: int
|
57
57
|
get_value: '/^port.channel load.defer (\d+)$/'
|
58
58
|
set_value: "port-channel load-defer %s"
|
@@ -64,7 +64,7 @@ port_channel_load_balance:
|
|
64
64
|
set_value: "port-channel load-balance %s %s %s %s %s %s"
|
65
65
|
|
66
66
|
resilient:
|
67
|
-
_exclude: [N5k, N6k, N7k,
|
67
|
+
_exclude: [N5k, N6k, N7k, N9k-F]
|
68
68
|
kind: boolean
|
69
69
|
get_value: '/^port-channel load-balance resilient$/'
|
70
70
|
set_value: "%s port-channel load-balance resilient"
|
@@ -80,5 +80,5 @@ rotate:
|
|
80
80
|
default_value: 0
|
81
81
|
|
82
82
|
symmetry:
|
83
|
-
_exclude: [N5k, N6k, N7k,
|
83
|
+
_exclude: [N5k, N6k, N7k, N9k-F]
|
84
84
|
default_value: false
|
@@ -7,7 +7,7 @@ _template:
|
|
7
7
|
get_command: "show running-config spanning-tree"
|
8
8
|
|
9
9
|
bd_designated_priority:
|
10
|
-
_exclude: [N3k, N5k, N6k,
|
10
|
+
_exclude: [N3k, N5k, N6k, N9k-F, N9k]
|
11
11
|
multiple:
|
12
12
|
get_context: ['/^spanning-tree pseudo-information$/']
|
13
13
|
get_value: '/^bridge-domain (.*) designated priority (.*)$/'
|
@@ -16,40 +16,40 @@ bd_designated_priority:
|
|
16
16
|
default_value: []
|
17
17
|
|
18
18
|
bd_forward_time:
|
19
|
-
_exclude: [N3k, N5k, N6k,
|
19
|
+
_exclude: [N3k, N5k, N6k, N9k-F, N9k]
|
20
20
|
multiple:
|
21
21
|
get_value: '/^spanning-tree bridge-domain (.*) forward-time (.*)$/'
|
22
22
|
set_value: "<state> spanning-tree bridge-domain <range> forward-time <val>"
|
23
23
|
default_value: []
|
24
24
|
|
25
25
|
bd_hello_time:
|
26
|
-
_exclude: [N3k, N5k, N6k,
|
26
|
+
_exclude: [N3k, N5k, N6k, N9k-F, N9k]
|
27
27
|
multiple:
|
28
28
|
get_value: '/^spanning-tree bridge-domain (.*) hello-time (.*)$/'
|
29
29
|
set_value: "<state> spanning-tree bridge-domain <range> hello-time <val>"
|
30
30
|
default_value: []
|
31
31
|
|
32
32
|
bd_max_age:
|
33
|
-
_exclude: [N3k, N5k, N6k,
|
33
|
+
_exclude: [N3k, N5k, N6k, N9k-F, N9k]
|
34
34
|
multiple:
|
35
35
|
get_value: '/^spanning-tree bridge-domain (.*) max-age (.*)$/'
|
36
36
|
set_value: "<state> spanning-tree bridge-domain <range> max-age <val>"
|
37
37
|
default_value: []
|
38
38
|
|
39
39
|
bd_priority:
|
40
|
-
_exclude: [N3k, N5k, N6k,
|
40
|
+
_exclude: [N3k, N5k, N6k, N9k-F, N9k]
|
41
41
|
multiple:
|
42
42
|
get_value: '/^spanning-tree bridge-domain (.*) priority (.*)$/'
|
43
43
|
set_value: "<state> spanning-tree bridge-domain <range> priority <val>"
|
44
44
|
default_value: []
|
45
45
|
|
46
46
|
bd_range:
|
47
|
-
_exclude: [N3k, N5k, N6k,
|
47
|
+
_exclude: [N3k, N5k, N6k, N9k-F, N9k]
|
48
48
|
kind: string
|
49
49
|
default_only: "2-3967"
|
50
50
|
|
51
51
|
bd_root_priority:
|
52
|
-
_exclude: [N3k, N5k, N6k,
|
52
|
+
_exclude: [N3k, N5k, N6k, N9k-F, N9k]
|
53
53
|
multiple:
|
54
54
|
get_context: ['/^spanning-tree pseudo-information$/']
|
55
55
|
get_value: '/^bridge-domain (.*) root priority (.*)$/'
|
@@ -78,7 +78,7 @@ bridge_assurance:
|
|
78
78
|
default_value: true
|
79
79
|
|
80
80
|
domain:
|
81
|
-
_exclude: [N3k,
|
81
|
+
_exclude: [N3k, N9k-F, N9k]
|
82
82
|
kind: int
|
83
83
|
get_value: '/^spanning-tree domain (\d+)$/'
|
84
84
|
set_value: "<state> spanning-tree domain <domain>"
|
@@ -3,7 +3,7 @@
|
|
3
3
|
# The current simplified implementation assumes no admin-vdc and that the
|
4
4
|
# default vdc name uses id 1. Full multi-vdc support is TBD.
|
5
5
|
---
|
6
|
-
_exclude: [N3k, N5k, N6k,
|
6
|
+
_exclude: [N3k, N5k, N6k, N9k-F, N9k, ios_xr]
|
7
7
|
|
8
8
|
_template:
|
9
9
|
get_command: 'show run vdc all'
|
@@ -4,8 +4,10 @@ _exclude: [ios_xr]
|
|
4
4
|
|
5
5
|
all_vlans:
|
6
6
|
multiple: true
|
7
|
+
get_data_format: nxapi_structured
|
7
8
|
get_command: "show vlan brief"
|
8
|
-
|
9
|
+
get_context: ["TABLE_vlanbriefxbrief", "ROW_vlanbriefxbrief"]
|
10
|
+
get_value: "vlanshowbr-vlanid-utf"
|
9
11
|
|
10
12
|
create:
|
11
13
|
set_value: "vlan %s"
|
@@ -14,7 +16,7 @@ destroy:
|
|
14
16
|
set_value: "no vlan %s"
|
15
17
|
|
16
18
|
fabric_control:
|
17
|
-
_exclude: [N3k, N5k, N6k,
|
19
|
+
_exclude: [N3k, N5k, N6k, N9k-F, N9k]
|
18
20
|
kind: boolean
|
19
21
|
get_command: "show running-config vlan"
|
20
22
|
get_context: ['/^vlan <vlan>/']
|
@@ -27,7 +29,7 @@ mapped_vni:
|
|
27
29
|
_exclude: [N7k]
|
28
30
|
N3k: &mapped_vni_n3_8_9k
|
29
31
|
get_command: 'show running vlan'
|
30
|
-
|
32
|
+
N9k-F: *mapped_vni_n3_8_9k
|
31
33
|
N9k: *mapped_vni_n3_8_9k
|
32
34
|
N5k: &mapped_vni_n5_6k
|
33
35
|
get_command: 'show running vlan 1-4094'
|
@@ -48,7 +50,7 @@ mapped_vni_requires_nv_overlay:
|
|
48
50
|
default_only: false
|
49
51
|
|
50
52
|
mode:
|
51
|
-
_exclude: [N3k, N9k]
|
53
|
+
_exclude: [N3k, N9k, N9k-F]
|
52
54
|
multiple: true
|
53
55
|
get_command: "show vlan"
|
54
56
|
# TBD: 'show vlan' is problematic and should be converted to use show run
|
@@ -59,13 +61,16 @@ mode:
|
|
59
61
|
default_value: 'CE'
|
60
62
|
|
61
63
|
name:
|
64
|
+
kind: string
|
65
|
+
get_data_format: nxapi_structured
|
62
66
|
get_command: "show vlan brief"
|
63
|
-
|
67
|
+
get_context: ["TABLE_vlanbriefxbrief", "ROW_vlanbriefxbrief"]
|
68
|
+
get_value: ["vlanshowbr-vlanid-utf <vlanid>", "vlanshowbr-vlanname"]
|
64
69
|
set_context: ["vlan %d"]
|
65
70
|
set_value: "%s name %s ; end"
|
66
71
|
|
67
72
|
pvlan_association:
|
68
|
-
_exclude: [
|
73
|
+
_exclude: [N9k-F]
|
69
74
|
multiple: true
|
70
75
|
get_command: "show vlan private-vlan"
|
71
76
|
get_value: '/^<id>\s+(\d+)/'
|
@@ -74,7 +79,7 @@ pvlan_association:
|
|
74
79
|
default_value: []
|
75
80
|
|
76
81
|
pvlan_type:
|
77
|
-
_exclude: [
|
82
|
+
_exclude: [N9k-F]
|
78
83
|
kind: string
|
79
84
|
get_command: 'show vlan private-vlan type'
|
80
85
|
get_value: '/^<id>\s+(\S+)/'
|
@@ -83,8 +88,11 @@ pvlan_type:
|
|
83
88
|
default_value: ""
|
84
89
|
|
85
90
|
shutdown:
|
91
|
+
kind: boolean
|
92
|
+
get_data_format: nxapi_structured
|
86
93
|
get_command: "show vlan brief"
|
87
|
-
|
94
|
+
get_context: ["TABLE_vlanbriefxbrief", "ROW_vlanbriefxbrief"]
|
95
|
+
get_value: ["vlanshowbr-vlanid-utf <vlanid>", "vlanshowbr-shutstate", '/^shutdown$/']
|
88
96
|
set_context: ["vlan %d"]
|
89
97
|
set_value: "%s shutdown ; end"
|
90
98
|
default_value: false
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# vpc
|
2
2
|
---
|
3
|
-
_exclude: [ios_xr,
|
3
|
+
_exclude: [ios_xr, N9k-F]
|
4
4
|
|
5
5
|
_template:
|
6
6
|
get_command: 'show running-config vpc all'
|
@@ -58,7 +58,7 @@ dual_active_exclude_interface_vlan_bridge_domain:
|
|
58
58
|
default_value: 'none'
|
59
59
|
|
60
60
|
fabricpath_emulated_switch_id:
|
61
|
-
_exclude: [N3k, N5k, N6k,
|
61
|
+
_exclude: [N3k, N5k, N6k, N9k-F, N9k]
|
62
62
|
kind: int
|
63
63
|
set_context: ['terminal dont-ask', 'vpc domain <domain>']
|
64
64
|
get_value: '/^fabricpath switch-id\s+(\d+)$/'
|
@@ -66,7 +66,7 @@ fabricpath_emulated_switch_id:
|
|
66
66
|
default_value: false
|
67
67
|
|
68
68
|
fabricpath_multicast_load_balance:
|
69
|
-
_exclude: [N3k, N5k, N6k,
|
69
|
+
_exclude: [N3k, N5k, N6k, N9k-F, N9k]
|
70
70
|
kind: boolean
|
71
71
|
get_value: '/^fabricpath multicast load-balance$/'
|
72
72
|
set_value: "<state> fabricpath multicast load-balance"
|
@@ -90,7 +90,7 @@ graceful_consistency_check:
|
|
90
90
|
|
91
91
|
layer3_peer_routing:
|
92
92
|
kind: boolean
|
93
|
-
_exclude: [N3k,
|
93
|
+
_exclude: [N3k, N9k-F, N9k]
|
94
94
|
get_value: '/^layer3 peer-router$/'
|
95
95
|
set_value: "<state> layer3 peer-router"
|
96
96
|
default_value: false
|
@@ -105,14 +105,14 @@ peer_gateway:
|
|
105
105
|
# Exclude everyone for now till the BD command is fully supported
|
106
106
|
peer_gateway_exclude_bridge_domain:
|
107
107
|
kind: string
|
108
|
-
_exclude: [N3k, N5k, N6k, N7k,
|
108
|
+
_exclude: [N3k, N5k, N6k, N7k, N9k-F, N9k]
|
109
109
|
set_context: ['terminal dont-ask', 'vpc domain <domain>']
|
110
110
|
get_value: '/^peer-gateway exclude bridge-domain\s+(\S+)/'
|
111
111
|
set_value: "peer-gateway exclude-bridge-domain <range>"
|
112
112
|
default_value: ''
|
113
113
|
|
114
114
|
peer_gateway_exclude_vlan:
|
115
|
-
_exclude: [N3k,
|
115
|
+
_exclude: [N3k, N9k-F, N9k]
|
116
116
|
kind: string
|
117
117
|
set_context: ['terminal dont-ask', 'vpc domain <domain>']
|
118
118
|
get_value: '/^peer-gateway exclude-vlan\s(\S+)/'
|
@@ -161,11 +161,11 @@ peer_keepalive_vrf:
|
|
161
161
|
default_value: 'management'
|
162
162
|
|
163
163
|
phy_port_vpc_module_pids:
|
164
|
-
_exclude: [N3k, N5k, N6k,
|
164
|
+
_exclude: [N3k, N5k, N6k, N9k-F, N9k]
|
165
165
|
default_only: 'N7[K7]-(?:F2|F3|F4|M3)'
|
166
166
|
|
167
167
|
port_channel_limit:
|
168
|
-
_exclude: [N3k, N5k, N6k,
|
168
|
+
_exclude: [N3k, N5k, N6k, N9k-F, N9k]
|
169
169
|
auto_default: false
|
170
170
|
kind: boolean
|
171
171
|
get_value: '/^port-channel limit/'
|
@@ -180,14 +180,14 @@ role_priority:
|
|
180
180
|
|
181
181
|
self_isolation:
|
182
182
|
kind: boolean
|
183
|
-
_exclude: [N3k, N5k, N6k,
|
183
|
+
_exclude: [N3k, N5k, N6k, N9k-F, N9k]
|
184
184
|
get_value: '/^self-isolation/'
|
185
185
|
set_value: "<state> self-isolation"
|
186
186
|
default_value: false
|
187
187
|
|
188
188
|
shutdown:
|
189
189
|
kind: boolean
|
190
|
-
_exclude: [N3k,
|
190
|
+
_exclude: [N3k, N9k-F, N9k]
|
191
191
|
get_value: '/^shutdown/'
|
192
192
|
set_value: "<state> shutdown"
|
193
193
|
default_value: false
|
@@ -207,7 +207,7 @@ system_priority:
|
|
207
207
|
# Exclude everyone for now till the track command is fully supported
|
208
208
|
track:
|
209
209
|
kind: int
|
210
|
-
_exclude: [N3k, N5k, N6k, N7k,
|
210
|
+
_exclude: [N3k, N5k, N6k, N7k, N9k-F, N9k]
|
211
211
|
get_value: '/^track\s+(\d+)/'
|
212
212
|
set_value: "<state> track <val>"
|
213
213
|
default_value: 0
|
@@ -70,11 +70,12 @@ shutdown:
|
|
70
70
|
|
71
71
|
vni: # TBD Should this move to the vni provider as vrf_vni?
|
72
72
|
# MT-lite only
|
73
|
-
N9k:
|
73
|
+
N9k: &vni9k
|
74
74
|
kind: int
|
75
75
|
get_value: '/^vni (\d+)$/'
|
76
76
|
set_value: '<state> vni <id>'
|
77
77
|
default_value: false
|
78
|
+
N9k-F: *vni9k
|
78
79
|
|
79
80
|
vpn_id:
|
80
81
|
_exclude: [nexus]
|
@@ -434,13 +434,20 @@ module Cisco
|
|
434
434
|
puts "DEBUG: #{text}" if @@debug
|
435
435
|
end
|
436
436
|
|
437
|
-
KNOWN_PLATFORMS = %w(C3064 C3132 C3172 N3k N5k N6k N7k
|
437
|
+
KNOWN_PLATFORMS = %w(C3064 C3132 C3172 N3k N5k N6k N7k N9k N9k-F XRv9k)
|
438
438
|
|
439
439
|
def self.platform_to_filter(platform)
|
440
440
|
if KNOWN_PLATFORMS.include?(platform)
|
441
441
|
case platform
|
442
442
|
when 'XRv9k'
|
443
443
|
/XRV9/
|
444
|
+
when 'N9k'
|
445
|
+
# For non-fretta n9k platforms we need to
|
446
|
+
# match everything except the trailing -F
|
447
|
+
/^N9...(?!.*-F)/
|
448
|
+
when 'N9k-F'
|
449
|
+
# For fretta n9k we need to include the trailing -F
|
450
|
+
/^N9.*-F$/
|
444
451
|
else
|
445
452
|
Regexp.new platform.tr('k', '')
|
446
453
|
end
|
@@ -49,8 +49,23 @@ module Cisco
|
|
49
49
|
config_set('dnsclient', 'domain_name',
|
50
50
|
state: '', name: @name)
|
51
51
|
else
|
52
|
-
|
53
|
-
|
52
|
+
# On some platforms attempts to create a new domain results
|
53
|
+
# in the error. 'ERROR: Deletion of VRF test in progresswait
|
54
|
+
# for it to complete'. We handle this by trying up to 10 times
|
55
|
+
# with a 1 second delay between attempts before giving up.
|
56
|
+
tries = 10
|
57
|
+
begin
|
58
|
+
config_set('dnsclient', 'domain_name_vrf',
|
59
|
+
state: '', name: @name, vrf: @vrf)
|
60
|
+
rescue Cisco::CliError => e
|
61
|
+
if /ERROR: Deletion of VRF .* in progress/.match(e.to_s)
|
62
|
+
sleep 1
|
63
|
+
tries -= 1
|
64
|
+
# rubocop:disable Metrics/BlockNesting
|
65
|
+
retry if tries > 0
|
66
|
+
# rubocop:enable Metrics/BlockNesting
|
67
|
+
end
|
68
|
+
end
|
54
69
|
end
|
55
70
|
end
|
56
71
|
|