rbeapi 0.2.0 → 0.3.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.
- data/.gitignore +1 -0
- data/CHANGELOG.md +12 -0
- data/Gemfile +4 -0
- data/README.md +9 -9
- data/Rakefile +20 -0
- data/lib/rbeapi/api/bgp.rb +770 -0
- data/lib/rbeapi/api/dns.rb +32 -31
- data/lib/rbeapi/api/interfaces.rb +106 -87
- data/lib/rbeapi/api/ipinterfaces.rb +27 -42
- data/lib/rbeapi/api/logging.rb +9 -19
- data/lib/rbeapi/api/mlag.rb +60 -90
- data/lib/rbeapi/api/ntp.rb +12 -17
- data/lib/rbeapi/api/ospf.rb +9 -26
- data/lib/rbeapi/api/radius.rb +29 -43
- data/lib/rbeapi/api/snmp.rb +54 -83
- data/lib/rbeapi/api/staticroutes.rb +68 -21
- data/lib/rbeapi/api/stp.rb +41 -49
- data/lib/rbeapi/api/switchports.rb +41 -68
- data/lib/rbeapi/api/system.rb +6 -12
- data/lib/rbeapi/api/tacacs.rb +12 -21
- data/lib/rbeapi/api/varp.rb +25 -26
- data/lib/rbeapi/api/vlans.rb +19 -28
- data/lib/rbeapi/api.rb +30 -21
- data/lib/rbeapi/client.rb +3 -1
- data/lib/rbeapi/version.rb +1 -1
- data/rbeapi.spec.tmpl +4 -0
- data/spec/spec_helper.rb +8 -0
- data/spec/system/api_ospf_interfaces_spec.rb +16 -0
- data/spec/system/api_ospf_spec.rb +14 -0
- data/spec/system/api_varp_interfaces_spec.rb +16 -0
- data/spec/system/rbeapi/api/dns_spec.rb +66 -0
- data/spec/system/rbeapi/api/interfaces_base_spec.rb +4 -4
- data/spec/system/rbeapi/api/interfaces_ethernet_spec.rb +6 -6
- data/spec/system/rbeapi/api/interfaces_portchannel_spec.rb +6 -6
- data/spec/system/rbeapi/api/interfaces_vxlan_spec.rb +4 -4
- data/spec/system/rbeapi/api/ipinterfaces_spec.rb +44 -0
- data/spec/system/rbeapi/api/logging_spec.rb +18 -2
- data/spec/system/rbeapi/api/mlag_spec.rb +94 -2
- data/spec/system/rbeapi/api/ntp_spec.rb +14 -0
- data/spec/system/rbeapi/api/snmp_spec.rb +105 -0
- data/spec/system/rbeapi/api/stp_interfaces_spec.rb +43 -6
- data/spec/system/rbeapi/api/stp_spec.rb +18 -6
- data/spec/system/rbeapi/api/switchports_spec.rb +75 -3
- data/spec/system/rbeapi/api/system_spec.rb +16 -0
- data/spec/system/rbeapi/api/vlans_spec.rb +28 -0
- data/spec/unit/rbeapi/api/bgp/bgp_neighbors_spec.rb +289 -0
- data/spec/unit/rbeapi/api/bgp/bgp_spec.rb +192 -0
- data/spec/unit/rbeapi/api/bgp/fixture_bgp.text +101 -0
- data/spec/unit/rbeapi/api/interfaces/base_spec.rb +7 -13
- data/spec/unit/rbeapi/api/interfaces/ethernet_spec.rb +3 -3
- data/spec/unit/rbeapi/api/interfaces/portchannel_spec.rb +11 -16
- data/spec/unit/rbeapi/api/interfaces/vxlan_spec.rb +15 -21
- data/spec/unit/rbeapi/api/mlag/default_spec.rb +13 -19
- data/spec/unit/rbeapi/api/staticroutes/default_spec.rb +138 -0
- data/spec/unit/rbeapi/api/staticroutes/fixture_staticroutes.text +5 -0
- data/spec/unit/rbeapi/api/vlans/default_spec.rb +4 -4
- metadata +15 -4
@@ -0,0 +1,289 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2015, Arista Networks, Inc.
|
3
|
+
# All rights reserved.
|
4
|
+
#
|
5
|
+
# Redistribution and use in source and binary forms, with or without
|
6
|
+
# modification, are permitted provided that the following conditions are
|
7
|
+
# met:
|
8
|
+
#
|
9
|
+
# Redistributions of source code must retain the above copyright notice,
|
10
|
+
# this list of conditions and the following disclaimer.
|
11
|
+
#
|
12
|
+
# Redistributions in binary form must reproduce the above copyright
|
13
|
+
# notice, this list of conditions and the following disclaimer in the
|
14
|
+
# documentation and/or other materials provided with the distribution.
|
15
|
+
#
|
16
|
+
# Neither the name of Arista Networks nor the names of its
|
17
|
+
# contributors may be used to endorse or promote products derived from
|
18
|
+
# this software without specific prior written permission.
|
19
|
+
#
|
20
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
21
|
+
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
22
|
+
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
23
|
+
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ARISTA NETWORKS
|
24
|
+
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
25
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
26
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
27
|
+
# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
28
|
+
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
29
|
+
# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
30
|
+
# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
31
|
+
#
|
32
|
+
require 'spec_helper'
|
33
|
+
|
34
|
+
require 'rbeapi/api/bgp'
|
35
|
+
|
36
|
+
include FixtureHelpers
|
37
|
+
|
38
|
+
describe Rbeapi::Api::BgpNeighbors do
|
39
|
+
subject { described_class.new(node) }
|
40
|
+
|
41
|
+
let(:node) { double('node') }
|
42
|
+
|
43
|
+
let(:test) do
|
44
|
+
{ bgp_as: '64600',
|
45
|
+
router_id: '192.168.254.1',
|
46
|
+
shutdown: false,
|
47
|
+
networks: [
|
48
|
+
{ prefix: '192.168.254.1', masklen: 32, route_map: nil },
|
49
|
+
{ prefix: '192.168.254.2', masklen: 32, route_map: 'rmap' },
|
50
|
+
{ prefix: '192.168.254.3', masklen: 32, route_map: nil }
|
51
|
+
],
|
52
|
+
neighbors: {
|
53
|
+
'eBGP_GROUP' => {
|
54
|
+
peer_group: nil, remote_as: nil, send_community: false,
|
55
|
+
shutdown: false, description: nil, next_hop_self: false,
|
56
|
+
route_map_in: nil, route_map_out: nil
|
57
|
+
},
|
58
|
+
'192.168.255.1' => {
|
59
|
+
peer_group: 'eBGP_GROUP', remote_as: '65000', send_community: true,
|
60
|
+
shutdown: true, description: nil, next_hop_self: true,
|
61
|
+
route_map_in: nil, route_map_out: nil
|
62
|
+
},
|
63
|
+
'192.168.255.3' => {
|
64
|
+
peer_group: 'eBGP_GROUP', remote_as: '65001', send_community: true,
|
65
|
+
shutdown: true, description: nil, next_hop_self: true,
|
66
|
+
route_map_in: nil, route_map_out: nil
|
67
|
+
}
|
68
|
+
}
|
69
|
+
}
|
70
|
+
end
|
71
|
+
let(:bgp_as) { test[:bgp_as] }
|
72
|
+
|
73
|
+
def bgp
|
74
|
+
bgp = Fixtures[:bgp]
|
75
|
+
return bgp if bgp
|
76
|
+
fixture('bgp', format: :text, dir: File.dirname(__FILE__))
|
77
|
+
end
|
78
|
+
|
79
|
+
before :each do
|
80
|
+
allow(subject.node).to receive(:running_config).and_return(bgp)
|
81
|
+
end
|
82
|
+
|
83
|
+
describe '#get' do
|
84
|
+
it 'returns the BGP neighbor resource' do
|
85
|
+
expect(subject.get('eBGP_GROUP')).to eq(test[:neighbors]['eBGP_GROUP'])
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe '#getall' do
|
90
|
+
it 'returns all the neighbors' do
|
91
|
+
expect(subject.getall).to eq(test[:neighbors])
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'returns a hash collection' do
|
95
|
+
expect(subject.getall).to be_a_kind_of(Hash)
|
96
|
+
end
|
97
|
+
|
98
|
+
it 'has three entries' do
|
99
|
+
expect(subject.getall.size).to eq(3)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
describe '#create' do
|
104
|
+
it 'create a new BGP neighbor' do
|
105
|
+
expect(node).to receive(:config).with(['router bgp 64600',
|
106
|
+
'neighbor edge shutdown'])
|
107
|
+
expect(subject.create('edge')).to be_truthy
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
describe '#delete' do
|
112
|
+
it 'delete a BGP resource' do
|
113
|
+
expect(node).to receive(:config).with(['router bgp 64600',
|
114
|
+
'neighbor edge shutdown'])
|
115
|
+
expect(subject.create('edge')).to be_truthy
|
116
|
+
expect(node).to receive(:config).with(['router bgp 64600',
|
117
|
+
'no neighbor edge'])
|
118
|
+
expect(subject.delete('edge')).to be_truthy
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
describe '#set_peer_group' do
|
123
|
+
it 'set the peer group' do
|
124
|
+
expect(node).to receive(:config).with(['router bgp 64600',
|
125
|
+
'neighbor eng peer-group 1.2.3.4'])
|
126
|
+
expect(subject.set_peer_group('eng', value: '1.2.3.4')).to be_truthy
|
127
|
+
end
|
128
|
+
|
129
|
+
it 'remove the peer group value' do
|
130
|
+
expect(node).to receive(:config).with(['router bgp 64600',
|
131
|
+
'no neighbor eng peer-group'])
|
132
|
+
expect(subject.set_peer_group('eng', enable: false))
|
133
|
+
.to be_truthy
|
134
|
+
end
|
135
|
+
|
136
|
+
it 'defaults the peer group value' do
|
137
|
+
expect(node).to receive(:config).with(['router bgp 64600',
|
138
|
+
'default neighbor eng peer-group'])
|
139
|
+
expect(subject.set_peer_group('eng', default: true))
|
140
|
+
.to be_truthy
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
describe '#set_remote_as' do
|
145
|
+
it 'set the remote AS value' do
|
146
|
+
expect(node).to receive(:config).with(['router bgp 64600',
|
147
|
+
'neighbor eng remote-as 10'])
|
148
|
+
expect(subject.set_remote_as('eng', value: '10')).to be_truthy
|
149
|
+
end
|
150
|
+
|
151
|
+
it 'remove the remote AS value' do
|
152
|
+
expect(node).to receive(:config).with(['router bgp 64600',
|
153
|
+
'no neighbor eng remote-as'])
|
154
|
+
expect(subject.set_remote_as('eng', enable: false))
|
155
|
+
.to be_truthy
|
156
|
+
end
|
157
|
+
|
158
|
+
it 'defaults the remote AS value' do
|
159
|
+
expect(node).to receive(:config).with(['router bgp 64600',
|
160
|
+
'default neighbor eng remote-as'])
|
161
|
+
expect(subject.set_remote_as('eng', default: true))
|
162
|
+
.to be_truthy
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
describe '#set_shutdown' do
|
167
|
+
it 'shutdown neighbor' do
|
168
|
+
expect(node).to receive(:config).with(['router bgp 64600',
|
169
|
+
'neighbor eng shutdown'])
|
170
|
+
expect(subject.set_shutdown('eng')).to be_truthy
|
171
|
+
end
|
172
|
+
|
173
|
+
it 'negate shutdown neighbor' do
|
174
|
+
expect(node).to receive(:config).with(['router bgp 64600',
|
175
|
+
'neighbor eng shutdown'])
|
176
|
+
expect(subject.set_shutdown('eng', enable: false)).to be_truthy
|
177
|
+
end
|
178
|
+
|
179
|
+
it 'default shutdown neighbor' do
|
180
|
+
expect(node).to receive(:config).with(['router bgp 64600',
|
181
|
+
'default neighbor eng shutdown'])
|
182
|
+
expect(subject.set_shutdown('eng', default: true)).to be_truthy
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
describe '#set_send_community' do
|
187
|
+
it 'enable neighbor send community' do
|
188
|
+
expect(node).to receive(:config).with(['router bgp 64600',
|
189
|
+
'neighbor eng send-community'])
|
190
|
+
expect(subject.set_send_community('eng')).to be_truthy
|
191
|
+
end
|
192
|
+
|
193
|
+
it 'negate neighbor send community' do
|
194
|
+
expect(node).to receive(:config).with(['router bgp 64600',
|
195
|
+
'no neighbor eng send-community'])
|
196
|
+
expect(subject.set_send_community('eng', enable: false)).to be_truthy
|
197
|
+
end
|
198
|
+
|
199
|
+
it 'default neighbor send community' do
|
200
|
+
expect(node).to receive(:config)
|
201
|
+
.with(['router bgp 64600', 'default neighbor eng send-community'])
|
202
|
+
expect(subject.set_send_community('eng', default: true)).to be_truthy
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
describe '#set_next_hop_self' do
|
207
|
+
it 'enable neighbor next hop self' do
|
208
|
+
expect(node).to receive(:config).with(['router bgp 64600',
|
209
|
+
'neighbor eng next-hop-self'])
|
210
|
+
expect(subject.set_next_hop_self('eng')).to be_truthy
|
211
|
+
end
|
212
|
+
|
213
|
+
it 'negate neighbor next hop self' do
|
214
|
+
expect(node).to receive(:config).with(['router bgp 64600',
|
215
|
+
'no neighbor eng next-hop-self'])
|
216
|
+
expect(subject.set_next_hop_self('eng', enable: false)).to be_truthy
|
217
|
+
end
|
218
|
+
|
219
|
+
it 'default neighbor next hop self' do
|
220
|
+
expect(node).to receive(:config)
|
221
|
+
.with(['router bgp 64600', 'default neighbor eng next-hop-self'])
|
222
|
+
expect(subject.set_next_hop_self('eng', default: true)).to be_truthy
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
describe '#set_route_map_in' do
|
227
|
+
it 'set route map in value' do
|
228
|
+
expect(node).to receive(:config).with(['router bgp 64600',
|
229
|
+
'neighbor eng route-map edge in'])
|
230
|
+
expect(subject.set_route_map_in('eng', value: 'edge')).to be_truthy
|
231
|
+
end
|
232
|
+
|
233
|
+
it 'negate route map in value' do
|
234
|
+
expect(node).to receive(:config)
|
235
|
+
.with(['router bgp 64600', 'no neighbor eng route-map edge in'])
|
236
|
+
expect(subject.set_route_map_in('eng', value: 'edge', enable: false))
|
237
|
+
.to be_truthy
|
238
|
+
end
|
239
|
+
|
240
|
+
it 'default route map in value' do
|
241
|
+
expect(node).to receive(:config)
|
242
|
+
.with(['router bgp 64600', 'default neighbor eng route-map edge in'])
|
243
|
+
expect(subject.set_route_map_in('eng', value: 'edge', default: true))
|
244
|
+
.to be_truthy
|
245
|
+
end
|
246
|
+
end
|
247
|
+
|
248
|
+
describe '#set_route_map_out' do
|
249
|
+
it 'set route map out value' do
|
250
|
+
expect(node).to receive(:config).with(['router bgp 64600',
|
251
|
+
'neighbor eng route-map edge out'])
|
252
|
+
expect(subject.set_route_map_out('eng', value: 'edge')).to be_truthy
|
253
|
+
end
|
254
|
+
|
255
|
+
it 'negate route map out value' do
|
256
|
+
expect(node).to receive(:config)
|
257
|
+
.with(['router bgp 64600', 'no neighbor eng route-map edge out'])
|
258
|
+
expect(subject.set_route_map_out('eng', value: 'edge', enable: false))
|
259
|
+
.to be_truthy
|
260
|
+
end
|
261
|
+
|
262
|
+
it 'default route map out value' do
|
263
|
+
expect(node).to receive(:config)
|
264
|
+
.with(['router bgp 64600', 'default neighbor eng route-map edge out'])
|
265
|
+
expect(subject.set_route_map_out('eng', value: 'edge', default: true))
|
266
|
+
.to be_truthy
|
267
|
+
end
|
268
|
+
end
|
269
|
+
|
270
|
+
describe '#set_description' do
|
271
|
+
it 'set the description value' do
|
272
|
+
expect(node).to receive(:config).with(['router bgp 64600',
|
273
|
+
'neighbor eng description text'])
|
274
|
+
expect(subject.set_description('eng', value: 'text')).to be_truthy
|
275
|
+
end
|
276
|
+
|
277
|
+
it 'negate the description value' do
|
278
|
+
expect(node).to receive(:config)
|
279
|
+
.with(['router bgp 64600', 'no neighbor eng description'])
|
280
|
+
expect(subject.set_description('eng', enable: false)).to be_truthy
|
281
|
+
end
|
282
|
+
|
283
|
+
it 'defaults the description value' do
|
284
|
+
expect(node).to receive(:config)
|
285
|
+
.with(['router bgp 64600', 'default neighbor eng description'])
|
286
|
+
expect(subject.set_description('eng', default: true)).to be_truthy
|
287
|
+
end
|
288
|
+
end
|
289
|
+
end
|
@@ -0,0 +1,192 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2015, Arista Networks, Inc.
|
3
|
+
# All rights reserved.
|
4
|
+
#
|
5
|
+
# Redistribution and use in source and binary forms, with or without
|
6
|
+
# modification, are permitted provided that the following conditions are
|
7
|
+
# met:
|
8
|
+
#
|
9
|
+
# Redistributions of source code must retain the above copyright notice,
|
10
|
+
# this list of conditions and the following disclaimer.
|
11
|
+
#
|
12
|
+
# Redistributions in binary form must reproduce the above copyright
|
13
|
+
# notice, this list of conditions and the following disclaimer in the
|
14
|
+
# documentation and/or other materials provided with the distribution.
|
15
|
+
#
|
16
|
+
# Neither the name of Arista Networks nor the names of its
|
17
|
+
# contributors may be used to endorse or promote products derived from
|
18
|
+
# this software without specific prior written permission.
|
19
|
+
#
|
20
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
21
|
+
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
22
|
+
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
23
|
+
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ARISTA NETWORKS
|
24
|
+
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
25
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
26
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
27
|
+
# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
28
|
+
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
29
|
+
# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
30
|
+
# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
31
|
+
#
|
32
|
+
require 'spec_helper'
|
33
|
+
|
34
|
+
require 'rbeapi/api/bgp'
|
35
|
+
|
36
|
+
include FixtureHelpers
|
37
|
+
|
38
|
+
describe Rbeapi::Api::Bgp do
|
39
|
+
subject { described_class.new(node) }
|
40
|
+
|
41
|
+
let(:node) { double('node') }
|
42
|
+
|
43
|
+
let(:test) do
|
44
|
+
{ bgp_as: '64600',
|
45
|
+
router_id: '192.168.254.1',
|
46
|
+
shutdown: false,
|
47
|
+
networks: [
|
48
|
+
{ prefix: '192.168.254.1', masklen: 32, route_map: nil },
|
49
|
+
{ prefix: '192.168.254.2', masklen: 32, route_map: 'rmap' },
|
50
|
+
{ prefix: '192.168.254.3', masklen: 32, route_map: nil }
|
51
|
+
],
|
52
|
+
neighbors: {
|
53
|
+
'eBGP_GROUP' => {
|
54
|
+
peer_group: nil, remote_as: nil, send_community: false,
|
55
|
+
shutdown: false, description: nil, next_hop_self: false,
|
56
|
+
route_map_in: nil, route_map_out: nil
|
57
|
+
},
|
58
|
+
'192.168.255.1' => {
|
59
|
+
peer_group: 'eBGP_GROUP', remote_as: '65000', send_community: true,
|
60
|
+
shutdown: true, description: nil, next_hop_self: true,
|
61
|
+
route_map_in: nil, route_map_out: nil
|
62
|
+
},
|
63
|
+
'192.168.255.3' => {
|
64
|
+
peer_group: 'eBGP_GROUP', remote_as: '65001', send_community: true,
|
65
|
+
shutdown: true, description: nil, next_hop_self: true,
|
66
|
+
route_map_in: nil, route_map_out: nil
|
67
|
+
}
|
68
|
+
}
|
69
|
+
}
|
70
|
+
end
|
71
|
+
let(:bgp_as) { test[:bgp_as] }
|
72
|
+
|
73
|
+
def bgp
|
74
|
+
bgp = Fixtures[:bgp]
|
75
|
+
return bgp if bgp
|
76
|
+
fixture('bgp', format: :text, dir: File.dirname(__FILE__))
|
77
|
+
end
|
78
|
+
|
79
|
+
before :each do
|
80
|
+
allow(subject.node).to receive(:running_config).and_return(bgp)
|
81
|
+
end
|
82
|
+
|
83
|
+
describe '#get' do
|
84
|
+
it 'returns the BGP resource' do
|
85
|
+
expect(subject.get).to eq(test)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe '#create' do
|
90
|
+
it 'create a new BGP resource' do
|
91
|
+
expect(node).to receive(:config).with('router bgp 1000')
|
92
|
+
expect(subject.create('1000')).to be_truthy
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
describe '#delete' do
|
97
|
+
it 'delete a BGP resource' do
|
98
|
+
expect(node).to receive(:config).with("no router bgp #{bgp_as}")
|
99
|
+
expect(subject.delete).to be_truthy
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
describe '#default' do
|
104
|
+
it 'sets router to default value' do
|
105
|
+
expect(node).to receive(:config)
|
106
|
+
.with('default router bgp 64600')
|
107
|
+
expect(subject.default).to be_truthy
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
describe '#set_router_id' do
|
112
|
+
it 'set the router id' do
|
113
|
+
expect(node).to receive(:config).with(['router bgp 64600',
|
114
|
+
'router-id 1.2.3.4'])
|
115
|
+
expect(subject.set_router_id(value: '1.2.3.4')).to be_truthy
|
116
|
+
end
|
117
|
+
|
118
|
+
it 'remove the router-id without a value' do
|
119
|
+
expect(node).to receive(:config).with(['router bgp 64600',
|
120
|
+
'no router-id'])
|
121
|
+
expect(subject.set_router_id(enable: false)).to be_truthy
|
122
|
+
end
|
123
|
+
|
124
|
+
it 'remove the router-id with a value' do
|
125
|
+
expect(node).to receive(:config).with(['router bgp 64600',
|
126
|
+
'no router-id 1.2.3.4'])
|
127
|
+
expect(subject.set_router_id(value: '1.2.3.4', enable: false))
|
128
|
+
.to be_truthy
|
129
|
+
end
|
130
|
+
|
131
|
+
it 'defaults the router-id without a value' do
|
132
|
+
expect(node).to receive(:config).with(['router bgp 64600',
|
133
|
+
'default router-id'])
|
134
|
+
expect(subject.set_router_id(default: true)).to be_truthy
|
135
|
+
end
|
136
|
+
|
137
|
+
it 'defaults the router-id with a value' do
|
138
|
+
expect(node).to receive(:config).with(['router bgp 64600',
|
139
|
+
'default router-id 1.2.3.4'])
|
140
|
+
expect(subject.set_router_id(value: '1.2.3.4', default: true))
|
141
|
+
.to be_truthy
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
describe '#set_shutdown' do
|
146
|
+
it 'enable BGP routing process' do
|
147
|
+
expect(node).to receive(:config).with(['router bgp 64600',
|
148
|
+
'no shutdown'])
|
149
|
+
expect(subject.set_shutdown(enable: true)).to be_truthy
|
150
|
+
end
|
151
|
+
|
152
|
+
it 'disable BGP routing process' do
|
153
|
+
expect(node).to receive(:config).with(['router bgp 64600',
|
154
|
+
'shutdown'])
|
155
|
+
expect(subject.set_shutdown(enable: false)).to be_truthy
|
156
|
+
end
|
157
|
+
|
158
|
+
it 'default BGP routing process state' do
|
159
|
+
expect(node).to receive(:config).with(['router bgp 64600',
|
160
|
+
'default shutdown'])
|
161
|
+
expect(subject.set_shutdown(default: true)).to be_truthy
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
describe '#add_network' do
|
166
|
+
it 'add a BGP network with a route map' do
|
167
|
+
expect(node).to receive(:config)
|
168
|
+
.with(['router bgp 64600', 'network 1.2.3.0/24 route-map eng'])
|
169
|
+
expect(subject.add_network('1.2.3.0', 24, 'eng')).to be_truthy
|
170
|
+
end
|
171
|
+
|
172
|
+
it 'add a BGP network without a route map' do
|
173
|
+
expect(node).to receive(:config).with(['router bgp 64600',
|
174
|
+
'network 1.2.3.0/24'])
|
175
|
+
expect(subject.add_network('1.2.3.0', 24)).to be_truthy
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
describe '#remove_network' do
|
180
|
+
it 'remove a BGP network with a route map' do
|
181
|
+
expect(node).to receive(:config)
|
182
|
+
.with(['router bgp 64600', 'no network 1.2.3.0/24 route-map eng'])
|
183
|
+
expect(subject.remove_network('1.2.3.0', 24, 'eng')).to be_truthy
|
184
|
+
end
|
185
|
+
|
186
|
+
it 'remove a BGP network without a route map' do
|
187
|
+
expect(node).to receive(:config).with(['router bgp 64600',
|
188
|
+
'no network 1.2.3.0/24'])
|
189
|
+
expect(subject.remove_network('1.2.3.0', 24)).to be_truthy
|
190
|
+
end
|
191
|
+
end
|
192
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
router bgp 64600
|
2
|
+
no shutdown
|
3
|
+
router-id 192.168.254.1
|
4
|
+
bgp convergence time 300
|
5
|
+
bgp convergence slow-peer time 90
|
6
|
+
no bgp confederation identifier
|
7
|
+
no update wait-for-convergence
|
8
|
+
no update wait-install
|
9
|
+
bgp log-neighbor-changes
|
10
|
+
bgp default ipv4-unicast
|
11
|
+
no bgp default ipv6-unicast
|
12
|
+
timers bgp 60 180
|
13
|
+
distance bgp 20 200 200
|
14
|
+
graceful-restart stalepath-time 300
|
15
|
+
no bgp cluster-id
|
16
|
+
bgp client-to-client reflection
|
17
|
+
graceful-restart-helper
|
18
|
+
bgp peer-mac-resolution-timeout 0
|
19
|
+
bgp enforce-first-as
|
20
|
+
no default-metric
|
21
|
+
no bgp always-compare-med
|
22
|
+
no bgp bestpath med missing-as-worst
|
23
|
+
no bgp bestpath med confed
|
24
|
+
no bgp host-routes fib direct-install
|
25
|
+
maximum-paths 32 ecmp 32
|
26
|
+
bgp listen limit 1000
|
27
|
+
no bgp aspath-cmp-include-nexthop
|
28
|
+
no bgp tie-break-on-age
|
29
|
+
no bgp tie-break-on-router-id
|
30
|
+
no bgp tie-break-on-originator-id
|
31
|
+
no bgp tie-break-on-cluster-list-length
|
32
|
+
neighbor eBGP_GROUP peer-group
|
33
|
+
no neighbor eBGP_GROUP remote-as
|
34
|
+
no neighbor eBGP_GROUP import-localpref
|
35
|
+
no neighbor eBGP_GROUP export-localpref
|
36
|
+
no neighbor eBGP_GROUP description
|
37
|
+
no neighbor eBGP_GROUP next-hop-self
|
38
|
+
no neighbor eBGP_GROUP next-hop-peer
|
39
|
+
no neighbor eBGP_GROUP allowas-in
|
40
|
+
no neighbor eBGP_GROUP send-community
|
41
|
+
no neighbor eBGP_GROUP shutdown
|
42
|
+
no neighbor eBGP_GROUP remove-private-as
|
43
|
+
no neighbor eBGP_GROUP out-delay
|
44
|
+
no neighbor eBGP_GROUP local-as
|
45
|
+
no neighbor eBGP_GROUP weight
|
46
|
+
no neighbor eBGP_GROUP transport connection-mode passive
|
47
|
+
no neighbor eBGP_GROUP update-source
|
48
|
+
no neighbor eBGP_GROUP dont-capability-negotiate
|
49
|
+
neighbor eBGP_GROUP fall-over bfd
|
50
|
+
no neighbor eBGP_GROUP local-v6-addr
|
51
|
+
neighbor eBGP_GROUP soft-reconfiguration inbound
|
52
|
+
no neighbor eBGP_GROUP ebgp-multihop
|
53
|
+
no neighbor eBGP_GROUP route-reflector-client
|
54
|
+
no neighbor eBGP_GROUP timers
|
55
|
+
no neighbor eBGP_GROUP route-map in
|
56
|
+
neighbor eBGP_GROUP graceful-restart-helper
|
57
|
+
no neighbor eBGP_GROUP route-map out
|
58
|
+
no neighbor eBGP_GROUP prefix-list in
|
59
|
+
no neighbor eBGP_GROUP prefix-list out
|
60
|
+
neighbor eBGP_GROUP password 7 6C/HkrwJ53+dsHumQf49Wg==
|
61
|
+
no neighbor eBGP_GROUP default-originate
|
62
|
+
neighbor eBGP_GROUP enforce-first-as
|
63
|
+
no neighbor eBGP_GROUP metric-out
|
64
|
+
neighbor eBGP_GROUP maximum-routes 12000
|
65
|
+
neighbor 192.168.255.1 peer-group eBGP_GROUP
|
66
|
+
neighbor 192.168.255.1 remote-as 65000
|
67
|
+
neighbor 192.168.255.3 peer-group eBGP_GROUP
|
68
|
+
neighbor 192.168.255.3 remote-as 65001
|
69
|
+
network 192.168.254.1/32
|
70
|
+
network 192.168.254.2/32 route-map rmap
|
71
|
+
network 192.168.254.3/32 rmap
|
72
|
+
bgp redistribute-internal
|
73
|
+
aggregate-address 192.168.255.0/28 summary-only
|
74
|
+
no redistribute connected
|
75
|
+
no redistribute ospf match internal
|
76
|
+
no redistribute ospf match external
|
77
|
+
no redistribute ospf match nssa-external
|
78
|
+
no redistribute ospf3 match internal
|
79
|
+
no redistribute ospf3 match external
|
80
|
+
no redistribute static
|
81
|
+
no redistribute rip
|
82
|
+
no redistribute aggregate
|
83
|
+
address-family ipv4
|
84
|
+
default neighbor eBGP_GROUP activate
|
85
|
+
no neighbor eBGP_GROUP route-map in
|
86
|
+
no neighbor eBGP_GROUP route-map out
|
87
|
+
no neighbor eBGP_GROUP default-originate
|
88
|
+
default neighbor 192.168.255.1 activate
|
89
|
+
default neighbor 192.168.255.3 activate
|
90
|
+
!
|
91
|
+
address-family ipv6
|
92
|
+
default neighbor eBGP_GROUP activate
|
93
|
+
no neighbor eBGP_GROUP route-map in
|
94
|
+
no neighbor eBGP_GROUP route-map out
|
95
|
+
no neighbor eBGP_GROUP prefix-list in
|
96
|
+
no neighbor eBGP_GROUP prefix-list out
|
97
|
+
no neighbor eBGP_GROUP default-originate
|
98
|
+
default neighbor 192.168.255.1 activate
|
99
|
+
default neighbor 192.168.255.3 activate
|
100
|
+
!
|
101
|
+
!
|
@@ -71,7 +71,7 @@ describe Rbeapi::Api::BaseInterface do
|
|
71
71
|
it 'negates the interface description' do
|
72
72
|
expect(node).to receive(:config).with(['interface Loopback0',
|
73
73
|
'no description'])
|
74
|
-
expect(subject.set_description('Loopback0')).to be_truthy
|
74
|
+
expect(subject.set_description('Loopback0', enable: false)).to be_truthy
|
75
75
|
end
|
76
76
|
|
77
77
|
it 'defaults the interface description' do
|
@@ -80,10 +80,10 @@ describe Rbeapi::Api::BaseInterface do
|
|
80
80
|
expect(subject.set_description('Loopback0', default: true)).to be_truthy
|
81
81
|
end
|
82
82
|
|
83
|
-
it 'default is preferred over
|
83
|
+
it 'default is preferred over enable' do
|
84
84
|
expect(node).to receive(:config).with(['interface Loopback0',
|
85
85
|
'default description'])
|
86
|
-
expect(subject.set_description('Loopback0',
|
86
|
+
expect(subject.set_description('Loopback0', enable: false,
|
87
87
|
default: true)).to be_truthy
|
88
88
|
end
|
89
89
|
end
|
@@ -92,19 +92,13 @@ describe Rbeapi::Api::BaseInterface do
|
|
92
92
|
it 'enables the interface' do
|
93
93
|
expect(node).to receive(:config).with(['interface Loopback0',
|
94
94
|
'no shutdown'])
|
95
|
-
expect(subject.set_shutdown('Loopback0',
|
95
|
+
expect(subject.set_shutdown('Loopback0', enable: true)).to be_truthy
|
96
96
|
end
|
97
97
|
|
98
98
|
it 'disables the interface' do
|
99
99
|
expect(node).to receive(:config).with(['interface Loopback0',
|
100
100
|
'shutdown'])
|
101
|
-
expect(subject.set_shutdown('Loopback0',
|
102
|
-
end
|
103
|
-
|
104
|
-
it 'negates the interface description' do
|
105
|
-
expect(node).to receive(:config).with(['interface Loopback0',
|
106
|
-
'no shutdown'])
|
107
|
-
expect(subject.set_shutdown('Loopback0')).to be_truthy
|
101
|
+
expect(subject.set_shutdown('Loopback0', enable: false)).to be_truthy
|
108
102
|
end
|
109
103
|
|
110
104
|
it 'defaults the interface state' do
|
@@ -113,10 +107,10 @@ describe Rbeapi::Api::BaseInterface do
|
|
113
107
|
expect(subject.set_shutdown('Loopback0', default: true)).to be_truthy
|
114
108
|
end
|
115
109
|
|
116
|
-
it 'default is preferred over
|
110
|
+
it 'default is preferred over enable' do
|
117
111
|
expect(node).to receive(:config).with(['interface Loopback0',
|
118
112
|
'default shutdown'])
|
119
|
-
expect(subject.set_shutdown('Loopback0',
|
113
|
+
expect(subject.set_shutdown('Loopback0', enable: false,
|
120
114
|
default: true)).to be_truthy
|
121
115
|
end
|
122
116
|
end
|
@@ -70,7 +70,7 @@ describe Rbeapi::Api::EthernetInterface do
|
|
70
70
|
it 'negates the interface description' do
|
71
71
|
expect(node).to receive(:config).with(['interface Ethernet1',
|
72
72
|
'no description'])
|
73
|
-
expect(subject.set_description('Ethernet1')).to be_truthy
|
73
|
+
expect(subject.set_description('Ethernet1', enable: false)).to be_truthy
|
74
74
|
end
|
75
75
|
|
76
76
|
it 'defaults the interface description' do
|
@@ -79,10 +79,10 @@ describe Rbeapi::Api::EthernetInterface do
|
|
79
79
|
expect(subject.set_description('Ethernet1', default: true)).to be_truthy
|
80
80
|
end
|
81
81
|
|
82
|
-
it 'default is preferred over
|
82
|
+
it 'default is preferred over enable' do
|
83
83
|
expect(node).to receive(:config).with(['interface Ethernet1',
|
84
84
|
'default description'])
|
85
|
-
expect(subject.set_description('Ethernet1',
|
85
|
+
expect(subject.set_description('Ethernet1', enable: false,
|
86
86
|
default: true)).to be_truthy
|
87
87
|
end
|
88
88
|
end
|