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.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +30 -0
  3. data/README.md +8 -7
  4. data/docs/README-maintainers.md +0 -1
  5. data/lib/cisco_node_utils/aaa_authentication_login_service.rb +2 -2
  6. data/lib/cisco_node_utils/bgp.rb +2 -2
  7. data/lib/cisco_node_utils/cisco_cmn_utils.rb +16 -0
  8. data/lib/cisco_node_utils/client/utils.rb +7 -1
  9. data/lib/cisco_node_utils/cmd_ref/DEPRECATED.yaml +12 -12
  10. data/lib/cisco_node_utils/cmd_ref/README_YAML.md +35 -7
  11. data/lib/cisco_node_utils/cmd_ref/aaa_authorization_service.yaml +1 -1
  12. data/lib/cisco_node_utils/cmd_ref/bfd_global.yaml +4 -4
  13. data/lib/cisco_node_utils/cmd_ref/bgp_af.yaml +1 -1
  14. data/lib/cisco_node_utils/cmd_ref/bgp_neighbor_af.yaml +1 -1
  15. data/lib/cisco_node_utils/cmd_ref/bridge_domain.yaml +1 -1
  16. data/lib/cisco_node_utils/cmd_ref/bridge_domain_vni.yaml +1 -1
  17. data/lib/cisco_node_utils/cmd_ref/dhcp_relay_global.yaml +5 -5
  18. data/lib/cisco_node_utils/cmd_ref/encapsulation.yaml +1 -1
  19. data/lib/cisco_node_utils/cmd_ref/fabricpath.yaml +5 -5
  20. data/lib/cisco_node_utils/cmd_ref/fabricpath_topology.yaml +1 -1
  21. data/lib/cisco_node_utils/cmd_ref/feature.yaml +8 -3
  22. data/lib/cisco_node_utils/cmd_ref/hsrp_global.yaml +25 -0
  23. data/lib/cisco_node_utils/cmd_ref/interface.yaml +65 -14
  24. data/lib/cisco_node_utils/cmd_ref/interface_hsrp_group.yaml +117 -0
  25. data/lib/cisco_node_utils/cmd_ref/interface_portchannel.yaml +1 -1
  26. data/lib/cisco_node_utils/cmd_ref/interface_service_vni.yaml +1 -1
  27. data/lib/cisco_node_utils/cmd_ref/inventory.yaml +4 -8
  28. data/lib/cisco_node_utils/cmd_ref/itd_device_group.yaml +1 -1
  29. data/lib/cisco_node_utils/cmd_ref/itd_service.yaml +1 -1
  30. data/lib/cisco_node_utils/cmd_ref/ospf.yaml +1 -1
  31. data/lib/cisco_node_utils/cmd_ref/pim.yaml +6 -0
  32. data/lib/cisco_node_utils/cmd_ref/portchannel_global.yaml +9 -9
  33. data/lib/cisco_node_utils/cmd_ref/snmp_server.yaml +1 -1
  34. data/lib/cisco_node_utils/cmd_ref/stp_global.yaml +8 -8
  35. data/lib/cisco_node_utils/cmd_ref/vdc.yaml +1 -1
  36. data/lib/cisco_node_utils/cmd_ref/vlan.yaml +16 -8
  37. data/lib/cisco_node_utils/cmd_ref/vpc.yaml +11 -11
  38. data/lib/cisco_node_utils/cmd_ref/vrf.yaml +2 -1
  39. data/lib/cisco_node_utils/cmd_ref/vxlan_vtep.yaml +1 -1
  40. data/lib/cisco_node_utils/cmd_ref/vxlan_vtep_vni.yaml +1 -1
  41. data/lib/cisco_node_utils/command_reference.rb +8 -1
  42. data/lib/cisco_node_utils/domain_name.rb +17 -2
  43. data/lib/cisco_node_utils/feature.rb +14 -0
  44. data/lib/cisco_node_utils/hsrp_global.rb +97 -0
  45. data/lib/cisco_node_utils/interface.rb +146 -0
  46. data/lib/cisco_node_utils/interface_hsrp_group.rb +544 -0
  47. data/lib/cisco_node_utils/node.rb +93 -4
  48. data/lib/cisco_node_utils/pim.rb +17 -0
  49. data/lib/cisco_node_utils/portchannel_global.rb +2 -2
  50. data/lib/cisco_node_utils/version.rb +1 -1
  51. data/lib/cisco_node_utils/vlan.rb +2 -5
  52. data/lib/cisco_node_utils/yum.rb +11 -6
  53. data/spec/schema.yaml +3 -3
  54. data/tests/ciscotest.rb +25 -4
  55. data/tests/cmd_config.yaml +0 -2
  56. data/tests/test_bgp_af.rb +13 -2
  57. data/tests/test_feature.rb +5 -0
  58. data/tests/test_hsrp_global.rb +79 -0
  59. data/tests/test_interface.rb +23 -0
  60. data/tests/test_interface_hsrp.rb +134 -0
  61. data/tests/test_interface_hsrp_group.rb +582 -0
  62. data/tests/test_node_ext.rb +7 -1
  63. data/tests/test_pim.rb +27 -3
  64. data/tests/test_platform.rb +1 -1
  65. data/tests/test_radius_global.rb +4 -5
  66. data/tests/test_radius_server.rb +16 -11
  67. data/tests/test_router_bgp.rb +11 -6
  68. data/tests/test_router_ospf_area.rb +6 -6
  69. data/tests/test_tacacs_server.rb +2 -2
  70. data/tests/test_tacacs_server_host.rb +2 -2
  71. data/tests/test_vlan.rb +14 -0
  72. data/tests/test_yum.rb +2 -2
  73. data/tests/yum_package.yaml +4 -0
  74. metadata +10 -3
