cisco_node_utils 1.4.1 → 1.5.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.
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