cisco_node_utils 1.10.0 → 2.0.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 (63) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -0
  3. data/CHANGELOG.md +25 -0
  4. data/lib/cisco_node_utils/bgp.rb +1 -1
  5. data/lib/cisco_node_utils/cisco_cmn_utils.rb +11 -3
  6. data/lib/cisco_node_utils/client/nxapi/client.rb +40 -6
  7. data/lib/cisco_node_utils/cmd_ref/acl.yaml +1 -1
  8. data/lib/cisco_node_utils/cmd_ref/banner.yaml +5 -1
  9. data/lib/cisco_node_utils/cmd_ref/feature.yaml +8 -1
  10. data/lib/cisco_node_utils/cmd_ref/interface_ospf.yaml +1 -1
  11. data/lib/cisco_node_utils/cmd_ref/interface_service_vni.yaml +5 -0
  12. data/lib/cisco_node_utils/cmd_ref/inventory.yaml +1 -1
  13. data/lib/cisco_node_utils/cmd_ref/ospf.yaml +7 -0
  14. data/lib/cisco_node_utils/cmd_ref/route_map.yaml +1 -1
  15. data/lib/cisco_node_utils/cmd_ref/vtp.yaml +1 -1
  16. data/lib/cisco_node_utils/cmd_ref/vxlan_vtep.yaml +30 -0
  17. data/lib/cisco_node_utils/cmd_ref/vxlan_vtep_vni.yaml +9 -2
  18. data/lib/cisco_node_utils/command_reference.rb +2 -2
  19. data/lib/cisco_node_utils/dhcp_relay_global.rb +1 -5
  20. data/lib/cisco_node_utils/feature.rb +30 -4
  21. data/lib/cisco_node_utils/interface.rb +3 -3
  22. data/lib/cisco_node_utils/interface_service_vni.rb +1 -1
  23. data/lib/cisco_node_utils/node.rb +11 -22
  24. data/lib/cisco_node_utils/node_util.rb +1 -1
  25. data/lib/cisco_node_utils/radius_global.rb +3 -3
  26. data/lib/cisco_node_utils/radius_server.rb +1 -2
  27. data/lib/cisco_node_utils/route_map.rb +1 -1
  28. data/lib/cisco_node_utils/router_ospf_vrf.rb +49 -5
  29. data/lib/cisco_node_utils/tacacs_global.rb +1 -2
  30. data/lib/cisco_node_utils/tacacs_server.rb +1 -2
  31. data/lib/cisco_node_utils/tacacs_server_host.rb +1 -2
  32. data/lib/cisco_node_utils/version.rb +1 -1
  33. data/lib/cisco_node_utils/vlan.rb +1 -1
  34. data/lib/cisco_node_utils/vxlan_vtep.rb +89 -4
  35. data/lib/cisco_node_utils/vxlan_vtep_vni.rb +32 -1
  36. data/spec/schema.yaml +2 -0
  37. data/tests/basetest.rb +40 -4
  38. data/tests/ciscotest.rb +15 -5
  39. data/tests/cmd_config.yaml +0 -2
  40. data/tests/test_acl.rb +1 -1
  41. data/tests/test_bgp_af.rb +6 -0
  42. data/tests/test_feature.rb +30 -4
  43. data/tests/test_interface.rb +5 -7
  44. data/tests/test_interface_ospf.rb +5 -1
  45. data/tests/test_interface_private_vlan.rb +18 -1
  46. data/tests/test_interface_svi.rb +1 -1
  47. data/tests/test_interface_switchport.rb +4 -7
  48. data/tests/test_node_ext.rb +1 -1
  49. data/tests/test_nxapi.rb +18 -8
  50. data/tests/test_radius_global.rb +3 -2
  51. data/tests/test_route_map.rb +2 -4
  52. data/tests/test_router_bgp.rb +10 -14
  53. data/tests/test_router_ospf_vrf.rb +61 -0
  54. data/tests/test_snmpserver.rb +1 -1
  55. data/tests/test_tacacs_global.rb +4 -2
  56. data/tests/test_upgrade.rb +1 -1
  57. data/tests/test_vrf.rb +2 -0
  58. data/tests/test_vrf_af.rb +2 -0
  59. data/tests/test_vtp.rb +6 -4
  60. data/tests/test_vxlan_vtep.rb +93 -1
  61. data/tests/test_vxlan_vtep_vni.rb +35 -1
  62. data/tests/yum_package.yaml +5 -0
  63. metadata +3 -3
