cisco_node_utils 1.5.0 → 1.6.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 (53) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +23 -0
  3. data/README.md +2 -1
  4. data/docs/cisco_node_utils.yaml.example +6 -0
  5. data/lib/cisco_node_utils/cisco_cmn_utils.rb +6 -15
  6. data/lib/cisco_node_utils/client/nxapi/client.rb +19 -1
  7. data/lib/cisco_node_utils/client/utils.rb +1 -1
  8. data/lib/cisco_node_utils/cmd_ref/README_YAML.md +1 -1
  9. data/lib/cisco_node_utils/cmd_ref/interface.yaml +25 -0
  10. data/lib/cisco_node_utils/cmd_ref/radius_global.yaml +1 -1
  11. data/lib/cisco_node_utils/cmd_ref/radius_server.yaml +1 -1
  12. data/lib/cisco_node_utils/cmd_ref/route_map.yaml +592 -0
  13. data/lib/cisco_node_utils/cmd_ref/snmp_community.yaml +40 -12
  14. data/lib/cisco_node_utils/cmd_ref/tacacs_global.yaml +1 -1
  15. data/lib/cisco_node_utils/cmd_ref/tacacs_server.yaml +1 -1
  16. data/lib/cisco_node_utils/cmd_ref/tacacs_server_host.yaml +1 -1
  17. data/lib/cisco_node_utils/cmd_ref/upgrade.yaml +38 -0
  18. data/lib/cisco_node_utils/dhcp_relay_global.rb +6 -2
  19. data/lib/cisco_node_utils/dns_domain.rb +2 -2
  20. data/lib/cisco_node_utils/environment.rb +1 -0
  21. data/lib/cisco_node_utils/interface.rb +58 -0
  22. data/lib/cisco_node_utils/itd_service.rb +5 -2
  23. data/lib/cisco_node_utils/node.rb +26 -13
  24. data/lib/cisco_node_utils/radius_global.rb +6 -1
  25. data/lib/cisco_node_utils/radius_server.rb +7 -1
  26. data/lib/cisco_node_utils/route_map.rb +2558 -0
  27. data/lib/cisco_node_utils/tacacs_global.rb +5 -2
  28. data/lib/cisco_node_utils/tacacs_server.rb +5 -2
  29. data/lib/cisco_node_utils/tacacs_server_host.rb +10 -4
  30. data/lib/cisco_node_utils/upgrade.rb +118 -0
  31. data/lib/cisco_node_utils/version.rb +1 -1
  32. data/spec/environment_spec.rb +16 -2
  33. data/tests/test_bgp_af.rb +8 -1
  34. data/tests/test_dhcp_relay_global.rb +3 -2
  35. data/tests/test_evpn_vni.rb +2 -2
  36. data/tests/test_feature.rb +4 -1
  37. data/tests/test_interface.rb +93 -0
  38. data/tests/test_interface_svi.rb +1 -0
  39. data/tests/test_itd_service.rb +4 -0
  40. data/tests/test_radius_global.rb +2 -2
  41. data/tests/test_radius_server.rb +6 -6
  42. data/tests/test_route_map.rb +1489 -0
  43. data/tests/test_router_bgp.rb +2 -0
  44. data/tests/test_snmpcommunity.rb +12 -0
  45. data/tests/test_snmpserver.rb +1 -1
  46. data/tests/test_snmpuser.rb +6 -9
  47. data/tests/test_tacacs_server.rb +2 -2
  48. data/tests/test_tacacs_server_host.rb +2 -2
  49. data/tests/test_upgrade.rb +106 -0
  50. data/tests/test_vlan.rb +2 -4
  51. data/tests/upgrade_info.yaml.example +3 -0
  52. data/tests/yum_package.yaml +13 -3
  53. metadata +9 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a52015dedc4b7c5bf4c0124dced507351aecfbe1
4
- data.tar.gz: 68b52a70c7478034e0a8ce9913e181bda17896bf
3
+ metadata.gz: bba7acf3a46bb0cf8f326a897be60772cd439502
4
+ data.tar.gz: 7ae172b66301e5eae043eb734859db8e29887857
5
5
  SHA512:
