cisco_node_utils 1.10.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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