@@ -152,11 +152,9 @@ class TestRouteMap < CiscoTestCase
152
152
  def test_match_src_proto
153
153
  rm = create_route_map
154
154
  assert_equal(rm.default_match_src_proto, rm.match_src_proto)
155
- array = %w(tcp udp igmp)
155
+ array = %w(tcp udp igmp).sort
156
156
  rm.match_src_proto = array
157
- # Protocol order not maintained in running config starting Greensboro.
158
- # Sorting arrays to check equality.
159
- assert_equal(array.sort, rm.match_src_proto.sort)
157
+ assert_equal(array, rm.match_src_proto)
160
158
  rm.match_src_proto = rm.default_match_src_proto
161
159
  assert_equal(rm.default_match_src_proto, rm.match_src_proto)
162
160
  end
@@ -55,7 +55,8 @@ def setup_default
55
55
  end
56
56
 
57
57
  def setup_vrf
58
- @asnum = 99
58
+ # nexus does not support multiple BGP instances; VRF AS must be same as default AS
59
+ @asnum = platform == :nexus ? 55 : 99
59
60
  @vrf = 'yamllll'
60
61
  create_bgp_vrf(@asnum, @vrf)
61
62
  end
@@ -256,24 +257,18 @@ class TestRouterBgp < CiscoTestCase
256
257
  end
257
258
 
258
259
  def test_nsr
260
+ skip_if_UnsupportedCmdRef('bgp', 'nsr')
259
261
  nsr(setup_default)
260
262
  nsr(setup_vrf)
261
263
  end
262
264
 
263
265
  def nsr(bgp)
264
- if (platform == :nexus) || (platform == :ios_xr && !@vrf[/default/])
265
- if platform == :nexus
266
- assert_nil(bgp.default_nsr,
267
- 'default bgp nsr should be nil on Nexus')
268
- assert_nil(bgp.nsr,
269
- 'bgp nsr should be nil on Nexus')
270
- else
271
- assert_nil(bgp.default_nsr,
272
- 'default bgp nsr should return nil on XR with non-default' \
273
- ' vrf')
274
- assert_nil(bgp.nsr,
275
- 'bgp nsr should return nil on XR with non-default vrf')
276
- end
266
+ if platform == :ios_xr && !@vrf[/default/]
267
+ assert_nil(bgp.default_nsr,
268
+ 'default bgp nsr should return nil on XR with non-default' \
269
+ ' vrf')
270
+ assert_nil(bgp.nsr,
271
+ 'bgp nsr should return nil on XR with non-default vrf')
277
272
  assert_raises(Cisco::UnsupportedError) do
278
273
  bgp.nsr = true
279
274
  end
@@ -1100,6 +1095,7 @@ class TestRouterBgp < CiscoTestCase
1100
1095
  assert_nil(bgp.reconnect_interval,
1101
1096
  'reconnect_interval should return nil on XR')
1102
1097
  else
1098
+ skip_if_UnsupportedCmdRef('bgp', 'reconnect_interval')
1103
1099
  skip_incompat_version?('bgp', 'reconnect_interval')
1104
1100
  assert_equal(bgp.default_reconnect_interval, bgp.reconnect_interval,
1105
1101
  "reconnect_interval should be set to default value of '60'")
@@ -32,6 +32,67 @@ class TestRouterOspfVrf < CiscoTestCase
32
32
  super
33
33
  end
34
34
 