6
- metadata.gz: 408c48ce5a0bf93fbcf5f5c10d24717561e475a03b8d6ca4fad6a49c4d237b6a20be6bfbdd4143deecec8a210a1916a7910efd29442ba13a9e67dde219f9070e
7
- data.tar.gz: 4a436ce2bba7bdd3ecf5104a812605b0c3c7c557357c903574c48f018fcc938a8623c580732952b088689186ce77e26a8e4301c3399d970b84a00636a7b5fccd
6
+ metadata.gz: c06271bf71dffbb98af27a6efb3ea84dca3ec1015d121c8ee20e5cdacdcbd24e3508d5cc1897a3825b3162ffb58ae8976049e74a0016287da78d16bd84e03d98
7
+ data.tar.gz: 67820cc10ad107c46218306356d7ed17467886196285896897b69400e8de773dde60a3a98a3ca09d4693c9b2d9bbb471e1a73f6365b99322f44522daa338dbf2
data/CHANGELOG.md CHANGED
@@ -1,6 +1,28 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
+ ## [v1.6.0]
5
+
6
+ ### New feature support
7
+
8
+ #### Cisco Resources
9
+ * Route_map
10
+ * route_map (@saichint)
11
+
12
+ * Upgrade
13
+ * upgrade (@rahushen)
14
+
15
+ ### Added
16
+
17
+ * Extend interface with attributes:
18
+ * `load_interval_counter_1_delay`
19
+ * `load_interval_counter_2_delay`
20
+ * `load_interval_counter_3_delay`
21
+
22
+ ### Changed
23
+
24
+ ### Removed
25
+
4
26
  ## [v1.5.0]
5
27
 
6
28
  ### New feature support
@@ -397,6 +419,7 @@ Changelog
397
419
  [git-flow]: https://github.com/petervanderdoes/gitflow-avh
398
420
  [SimpleCov]: https://github.com/colszowka/simplecov
399
421
 
422
+ [v1.6.0]: https://github.com/cisco/cisco-network-node-utils/compare/v1.5.0...v1.6.0
400
423
  [v1.5.0]: https://github.com/cisco/cisco-network-node-utils/compare/v1.4.1...v1.5.0
401
424
  [v1.4.1]: https://github.com/cisco/cisco-network-node-utils/compare/v1.4.0...v1.4.1
402
425
  [v1.4.0]: https://github.com/cisco/cisco-network-node-utils/compare/v1.3.0...v1.4.0
data/README.md CHANGED
@@ -73,7 +73,8 @@ If both files exist and are readable, configuration in the user-specific file wi
73
73
 
74
74
  This file specifies the host, port, username, and/or password to be used to connect to one or more nodes.
75
75
 
76
- * When installing this gem on NX-OS nodes, this file is generally not needed, as the default client behavior is sufficient.
76
+ * When installing this gem on NX-OS nodes, this file is generally not needed, as the default client behavior is sufficient. This file can be used however to override the default cookie.
77
+ - Nodes defined with a single `cookie` parameter will override the default cookie.
77
78
  * When developing for or testing this gem, this file can specify one or more NX-OS nodes to run tests against. In this case:
78
79
  - A node labeled as `default` will be the default node to test against.
79
80
  - Nodes with other names can be selected at test execution time.
@@ -14,6 +14,12 @@ nxapi_remote:
14
14
  nxapi_local:
15
15
  # (none needed)
16
16
 
17
+ # Example config for running NXAPI on a node with default cookie override:
18
+ # User 'nxapi' must be configured with requisite privilages to configure the device.
19
+ # This will override the default 'admin:local' cookie and use 'nxapi:local' instead.
20
+ default:
21
+ cookie: 'nxapi:local'
22
+
17
23
  # Example config for running gRPC remotely:
18
24
  grpc_remote:
19
25
  host: 192.168.1.100
@@ -361,20 +361,11 @@ module Cisco
361
361
  merged
362
362
  end # merge_range
363
363
 
364
- # Add double quotes to string.
365
- #
366
- # Helper method to add a double quote to the beginning
367
- # and end of a string.
368
- #
369
- # Nxapi adds an escape character to config lines that
370
- # nvgen in this way in some but not all nxos releases.
371
- #
372
- # Input: String (Example 'foo')
373
- # Returns: String with double quotes: (Example: '"foo"'
374
- #
375
- def self.add_quotes(string)
376
- string = "\"#{string}\"" if image_version?(/8.0/)
377
- string
378
- end
364
+ def self.add_quotes(value)
365
+ return value if image_version?(/7.3.0/)
366
+ value = "\"#{value}\"" unless
367
+ value.start_with?('"') && value.end_with?('"')
368
+ value
369
+ end # add_quotes
379
370
  end # class Utils
380
371
  end # module Cisco
@@ -56,6 +56,7 @@ class Cisco::Client::NXAPI < Cisco::Client
56
56
  # unit testing where the base Net::HTTP will meet our needs.
57
57
  require 'net_http_unix'
58
58
  @http = NetX::HTTPUnix.new('unix://' + NXAPI_UDS)
59
+ @cookie = kwargs[:cookie]
59
60
  else