@@ -1,6 +1,6 @@
1
1
  # itd_device_group
2
2
  ---
3
- _exclude: [N3k, N5k, N6k, N8k, ios_xr]
3
+ _exclude: [N3k, N5k, N6k, N9k-F, ios_xr]
4
4
 
5
5
  _template:
6
6
  get_command: "show running-config all | section itd"
@@ -1,6 +1,6 @@
1
1
  # itd_service
2
2
  ---
3
- _exclude: [N3k, N5k, N6k, N8k, ios_xr]
3
+ _exclude: [N3k, N5k, N6k, N9k-F, ios_xr]
4
4
 
5
5
  _template:
6
6
  get_command: "show running-config all | section itd"
@@ -32,7 +32,7 @@ log_adjacency:
32
32
  default_value: :none
33
33
 
34
34
  process_initialized:
35
- _exclude: [ios_xr, N3k, N7k, N8k, N9k]
35
+ _exclude: [ios_xr, N3k, N7k, N9k-F, N9k]
36
36
  # ospf process initialization state
37
37
  kind: boolean
38
38
  context: ~
@@ -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, N8k, N9k]
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
- N8k: &bundle_hash_ip_l4port
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, N8k]
26
+ _exclude: [N3k, N5k, N6k, N7k, N9k-F]
27
27
  default_value: false
28
28
 
29
29
  hash_distribution:
30
- _exclude: [N3k, N5k, N6k, N8k, N9k]
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, N8k, N9k]
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
- N8k: &load_balance_type_no_hash
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, N8k, N9k]
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, N8k]
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, N8k]
83
+ _exclude: [N5k, N6k, N7k, N9k-F]
84
84
  default_value: false
@@ -63,7 +63,7 @@ packet_size:
63
63
  default_value: 0
64
64
  N6k: *n5k_default_packet_size
65
65
  N7k: *n5k_default_packet_size
66
- N8k: *n5k_default_packet_size
66
+ N9k-F: *n5k_default_packet_size
67
67
 
68
68
  protocol:
69
69
  _exclude: [ios_xr]
@@ -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, N8k, N9k]
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, N8k, N9k]
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, N8k, N9k]
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, N8k, N9k]
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, N8k, N9k]
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, N8k, N9k]
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, N8k, N9k]
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, N8k, N9k]
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, N8k, N9k, ios_xr]
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
- get_value: '/^(\d+)\s/'
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, N8k, N9k]
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
- N8k: *mapped_vni_n3_8_9k
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
- get_value: '/^%d\s+(\S+)\s/'
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: [N8k]
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: [N8k]
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
- get_value: '/^%d\s+\S+\s+(\S+)\s/'
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, N8k]
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, N8k, N9k]
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, N8k, N9k]
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, N8k, N9k]
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, N8k, N9k]
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, N8k, N9k]
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, N8k, N9k]
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, N8k, N9k]
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, N8k, N9k]
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, N8k, N9k]
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, N8k, N9k]
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]
@@ -31,7 +31,7 @@ mt_lite_support:
31
31
  kind: boolean
32
32
  N9k: &mt_lite_default
33
33
  default_only: true
34
- N8k: *mt_lite_default
34
+ N9k-F: *mt_lite_default
35
35
  N6k: *mt_lite_default
36
36
  N5k: *mt_lite_default
37
37
  else:
@@ -49,7 +49,7 @@ suppress_arp:
49
49
  default_value: false
50
50
 
51
51
  suppress_uuc:
52
- _exclude: [N7k, N8k, N9k]
52
+ _exclude: [N7k, N9k-F, N9k]
53
53
  kind: boolean
54
54
  get_value: '/^suppress-unknown-unicast$/'
55
55
  set_value: '<state> suppress-unknown-unicast'
@@ -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 N8k N9k XRv9k)
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
- config_set('dnsclient', 'domain_name_vrf',
53
- state: '', name: @name, vrf: @vrf)
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