35
+ def test_redistribute
36
+ routers = %w(alpha beta)
37
+ vrfs = %w(default zed)
38
+ routers.each do |rtr|
39
+ vrfs.each do |vrf|
40
+ dbg = sprintf('[RTR %s VRF %s]', rtr, vrf)
41
+ af = RouterOspfVrf.new(rtr, vrf)
42
+ redistribute_cmd(af, dbg)
43
+ end
44
+ end
45
+ end
46
+
47
+ def redistribute_cmd(af, dbg)
48
+ # rubocop:disable Style/WordArray
49
+ # Initial 'should' state
50
+ master = [['direct', 'rm_direct'],
51
+ ['lisp', 'rm_lisp'],
52
+ ['static', 'rm_static'],
53
+ ['eigrp 1', 'rm_eigrp'],
54
+ ['isis 2', 'rm_isis'],
55
+ ['ospf 3', 'rm_ospf'],
56
+ ['rip 4', 'rm_rip'],
57
+ ['bgp 5', 'rm_bgp']]
58
+ # rubocop:enable Style/WordArray
59
+
60
+ # Test: Add all protocols w/route-maps when no cmds are present
61
+ should = master.clone
62
+ af.redistribute = should
63
+ result = af.redistribute
64
+ assert_equal(should.sort, result.sort,
65
+ "#{dbg} Test 1. From empty, to all protocols")
66
+
67
+ # Test: remove half of the protocols
68
+ should.shift(4)
69
+ af.redistribute = should
70
+ result = af.redistribute
71
+ assert_equal(should.sort, result.sort,
72
+ "#{dbg} Test 2. Remove half of the protocols")
73
+
74
+ # Test: restore the removed protocols
75
+ should = master.clone
76
+ af.redistribute = should
77
+ result = af.redistribute
78
+ assert_equal(should.sort, result.sort,
79
+ "#{dbg} Test 3. Restore the removed protocols")
80
+
81
+ # Test: Change route-maps on existing commands
82
+ should = master.map { |prot_only, rm| [prot_only, "#{rm}_2"] }
83
+ af.redistribute = should
84
+ result = af.redistribute
85
+ assert_equal(should.sort, result.sort,
86
+ "#{dbg} Test 4. Change route-maps on existing commands")
87
+
88
+ # Test: 'default'
89
+ should = af.default_redistribute
90
+ af.redistribute = should
91
+ result = af.redistribute
92
+ assert_equal(should.sort, result.sort,
93
+ "#{dbg} Test 5. 'Default'")
94
+ end
95
+
35
96
  def assert_match_vrf_line(routername, vrfname, cmd=nil)
36
97
  match_vrf_line(routername, vrfname, cmd, true)
37
98
  end
@@ -155,7 +155,7 @@ class TestSnmpServer < CiscoTestCase
155
155
  end
156
156
 
157
157
  def test_packet_size