60
61
  # Remote connection. This is primarily expected
61
62
  # when running e.g. from a Unix server as part of Minitest.
@@ -76,6 +77,7 @@ class Cisco::Client::NXAPI < Cisco::Client
76
77
  if kwargs[:host].nil?
77
78
  # Connection to UDS - no username or password either
78
79
  fail ArgumentError unless kwargs[:username].nil? && kwargs[:password].nil?
80
+ validate_cookie(**kwargs)
79
81
  else
80
82
  # Connection to remote system - username and password are required
81
83
  fail TypeError, 'username is required' if kwargs[:username].nil?
@@ -83,6 +85,16 @@ class Cisco::Client::NXAPI < Cisco::Client
83
85
  end
84
86
  end
85
87
 
88
+ def self.validate_cookie(**kwargs)
89
+ return if kwargs[:cookie].nil?
90
+ format = 'Cookie format must match: <username>:local'
91
+ msg = "Invalid cookie: [#{kwargs[:cookie]}]. : #{format}"
92
+
93
+ fail TypeError, msg unless kwargs[:cookie].is_a?(String)
94
+ fail TypeError, msg unless /\S+:local/.match(kwargs[:cookie])
95
+ fail ArgumentError, 'empty cookie' if kwargs[:cookie].empty?
96
+ end
97
+
86
98
  # Clear the cache of CLI output results.
87
99
  #
88
100
  # If cache_auto is true (default) then this will be performed automatically
@@ -189,6 +201,7 @@ class Cisco::Client::NXAPI < Cisco::Client
189
201
  # send the request and get the response
190
202
  debug("Sending HTTP request to NX-API at #{@http.address}:\n" \
191
203
  "#{request.to_hash}\n#{request.body}")
204
+ tries = 2
192
205
  begin
193
206
  # Explicitly use http to avoid EOFError
194
207
  # http://stackoverflow.com/a/23080693
@@ -197,6 +210,10 @@ class Cisco::Client::NXAPI < Cisco::Client
197
210
  rescue Errno::ECONNREFUSED, Errno::ECONNRESET
198
211
  emsg = 'Connection refused or reset. Is the NX-API feature enabled?'
199
212
  raise Cisco::ConnectionRefused, emsg
213
+ rescue EOFError
214
+ tries -= 1
215
+ retry if tries > 0
216
+ raise
200
217
  end
201
218
  handle_http_response(response)
202
219
  output = parse_response(response)
@@ -222,8 +239,9 @@ class Cisco::Client::NXAPI < Cisco::Client
222
239
 
223
240
  def build_http_request(type, command_string)
224
241
  if @username.nil? || @password.nil?
242
+ cookie = @cookie.nil? ? 'admin:local' : @cookie
225
243
  request = Net::HTTP::Post.new(NXAPI_UDS_URI_PATH)
226
- request['Cookie'] = 'nxapi_auth=admin:local'
244
+ request['Cookie'] = "nxapi_auth=#{cookie}"
227
245
  else
228
246
  request = Net::HTTP::Post.new(NXAPI_REMOTE_URI_PATH)
229
247
  request.basic_auth("#{@username}", "#{@password}")
@@ -130,7 +130,7 @@ class Cisco::Client
130
130
  # @param keys [Array] lookup sequence
131
131
  def self.filter_data(data: nil,
132
132
  keys: nil)
133
- return nil if data.nil?
133
+ return nil if data.nil? || data.empty?
134
134
  keys ||= []
135
135
  keys.each do |filter|
136
136
  # if filter is a Hash and data is an array, check each
@@ -81,7 +81,7 @@ needed. In the above, example 'domain' does not have a value defined for
81
81
 
82
82
  ### Wildcard substitution
83
83
 
84
- The `(get|set)_(context|value)` properties all support two forms of wildcarding - printf-style and key-value. Each has advantages and disadvantages but key-value is generally preferred for a number of reasons as seen below:
84
+ The `(get|set)_(context|value|command)` properties all support two forms of wildcarding - printf-style and key-value. Each has advantages and disadvantages but key-value is generally preferred for a number of reasons as seen below:
85
85
 
86
86
  <table>
87
87
  <tr><th></th><th>Advantages</th><th>Disadvantages</th></tr>
@@ -296,6 +296,31 @@ ipv6_dhcp_relay_src_intf:
296
296
  set_value: "<state> ipv6 dhcp relay source-interface <intf>"
297
297
  default_value: false
298
298
 
299
+ load_interval_counter_1_delay:
300
+ _exclude: [ios_xr]
301
+ kind: int
302
+ get_value: '/^load-interval counter 1 (\d+)$/'
303
+ set_value: "load-interval counter 1 <delay>"
304
+ default_value: 30
305
+
306
+ load_interval_counter_1_delay_vlan_bdi:
307
+ kind: int
308
+ default_value: 60
309
+
310
+ load_interval_counter_2_delay:
311
+ _exclude: [ios_xr]
312
+ kind: int
313
+ get_value: '/^load-interval counter 2 (\d+)$/'
314
+ set_value: "load-interval counter 2 <delay>"
315
+ default_value: 300
316
+
317
+ load_interval_counter_3_delay:
318
+ _exclude: [ios_xr]
319
+ kind: int
320
+ get_value: '/^load-interval counter 3 (\d+)$/'
321
+ set_value: "<state> load-interval counter 3 <delay>"
322
+ default_value: false
323
+
299
324
  mtu_loopback:
300
325
  kind: boolean
301
326
  default_only: ~
@@ -7,7 +7,7 @@ _template:
7
7
  get_command: "show running-config radius-server"
8
8
 
9
9
  key:
10
- get_value: '/^radius-server key \d+\s+(\S+)/'
10
+ get_value: '/^radius-server key \d+\s+(.*)/'
11
11
  set_value: '<state> radius-server key <key>'
12
12
 
13
13
  key_format:
@@ -62,7 +62,7 @@ hosts:
62
62
  key:
63
63
  default_value: ~
64
64
  nexus:
65
- get_value: '/^radius-server host <ip>.* key \d+\s+(\S+)/'
65
+ get_value: '/^radius-server host <ip>.* key \d+\s+(.*)/'
66
66
  set_value: '<state> radius-server host <ip> key <key>'
67
67
  ios_xr:
68
68
  context: ["radius-server host <ip> auth-port <auth_port> acct-port <acct_port>"]