158
- skip_legacy_defect?('7.0.3.I2.2e|7.0.3.I2.5|7.0.3.I3.1',
158
+ skip_legacy_defect?('7.0.3.I2.2e|7.0.3.I2.5|7.0.3.I3.1|7.3.2.D',
159
159
  'CSCuz14217: CLI shows default snmp packet-size incorrectly as 0')
160
160
 
161
161
  if validate_property_excluded?('snmp_server', 'packet_size')
@@ -75,7 +75,8 @@ class TestTacacsGlobal < CiscoTestCase
75
75
  global.encryption_key_set(nil, key)
76
76
  # Device encypts key - verify return value
77
77
  assert_equal(7, global.key_format)
78
- assert_equal('"WAWY_NZB"', global.key)
78
+ key = 'WAWY_NZB'
79
+ assert_equal(key, global.key)
79
80
 
80
81
  skip_versions = ['7.0.3.(I2|I3)', '7.0.3.I4.[1-7]']
81
82
  if step_unless_legacy_defect(skip_versions, 'CSCvh72911: Cannot configure tacacs-server key 6')
@@ -85,7 +86,8 @@ class TestTacacsGlobal < CiscoTestCase
85
86
  key = 'JDYkqyIFWeBvzpljSfWmRZrmRSRE8'
86
87
  global.encryption_key_set(key_format, key)
87
88
  assert_equal(key_format, global.key_format)
88
- assert_equal("\"#{key}\"", global.key)
89
+
90
+ assert_equal(key, global.key)
89
91
  end
90
92
 
91
93
  # Remove global key
@@ -71,7 +71,7 @@ class TestUpgrade < CiscoTestCase
71
71
 
72
72
  def test_image_version
73
73
  version = Upgrade.image_version
74
- assert_match(/^\d.\d\(\d\)\S+\(\S+\)$/, version)
74
+ assert_match(/^\d.\d\(\d(?:.\d+)?\)(?:\S+\(\S+\))?$/, version)
75
75
  end
76
76
 
77
77
  def test_box_online
@@ -222,6 +222,8 @@ class TestVrf < CiscoTestCase
222
222
  assert_empty(v.route_distinguisher,
223
223
  'v route_distinguisher should *NOT* be configured')
224
224
  v.destroy
225
+ rescue RuntimeError => e
226
+ hardware_supports_feature?(e.message)
225
227
  end
226
228
 
227
229
  def test_vpn_id
@@ -210,6 +210,8 @@ class TestVrfAf < CiscoTestCase
210
210
  should = v.default_route_target_import
211
211
  route_target_tester(v, af, opts, should, 'Test 4')
212
212
  v.destroy
213
+ rescue RuntimeError => e
214
+ hardware_supports_feature?(e.message)
213
215
  end
214
216
 
215
217
  def route_target_tester(v, af, opts, should, test_id)
@@ -175,14 +175,16 @@ class TestVtp < CiscoTestCase
175
175
  end
176
176
 
177
177
  # this fails on n7k running 7.3(0)D1.1 image but it
178
- # is fixed in later releases. The bugID is CSCuy87970
178
+ # is fixed in some later releases. The bugID is CSCuy87970
179
179
  # which is already verified.
180
180
  def test_password_special_characters
181
- skip_legacy_defect?('7.3.0.(N1|D1).1.bin',
181
+ skip_legacy_defect?('7.3.[012].(N1|D1)',
182
182
  'CSCuy87970: NXAPI incorrect backslash escape')
183
+ # N6k output may triple-escape forward slashes. For now simplify pattern.
184
+ test_pass = node.product_id[/N[56]/] ? 'hello!//#%$x' : 'hello!//\\#%$x'
183
185
  vtp = vtp_domain('password')
184
- vtp.password = 'hello!//\\#%$x'
185
- assert_equal('hello!//\\#%$x', vtp.password)
186
+ vtp.password = test_pass
187
+ assert_equal(test_pass, vtp.password)
186
188
  end
187
189
 
188
190
  def test_filename_valid
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2013-2016 Cisco and/or its affiliates.
1
+ # Copyright (c) 2013-2018 Cisco and/or its affiliates.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -24,9 +24,11 @@ include Cisco
24
24
  class TestVxlanVtep < CiscoTestCase
25
25
  @skip_unless_supported = 'vxlan_vtep'
26
26
  @@pre_clean_needed = true # rubocop:disable Style/ClassVars
27
+ @@feature_unsupported = false # rubocop:disable Style/ClassVars
27
28
 
28
29
  def setup
29
30
  super
31
+ skip('setup: Feature is unsupported on this device') if @@feature_unsupported
30
32
  skip('Platform does not support MT-full or MT-lite') unless
31
33
  VxlanVtep.mt_full_support || VxlanVtep.mt_lite_support
32
34
  Interface.interfaces(:nve).each { |_nve, obj| obj.destroy }
@@ -34,6 +36,10 @@ class TestVxlanVtep < CiscoTestCase
34
36
  feature_cleanup if @@pre_clean_needed
35
37
  Feature.nv_overlay_enable
36
38
  @@pre_clean_needed = false # rubocop:disable Style/ClassVars
39
+ rescue RuntimeError => e
40
+ # Skip locally to shortcut the dependencies above for the next test
41
+ @@feature_unsupported = hardware_supports_feature?(e.message, status_only: true) # rubocop:disable Style/ClassVars
42
+ @@feature_unsupported ? skip(e.message) : raise(e.message)
37
43
  end
38
44
 
39
45
  def teardown
@@ -232,4 +238,90 @@ class TestVxlanVtep < CiscoTestCase
232
238
  vtep.source_interface_hold_down_time = val
233
239
  assert_equal(val, vtep.source_interface_hold_down_time)
234
240
  end
241
+
242
+ def test_global_ingress_replication_bgp
243
+ skip_incompat_version?('vxlan_vtep', 'global_ingress_replication_bgp')
244
+
245
+ vtep = VxlanVtep.new('nve1')
246
+ vtep.host_reachability = 'evpn'
247
+ if validate_property_excluded?('vxlan_vtep', 'global_ingress_replication_bgp')
248
+ assert_raises(Cisco::UnsupportedError) { vtep.global_ingress_replication_bgp = true }
249
+ return
250
+ end
251
+
252
+ # Test: Check global_ingress_replication_bgp is not configured.
253
+ refute(vtep.global_ingress_replication_bgp, 'global_ingress_replication_bgp should be disabled')
254
+
255
+ # Test: Enable global_ingress_replication_bgp
256
+ vtep.global_ingress_replication_bgp = true
257
+ assert(vtep.global_ingress_replication_bgp, 'global_ingress_replication_bgp should be enabled')
258
+ # Test: Default
259
+ vtep.global_ingress_replication_bgp = vtep.default_global_ingress_replication_bgp
260
+ refute(vtep.global_ingress_replication_bgp, 'global_ingress_replication_bgp should be disabled')
261
+ end
262
+
263
+ def test_global_suppress_arp
264
+ skip_incompat_version?('vxlan_vtep', 'global_suppress_arp')
265
+
266
+ vtep = VxlanVtep.new('nve1')
267
+ vtep.host_reachability = 'evpn'
268
+ if validate_property_excluded?('vxlan_vtep', 'global_suppress_arp')
269
+ assert_raises(Cisco::UnsupportedError) { vtep.global_suppress_arp = true }
270
+ return
271
+ end
272
+
273
+ # Test: Check global_suppress_arp is not configured.
274
+ refute(vtep.global_suppress_arp, 'global_suppress_arp should be disabled')
275
+
276
+ # Test: Enable global_suppress_arp
277
+ begin
278
+ vtep.global_suppress_arp = true
279
+ rescue CliError => e
280
+ skip(e.to_s) if /ERROR: Please configure TCAM/.match(e.to_s)
281
+ end
282
+ assert(vtep.global_suppress_arp, 'global_suppress_arp should be enabled')
283
+ # Test: Default
284
+ vtep.global_suppress_arp = vtep.default_global_suppress_arp
285
+ refute(vtep.global_suppress_arp, 'global_suppress_arp should be disabled')
286
+ end
287
+
288
+ def test_global_mcast_group_l2
289
+ vtep = VxlanVtep.new('nve1')
290
+ if validate_property_excluded?('vxlan_vtep', 'global_mcast_group_l2')
291
+ assert_raises(Cisco::UnsupportedError) do
292
+ vtep.global_mcast_group_l2 = '225.1.1.1'
293
+ end
294
+ return
295
+ end
296
+ skip_incompat_version?('vxlan_vtep', 'global_mcast_group_l2')
297
+
298
+ assert_equal(vtep.global_mcast_group_l2, vtep.default_global_mcast_group_l2)
299
+ vtep.global_mcast_group_l2 = '225.1.1.1'
300
+ assert_equal('225.1.1.1', vtep.global_mcast_group_l2)
301
+ vtep.global_mcast_group_l2 = vtep.default_global_mcast_group_l2
302
+ assert_equal(vtep.global_mcast_group_l2, vtep.default_global_mcast_group_l2)
303
+ end
304
+
305
+ def test_global_mcast_group_l3
306
+ vtep = VxlanVtep.new('nve1')
307
+ if validate_property_excluded?('vxlan_vtep', 'global_mcast_group_l3')
308
+ assert_raises(Cisco::UnsupportedError) do
309
+ vtep.global_mcast_group_l3 = '225.1.1.1'
310
+ end
311
+ return
312
+ end
313
+ skip_incompat_version?('vxlan_vtep', 'global_mcast_group_l3')
314
+
315
+ assert_equal(vtep.global_mcast_group_l3, vtep.default_global_mcast_group_l3)
316
+
317
+ begin
318
+ # global_mcast_group_l3 is only supported on certain vxlan capable N9ks
319
+ vtep.global_mcast_group_l3 = '225.1.1.1'
320
+ rescue CliError => e
321
+ skip(e.to_s) if /TRM not supported on this platform/.match(e.to_s)
322
+ end
323
+ assert_equal('225.1.1.1', vtep.global_mcast_group_l3)
324
+ vtep.global_mcast_group_l3 = vtep.default_global_mcast_group_l3
325
+ assert_equal(vtep.global_mcast_group_l3, vtep.default_global_mcast_group_l3)
326
+ end
235
327
  end
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2013-2016 Cisco and/or its affiliates.
1
+ # Copyright (c) 2013-2018 Cisco and/or its affiliates.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -23,15 +23,21 @@ include Cisco
23
23
  class TestVxlanVtepVni < CiscoTestCase
24
24
  @skip_unless_supported = 'vxlan_vtep_vni'
25
25
  @@pre_clean_needed = true # rubocop:disable Style/ClassVars
26
+ @@feature_unsupported = false # rubocop:disable Style/ClassVars
26
27
 
27
28
  def setup
28
29
  super
30
+ skip('setup: Feature is unsupported on this device') if @@feature_unsupported
29
31
  vdc_limit_f3_no_intf_needed(:set) if VxlanVtep.mt_full_support
30
32
  Interface.interfaces(:nve).each { |_nve, obj| obj.destroy }
31
33
  feature_cleanup if @@pre_clean_needed
32
34
  Feature.nv_overlay_enable
33
35
  config_no_warn('feature vn-segment-vlan-based') if VxlanVtep.mt_lite_support
34
36
  @@pre_clean_needed = false # rubocop:disable Style/ClassVars
37
+ rescue RuntimeError => e
38
+ # Skip locally to shortcut the dependencies above for the next test
39
+ @@feature_unsupported = hardware_supports_feature?(e.message, status_only: true) # rubocop:disable Style/ClassVars
40
+ @@feature_unsupported ? skip(e.message) : raise(e.message)
35
41
  end
36
42
 
37
43
  def teardown
@@ -237,6 +243,34 @@ class TestVxlanVtepVni < CiscoTestCase
237
243
  refute(vni.suppress_arp, 'suppress_arp should be disabled')
238
244
  end
239
245
 
246
+ def test_suppress_arp_disable
247
+ skip_incompat_version?('vxlan_vtep_vni', 'suppress_arp_disable')
248
+ vni = VxlanVtepVni.new('nve1', '6000')
249
+ VxlanVtep.new('nve1').host_reachability = 'evpn'
250
+
251
+ if validate_property_excluded?('vxlan_vtep_vni', 'suppress_arp_disable')
252
+ assert_raises(Cisco::UnsupportedError) { vni.suppress_arp_disable = true }
253
+ return
254
+ end
255
+
256
+ # Test: Check suppress_arp_disable is not configured.
257
+ refute(vni.suppress_arp_disable, 'suppress_arp_disable should be disabled')
258
+
259
+ begin
260
+ # Test: Enable suppress_arp_disable
261
+ vni.suppress_arp_disable = true
262
+ assert(vni.suppress_arp_disable, 'suppress_arp_disable should be enabled')
263
+ rescue CliError => e
264
+ msg = 'TCAM reconfiguration required followed by reload' \
265
+ " Skipping test case.\n#{e}"
266
+ skip(msg) if /ERROR: Please configure TCAM/.match(e.to_s)
267
+ end
268
+
269
+ # Test: Default
270
+ vni.suppress_arp_disable = vni.default_suppress_arp_disable
271
+ refute(vni.suppress_arp_disable, 'suppress_arp_disable should be disabled')
272
+ end
273
+
240
274
  def test_suppress_uuc
241
275
  vni = VxlanVtepVni.new('nve1', '6000')
242
276
  VxlanVtep.new('nve1').host_reachability = 'evpn'
@@ -43,6 +43,11 @@
43
43
  name: 'nxos.sample-n9k_EOR'
44
44
  version: '1.0.0-7.0.3.I4.6'
45
45
 
46
+ 7_0_3_I4_8_:
47
+ filename: 'nxos.sample-n9k_EOR-1.0.0-7.0.3.I4.8.lib32_n9000.rpm'
48
+ name: 'nxos.sample-n9k_EOR'
49
+ version: '1.0.0-7.0.3.I4.8'
50
+
46
51
  7_0_3_I5_1_:
47
52
  filename: 'nxos.sample-n9k_ALL-1.0.0-7.0.3.I5.1.lib32_n9000.rpm'
48
53
  name: 'nxos.sample-n9k_ALL'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cisco_node_utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.10.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rob Gries
@@ -15,7 +15,7 @@ authors:
15
15
  autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
- date: 2018-09-19 00:00:00.000000000 Z
18
+ date: 2019-02-14 00:00:00.000000000 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: bundler
@@ -517,7 +517,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
517
517
  version: 2.1.0
518
518
  requirements: []
519
519
  rubyforge_project:
520
- rubygems_version: 2.2.2
520
+ rubygems_version: 2.5.2.1
521
521
  signing_key:
522
522
  specification_version: 4
523
523
  summary: Utilities for management of Cisco network nodes