@@ -0,0 +1,592 @@
1
+ # route_map
2
+ ---
3
+ _exclude: [ios_xr]
4
+
5
+ _template:
6
+ get_command: "show running-config | section route-map"
7
+ get_context: ['/^route-map <name> <action> <seq>/']
8
+ set_context: ["route-map <name> <action> <seq>"]
9
+
10
+ all_route_maps:
11
+ multiple:
12
+ get_context: ~
13
+ get_value: '/^route-map (\S+) (\S+) (\S+)$/'
14
+
15
+ create:
16
+ set_context: ~
17
+ set_value: "route-map <name> <action> <seq>"
18
+
19
+ description:
20
+ get_value: '/^description (\S+)$/'
21
+ set_value: "<state> description <desc>"
22
+ default_value: false
23
+
24
+ destroy:
25
+ set_context: ~
26
+ set_value: "no route-map <name> <action> <seq>"
27
+
28
+ match_as_number:
29
+ multiple:
30
+ get_value: '/^match as-number (.*)$/'
31
+ set_value: "<state> match as-number <num>"
32
+ default_value: []
33
+
34
+ match_as_number_as_path_list:
35
+ get_value: '/^match as-number as-path-list (.*)$/'
36
+ set_value: "<state> match as-number as-path-list <list>"
37
+ default_value: []
38
+
39
+ match_community:
40
+ get_value: '/^match community (.*)$/'
41
+ set_value: "<state> match community <comm>"
42
+ default_value: []
43
+
44
+ match_community_exact_match:
45
+ default_value: false
46
+
47
+ match_evpn_route_type:
48
+ _exclude: [N3k, N9k, N9k-F]
49
+ multiple:
50
+ get_value: '/^match evpn route-type (.*)$/'
51
+ set_value: "<state> match evpn route-type <type>"
52
+ default_value: []
53
+
54
+ match_evpn_route_type_1:
55
+ _exclude: [N3k, N9k, N9k-F]
56
+ default_value: false
57
+
58
+ match_evpn_route_type_2_all:
59
+ _exclude: [N3k, N9k, N9k-F]
60
+ default_value: false
61
+
62
+ match_evpn_route_type_2_mac_ip:
63
+ _exclude: [N3k, N9k, N9k-F]
64
+ default_value: false
65
+
66
+ match_evpn_route_type_2_mac_only:
67
+ _exclude: [N3k, N9k, N9k-F]
68
+ default_value: false
69
+
70
+ match_evpn_route_type_3:
71
+ _exclude: [N3k, N9k, N9k-F]
72
+ default_value: false
73
+
74
+ match_evpn_route_type_4:
75
+ _exclude: [N3k, N9k, N9k-F]
76
+ default_value: false
77
+
78
+ match_evpn_route_type_5:
79
+ _exclude: [N3k, N9k, N9k-F]
80
+ default_value: false
81
+
82
+ match_evpn_route_type_6:
83
+ _exclude: [N3k, N9k, N9k-F]
84
+ default_value: false
85
+
86
+ match_evpn_route_type_all:
87
+ _exclude: [N3k, N9k, N9k-F]
88
+ default_value: false
89
+
90
+ match_ext_community:
91
+ get_value: '/^match extcommunity (.*)$/'
92
+ set_value: "<state> match extcommunity <comm>"
93
+ default_value: []
94
+
95
+ match_ext_community_exact_match:
96
+ default_value: false
97
+
98
+ match_interface:
99
+ get_value: '/^match interface (.*)$/'
100
+ set_value: "<state> match interface <int>"
101
+ default_value: []
102
+
103
+ match_ipv4_addr_access_list:
104
+ multiple:
105
+ get_value: '/^match ip address (.*)$/'
106
+ set_value: "<state> match ip address <access>"
107
+ default_value: false
108
+
109
+ match_ipv4_addr_prefix_list:
110
+ get_value: '/^match ip address prefix-list (.*)$/'
111
+ set_value: "<state> match ip address prefix-list <prefix>"
112
+ default_value: []
113
+
114
+ match_ipv4_multicast:
115
+ get_value: '/match ip multicast .+$/'
116
+ set_value: "<state> match ip multicast <source> <group> <group_range> <to> <rp> <rp_type>"
117
+
118
+ match_ipv4_multicast_enable:
119
+ kind: boolean
120
+ default_value: false
121
+
122
+ match_ipv4_multicast_group_addr:
123
+ default_value: ''
124
+
125
+ match_ipv4_multicast_group_range_begin_addr:
126
+ default_value: ''
127
+
128
+ match_ipv4_multicast_group_range_end_addr:
129
+ default_value: ''
130
+
131
+ match_ipv4_multicast_rp_addr:
132
+ default_value: ''
133
+
134
+ match_ipv4_multicast_rp_type:
135
+ default_value: ''
136
+
137
+ match_ipv4_multicast_src_addr:
138
+ default_value: ''
139
+
140
+ match_ipv4_next_hop_prefix_list:
141
+ get_value: '/^match ip next-hop prefix-list (.*)$/'
142
+ set_value: "<state> match ip next-hop prefix-list <prefix>"
143
+ default_value: []
144
+
145
+ match_ipv4_route_src_prefix_list:
146
+ get_value: '/^match ip route-source prefix-list (.*)$/'
147
+ set_value: "<state> match ip route-source prefix-list <prefix>"
148
+ default_value: []
149
+
150
+ match_ipv6_addr_access_list:
151
+ multiple:
152
+ get_value: '/^match ipv6 address (.*)$/'
153
+ set_value: "<state> match ipv6 address <access>"
154
+ default_value: false
155
+
156
+ match_ipv6_addr_prefix_list:
157
+ get_value: '/^match ipv6 address prefix-list (.*)$/'
158
+ set_value: "<state> match ipv6 address prefix-list <prefix>"
159
+ default_value: []
160
+
161
+ match_ipv6_multicast:
162
+ get_value: '/match ipv6 multicast .+$/'
163
+ set_value: "<state> match ipv6 multicast <source> <group> <group_range> <to> <rp> <rp_type>"
164
+
165
+ match_ipv6_multicast_enable:
166
+ kind: boolean
167
+ default_value: false
168
+
169
+ match_ipv6_multicast_group_addr:
170
+ default_value: ''
171
+
172
+ match_ipv6_multicast_group_range_begin_addr:
173
+ default_value: ''
174
+
175
+ match_ipv6_multicast_group_range_end_addr:
176
+ default_value: ''
177
+
178
+ match_ipv6_multicast_rp_addr:
179
+ default_value: ''
180
+
181
+ match_ipv6_multicast_rp_type:
182
+ default_value: ''
183
+
184
+ match_ipv6_multicast_src_addr:
185
+ default_value: ''
186
+
187
+ match_ipv6_next_hop_prefix_list:
188
+ get_value: '/^match ipv6 next-hop prefix-list (.*)$/'
189
+ set_value: "<state> match ipv6 next-hop prefix-list <prefix>"
190
+ default_value: []
191
+
192
+ match_ipv6_route_src_prefix_list:
193
+ get_value: '/^match ipv6 route-source prefix-list (.*)$/'
194
+ set_value: "<state> match ipv6 route-source prefix-list <prefix>"
195
+ default_value: []
196
+
197
+ match_length:
198
+ _exclude: [N3k, N9k, N9k-F]
199
+ get_value: '/^match length (\d+) (\d+)$/'
200
+ set_value: "<state> match length <min> <max>"
201
+ default_value: []
202
+
203
+ match_mac_list:
204
+ _exclude: [N3k, N9k, N9k-F]
205
+ get_value: '/^match mac-list (.*)$/'
206
+ set_value: "<state> match mac-list <mac>"
207
+ default_value: []
208
+
209
+ match_metric:
210
+ get_value: '/^match metric (.*)$/'
211
+ set_value: "<state> match metric <metric>"
212
+ default_value: []
213
+
214
+ match_ospf_area:
215
+ _exclude: [N5k, N6k, N7k, N9k-F]
216
+ get_value: '/^match ospf-area (.*)$/'
217
+ set_value: "<state> match ospf-area <area>"
218
+ default_value: []
219
+
220
+ match_route_type:
221
+ multiple:
222
+ get_value: '/^match route-type (.*)$/'
223
+ set_value: "<state> match route-type <external> <inter_area> <internal> <intra_area> <level_1> <level_2> <local> <nssa_external> <type_1> <type_2>"
224
+
225
+ match_route_type_external:
226
+ kind: boolean
227
+ default_value: false
228
+
229
+ match_route_type_inter_area:
230
+ kind: boolean
231
+ default_value: false
232
+
233
+ match_route_type_internal:
234
+ kind: boolean
235
+ default_value: false
236
+
237
+ match_route_type_intra_area:
238
+ kind: boolean
239
+ default_value: false
240
+
241
+ match_route_type_level_1:
242
+ kind: boolean
243
+ default_value: false
244
+
245
+ match_route_type_level_2:
246
+ kind: boolean
247
+ default_value: false
248
+
249
+ match_route_type_local:
250
+ kind: boolean
251
+ default_value: false
252
+
253
+ match_route_type_nssa_external:
254
+ kind: boolean
255
+ default_value: false
256
+
257
+ match_route_type_type_1:
258
+ kind: boolean
259
+ default_value: false
260
+
261
+ match_route_type_type_2:
262
+ kind: boolean
263
+ default_value: false
264
+
265
+ match_src_proto:
266
+ get_value: '/^match source-protocol (.*)$/'
267
+ set_value: "<state> match source-protocol <proto>"
268
+ default_value: []
269
+
270
+ match_tag:
271
+ get_value: '/^match tag (.*)$/'
272
+ set_value: "<state> match tag <tag>"
273
+ default_value: []
274
+
275
+ match_vlan:
276
+ _exclude: [N3k, N9k, N9k-F]
277
+ get_value: '/^match vlan (.*)$/'
278
+ set_value: "<state> match vlan <range>"
279
+ default_value: ''
280
+
281
+ set_as_path_prepend:
282
+ multiple:
283
+ get_value: '/^set as-path prepend (.*)$/'
284
+ set_value: "<state> set as-path prepend <asnum>"
285
+ default_value: []
286
+
287
+ set_as_path_prepend_last_as:
288
+ kind: int
289
+ get_value: '/^set as-path prepend last-as (\d+)$/'
290
+ set_value: "<state> set as-path prepend last-as <as>"
291
+ default_value: false
292
+
293
+ set_as_path_tag:
294
+ kind: boolean
295
+ get_value: '/^set as-path tag$/'
296
+ set_value: "<state> set as-path tag"
297
+ default_value: false
298
+
299
+ # there is more than one space before delete on some platforms
300
+ set_comm_list:
301
+ get_value: '/^set comm-list (\S+)(?:\s+)? delete$/'
302
+ set_value: "<state> set comm-list <list> delete"
303
+ default_value: false
304
+
305
+ set_community:
306
+ get_value: '/^set community(?:\s+.*)?$/'
307
+ set_value: "<state> set community <string>"
308
+
309
+ set_community_additive:
310
+ default_value: false
311
+
312
+ set_community_asn:
313
+ default_value: []
314
+
315
+ set_community_internet:
316
+ default_value: false
317
+
318
+ set_community_local_as:
319
+ default_value: false
320
+
321
+ set_community_no_advtertise:
322
+ default_value: false
323
+
324
+ set_community_no_export:
325
+ default_value: false
326
+
327
+ set_community_none:
328
+ default_value: false
329
+
330
+ set_dampening:
331
+ get_value: '/^set dampening (.*)$/'
332
+ set_value: "<state> set dampening <hl> <reuse> <supp> <max>"
333
+
334
+ set_dampening_half_life:
335
+ default_value: false
336
+
337
+ set_dampening_max_duation:
338
+ default_value: false
339
+
340
+ set_dampening_reuse:
341
+ default_value: false
342
+
343
+ set_dampening_suppress:
344
+ default_value: false
345
+
346
+ set_distance:
347
+ get_value: '/^set distance (.*)$/'
348
+ set_value: "<state> set distance <igp> <internal> <local>"
349
+
350
+ set_distance_igp_ebgp:
351
+ default_value: false
352
+
353
+ set_distance_internal:
354
+ default_value: false
355
+
356
+ set_distance_local:
357
+ default_value: false
358
+
359
+ # there is more than one space before delete on some platforms
360
+ set_extcomm_list:
361
+ get_value: '/^set extcomm-list (\S+)(?:\s+)? delete$/'
362
+ set_value: "<state> set extcomm-list <list> delete"
363
+ default_value: false
364
+
365
+ set_extcommunity_4bytes:
366
+ get_value: '/^set extcommunity 4byteas-generic (.*)$/'
367
+ set_value: "<state> set extcommunity 4byteas-generic <string>"
368
+
369
+ set_extcommunity_4bytes_additive:
370
+ default_value: false
371
+
372
+ set_extcommunity_4bytes_non_transitive:
373
+ default_value: []
374
+
375
+ set_extcommunity_4bytes_none:
376
+ default_value: false
377
+
378
+ set_extcommunity_4bytes_transitive:
379
+ default_value: []
380
+
381
+ set_extcommunity_cost:
382
+ get_value: '/^set extcommunity cost (.*)$/'
383
+ set_value: "<state> set extcommunity cost <string>"
384
+
385
+ set_extcommunity_cost_device:
386
+ kind: boolean
387
+ N3k: &set_extcommunity_device_str
388
+ default_only: true
389
+ N5k: &set_extcommunity_device_no_str
390
+ default_only: false
391
+ N6k: *set_extcommunity_device_no_str
392
+ N7k: *set_extcommunity_device_no_str
393
+ N9k: *set_extcommunity_device_str
394
+ N9k-F: *set_extcommunity_device_str
395
+
396
+ set_extcommunity_cost_igp:
397
+ default_value: []
398
+
399
+ set_extcommunity_cost_pre_bestpath:
400
+ default_value: []
401
+
402
+ set_extcommunity_rt:
403
+ get_value: '/^set extcommunity rt (.*)$/'
404
+ set_value: "<state> set extcommunity rt <string>"
405
+
406
+ set_extcommunity_rt_additive:
407
+ default_value: false
408
+
409
+ set_extcommunity_rt_asn:
410
+ default_value: []
411
+
412
+ set_forwarding_addr:
413
+ kind: boolean
414
+ get_value: '/^set forwarding-address$/'
415
+ set_value: "<state> set forwarding-address"
416
+ default_value: false
417
+
418
+ set_interface:
419
+ get_value: '/^set interface (.*)$/'
420
+ set_value: "<state> set interface <int>"
421
+ default_value: false
422
+
423
+ set_ipv4_default_next_hop:
424
+ _exclude: [N5k, N6k, N9k, N9k-F]
425
+ get_value: '/^set ip default next-hop (.*)$/'
426
+ set_value: "<state> set ip default next-hop <nh>"
427
+ default_value: []
428
+
429
+ set_ipv4_default_next_hop_load_share:
430
+ _exclude: [N5k, N6k, N9k, N9k-F]
431
+ default_value: false
432
+
433
+ set_ipv4_next_hop:
434
+ multiple:
435
+ get_value: '/^set ip next-hop (.*)$/'
436
+ set_value: "<state> set ip next-hop <nh>"
437
+ default_value: []
438
+
439
+ set_ipv4_next_hop_load_share:
440
+ _exclude: [N5k, N6k]
441
+ default_value: false
442
+
443
+ set_ipv4_next_hop_peer_addr:
444
+ kind: boolean
445
+ get_value: '/^set ip next-hop peer-address$/'
446
+ set_value: "<state> set ip next-hop peer-address"
447
+ default_value: false
448
+
449
+ set_ipv4_next_hop_redist:
450
+ kind: boolean
451
+ get_value: '/^set ip next-hop redist-unchanged$/'
452
+ set_value: "<state> set ip next-hop redist-unchanged"
453
+ default_value: false
454
+
455
+ set_ipv4_next_hop_unchanged:
456
+ kind: boolean
457
+ get_value: '/^set ip next-hop unchanged$/'
458
+ set_value: "<state> set ip next-hop unchanged"
459
+ default_value: false
460
+
461
+ set_ipv4_precedence:
462
+ get_value: '/^set ip precedence (\S+)/'
463
+ set_value: "<state> set ip precedence <pre>"
464
+ default_value: false
465
+
466
+ set_ipv4_prefix:
467
+ _exclude: [N5k, N6k]
468
+ get_value: '/^set ip address prefix-list (\S+)/'
469
+ set_value: "<state> set ip address prefix-list <pf>"
470
+ default_value: false
471
+
472
+ set_ipv6_default_next_hop:
473
+ _exclude: [N5k, N6k, N9k, N9k-F]
474
+ get_value: '/^set ipv6 default next-hop (.*)$/'
475
+ set_value: "<state> set ipv6 default next-hop <nh>"
476
+ default_value: []
477
+
478
+ set_ipv6_default_next_hop_load_share:
479
+ _exclude: [N5k, N6k, N9k, N9k-F]
480
+ default_value: false
481
+
482
+ set_ipv6_next_hop:
483
+ multiple:
484
+ get_value: '/^set ipv6 next-hop (.*)$/'
485
+ set_value: "<state> set ipv6 next-hop <nh>"
486
+ default_value: []
487
+
488
+ set_ipv6_next_hop_load_share:
489
+ _exclude: [N5k, N6k]
490
+ default_value: false
491
+
492
+ set_ipv6_next_hop_peer_addr:
493
+ kind: boolean
494
+ get_value: '/^set ipv6 next-hop peer-address$/'
495
+ set_value: "<state> set ipv6 next-hop peer-address"
496
+ default_value: false
497
+
498
+ set_ipv6_next_hop_redist:
499
+ kind: boolean
500
+ get_value: '/^set ipv6 next-hop redist-unchanged$/'
501
+ set_value: "<state> set ipv6 next-hop redist-unchanged"
502
+ default_value: false
503
+
504
+ set_ipv6_next_hop_unchanged:
505
+ kind: boolean
506
+ get_value: '/^set ipv6 next-hop unchanged$/'
507
+ set_value: "<state> set ipv6 next-hop unchanged"
508
+ default_value: false
509
+
510
+ set_ipv6_precedence:
511
+ get_value: '/^set ipv6 precedence (\S+)/'
512
+ set_value: "<state> set ipv6 precedence <pre>"
513
+ default_value: false
514
+
515
+ set_ipv6_prefix:
516
+ _exclude: [N5k, N6k]
517
+ get_value: '/^set ipv6 address prefix-list (\S+)/'
518
+ set_value: "<state> set ipv6 address prefix-list <pf>"
519
+ default_value: false
520
+
521
+ set_level:
522
+ get_value: '/^set level (\S+)$/'
523
+ set_value: "<state> set level <level>"
524
+ default_value: false
525
+
526
+ set_local_preference:
527
+ kind: int
528
+ get_value: '/^set local-preference (\d+)$/'
529
+ set_value: "<state> set local-preference <pref>"
530
+ default_value: false
531
+
532
+ set_metric:
533
+ get_value: '/^set metric (.*)$/'
534
+ set_value: "<state> set metric <additive><bw> <delay> <rel> <eff> <mtu>"
535
+
536
+ set_metric_additive:
537
+ default_value: false
538
+
539
+ set_metric_bandwidth:
540
+ default_value: false
541
+
542
+ set_metric_delay:
543
+ default_value: false
544
+
545
+ set_metric_effective_bandwidth:
546
+ default_value: false
547
+
548
+ set_metric_mtu:
549
+ default_value: false
550
+
551
+ set_metric_reliability:
552
+ default_value: false
553
+
554
+ set_metric_type:
555
+ get_value: '/^set metric-type (\S+)$/'
556
+ set_value: "<state> set metric-type <type>"
557
+ default_value: false
558
+
559
+ set_nssa_only:
560
+ kind: boolean
561
+ get_value: '/^set nssa-only$/'
562
+ set_value: "<state> set nssa-only"
563
+ default_value: false
564
+
565
+ set_origin:
566
+ get_value: '/^set origin (\S+)/'
567
+ set_value: "<state> set origin <origin>"
568
+ default_value: false
569
+
570
+ set_path_selection:
571
+ kind: boolean
572
+ get_value: '/^set path-selection all advertise$/'
573
+ set_value: "<state> set path-selection all advertise"
574
+ default_value: false
575
+
576
+ set_tag:
577
+ kind: int
578
+ get_value: '/^set tag (\d+)/'
579
+ set_value: "<state> set tag <tag>"
580
+ default_value: false
581
+
582
+ set_vrf:
583
+ _exclude: [N3k, N5k, N6k, N9k, N9k-F]
584
+ get_value: '/^set vrf (\S+)$/'
585
+ set_value: "<state> set vrf <vrf>"
586
+ default_value: false
587
+
588
+ set_weight:
589
+ kind: int
590
+ get_value: '/^set weight (\d+)$/'
591
+ set_value: "<state> set weight <weight>"
592
+ default_value: false