Skip to content

Commit ba9b2d0

Browse files
committed
Remove vip usage
1 parent a0c1455 commit ba9b2d0

File tree

6 files changed

+1
-215
lines changed

6 files changed

+1
-215
lines changed

app/models/runtime/route.rb

Lines changed: 0 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ module VCAP::CloudController
88
class Route < Sequel::Model
99
class InvalidOrganizationRelation < CloudController::Errors::InvalidRelation; end
1010

11-
class OutOfVIPException < CloudController::Errors::InvalidRelation; end
12-
1311
many_to_one :domain
1412
many_to_one :space, after_set: :validate_changed_space
1513
one_through_one :organization, join_table: Space.table_name, left_key: :id, left_primary_key: :space_id, right_primary_key: :id, right_key: :organization_id
@@ -109,7 +107,6 @@ def validate
109107
validate_total_routes
110108
validate_ports
111109
validate_total_reserved_route_ports if port && port > 0
112-
errors.add(:name, :vip_offset) if vip_offset_exceeds_range?
113110

114111
RouteValidator.new(self).validate
115112
rescue RoutingApi::UaaUnavailable
@@ -191,59 +188,17 @@ def internal?
191188
domain.internal
192189
end
193190

194-
def vip
195-
vip_offset && internal_route_vip_range.nth(vip_offset).to_s
196-
end
197-
198191
def wildcard_host?
199192
host == '*'
200193
end
201194

202195
private
203196

204-
def vip_offset_exceeds_range?
205-
return false if vip_offset.nil?
206-
return true if vip_offset <= 0
207-
208-
vip_offset > internal_route_vip_range_len
209-
end
210-
211197
def before_destroy
212198
destroy_route_bindings
213199
super
214200
end
215201

216-
def find_next_vip_offset
217-
# This code courtesy of Jeremy Evans as part of discussion on
218-
# https://groups.google.com/d/msg/sequel-talk/3GJ8_mOgJ9U/roWJ2sWHAwAJ
219-
# See SQL self-joins for the reasoning behind this
220-
221-
n = Route.exclude(vip_offset: 1).
222-
exclude { vip_offset - 1 =~ Route.select(:vip_offset) }.order(:vip_offset).get { vip_offset - 1 } ||
223-
(return (Route.max(:vip_offset) || 0) + 1)
224-
Route.where { vip_offset < n }.reverse(:vip_offset).get { vip_offset + 1 } || 1
225-
end
226-
227-
def before_save
228-
return unless internal? && vip_offset.nil?
229-
230-
len = internal_route_vip_range_len
231-
raise OutOfVIPException.new('out of vip_offset slots') if self.class.exclude(vip_offset: nil).count >= len
232-
233-
self.vip_offset = find_next_vip_offset
234-
end
235-
236-
def internal_route_vip_range_len
237-
internal_route_vip_range.len - 2
238-
end
239-
240-
def internal_route_vip_range
241-
@internal_route_vip_range ||= begin
242-
internal_route_vip_range = Config.config.get(:internal_route_vip_range)
243-
NetAddr::IPv4Net.parse(internal_route_vip_range)
244-
end
245-
end
246-
247202
def destroy_route_bindings
248203
errors = RouteBindingDelete.new.delete(route_binding_dataset)
249204
raise errors.first unless errors.empty?

config/cloud_controller.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -374,8 +374,6 @@ credhub_api:
374374
credential_references:
375375
interpolate_service_bindings: true
376376

377-
internal_route_vip_range: '127.128.0.0/9'
378-
379377
locket:
380378
host: 'locket.service.cf.internal'
381379
port: 8891

lib/cloud_controller/config_schemas/base/api_schema.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -363,8 +363,6 @@ class ApiSchema < VCAP::Config
363363
max_labels_per_resource: Integer,
364364
max_annotations_per_resource: Integer,
365365

366-
internal_route_vip_range: String,
367-
368366
default_app_lifecycle: String,
369367
custom_metric_tag_prefix_list: Array,
370368

lib/cloud_controller/config_schemas/base/worker_schema.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,6 @@ class WorkerSchema < VCAP::Config
181181

182182
max_labels_per_resource: Integer,
183183
max_annotations_per_resource: Integer,
184-
internal_route_vip_range: String,
185184
custom_metric_tag_prefix_list: Array
186185
}
187186
end

lib/cloud_controller/config_schemas/vms/route_syncer_schema.rb

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,7 @@ class RouteSyncerSchema < VCAP::Config
3535
keys: Hash,
3636
current_key_label: String,
3737
optional(:pbkdf2_hmac_iterations) => Integer
38-
},
39-
40-
internal_route_vip_range: String
41-
38+
}
4239
}
4340
end
4441

spec/unit/models/runtime/route_spec.rb

Lines changed: 0 additions & 161 deletions
Original file line numberDiff line numberDiff line change
@@ -1390,167 +1390,6 @@ def assert_invalid_path(path)
13901390
end
13911391
end
13921392

1393-
describe 'vip_offset' do
1394-
before do
1395-
TestConfig.override(
1396-
internal_route_vip_range: '127.128.99.0/29',
1397-
kubernetes: {}
1398-
)
1399-
end
1400-
1401-
context 'auto-assign vip_offset' do
1402-
let(:internal_domain) { SharedDomain.make(name: 'apps.internal', internal: true) }
1403-
let!(:internal_route_1) { Route.make(host: 'meow', domain: internal_domain) }
1404-
let!(:internal_route_2) { Route.make(host: 'woof', domain: internal_domain) }
1405-
let!(:internal_route_3) { Route.make(host: 'quack', domain: internal_domain) }
1406-
let(:external_private_route) { Route.make }
1407-
1408-
context 'when the Kubernetes API is not configured' do
1409-
before do
1410-
TestConfig.override( # 8 theoretical available ips, 6 actual
1411-
internal_route_vip_range: '127.128.99.0/29',
1412-
kubernetes: {}
1413-
)
1414-
end
1415-
1416-
it 'auto-assigns vip_offset to internal routes only' do
1417-
expect(internal_route_1.vip_offset).not_to be_nil
1418-
expect(external_private_route.vip_offset).to be_nil
1419-
end
1420-
1421-
it 'assigns multiple vips in ascending order without duplicates' do
1422-
expect(internal_route_1.vip_offset).to eq(1)
1423-
expect(internal_route_2.vip_offset).to eq(2)
1424-
end
1425-
1426-
it 'never assigns the same vip_offset to multiple internal routes' do
1427-
expect do
1428-
Route.make(host: 'ants', vip_offset: 1)
1429-
end.to raise_error(Sequel::UniqueConstraintViolation, /duplicate.*routes_vip_offset_index/i)
1430-
end
1431-
1432-
it 'finds an available offset' do
1433-
Route.make(host: 'gulp', domain: internal_domain)
1434-
expect(Route.select_map(:vip_offset)).to match_array((1..4).to_a)
1435-
end
1436-
1437-
context 'when the taken offset is not the first' do
1438-
before do
1439-
TestConfig.override(
1440-
kubernetes: {}
1441-
)
1442-
end
1443-
1444-
it 'finds the first offset' do
1445-
internal_route_1.destroy
1446-
expect(Route.make(host: 'gulp', domain: internal_domain).vip_offset).to eq(1)
1447-
end
1448-
end
1449-
1450-
context 'when the taken offsets include first and not second' do
1451-
it 'finds an available offset' do
1452-
internal_route_2.destroy
1453-
expect(Route.make(host: 'gulp', domain: internal_domain).vip_offset).to eq(2)
1454-
end
1455-
end
1456-
1457-
context 'when filling the vip range' do
1458-
it 'can make 3 more new routes only' do
1459-
expect { Route.make(host: 'route4', domain: internal_domain) }.not_to raise_error
1460-
expect { Route.make(host: 'route5', domain: internal_domain) }.not_to raise_error
1461-
expect { Route.make(host: 'route6', domain: internal_domain) }.not_to raise_error
1462-
expect { Route.make(host: 'route7', domain: internal_domain) }.to raise_error(Route::OutOfVIPException)
1463-
end
1464-
1465-
it 'can reclaim lost vips' do
1466-
expect { Route.make(host: 'route4', domain: internal_domain) }.not_to raise_error
1467-
expect { Route.make(host: 'route5', domain: internal_domain) }.not_to raise_error
1468-
expect { Route.make(host: 'route6', domain: internal_domain) }.not_to raise_error
1469-
Route.last.destroy
1470-
internal_route_2.destroy
1471-
expect(Route.make(host: 'new2', domain: internal_domain).vip_offset).to eq(2)
1472-
expect(Route.make(host: 'new6', domain: internal_domain).vip_offset).to eq(6)
1473-
end
1474-
end
1475-
end
1476-
end
1477-
1478-
context 'when we assign vip_offsets explicitly' do
1479-
let(:internal_domain) { SharedDomain.make(name: 'apps.internal', internal: true) }
1480-
1481-
it 'does not assign vip_offsets that exceed the CIDR range' do
1482-
expect do
1483-
Route.make(host: 'ants0', domain: internal_domain, vip_offset: 0)
1484-
end.to raise_error(Sequel::ValidationFailed, 'name vip_offset')
1485-
expect do
1486-
Route.make(host: 'ants1', domain: internal_domain, vip_offset: 1)
1487-
end.not_to raise_error
1488-
expect do
1489-
Route.make(host: 'ants6', domain: internal_domain, vip_offset: 6)
1490-
end.not_to raise_error
1491-
expect do
1492-
Route.make(host: 'ants7', domain: internal_domain, vip_offset: 7)
1493-
end.to raise_error(Sequel::ValidationFailed, 'name vip_offset')
1494-
expect do
1495-
Route.make(host: 'ants8', domain: internal_domain, vip_offset: 8)
1496-
end.to raise_error(Sequel::ValidationFailed, 'name vip_offset')
1497-
end
1498-
end
1499-
1500-
context 'when there are routes on internal domains' do
1501-
let(:internal_domain) { SharedDomain.make(name: 'apps.internal', internal: true) }
1502-
let!(:internal_route_1) { Route.make(host: 'meow', domain: internal_domain, vip_offset: nil) }
1503-
let!(:internal_route_2) { Route.make(host: 'woof', domain: internal_domain, vip_offset: 2) }
1504-
let!(:internal_route_3) { Route.make(host: 'quack', domain: internal_domain, vip_offset: 4) }
1505-
let(:external_private_route) { Route.make }
1506-
1507-
it 'can have different vip_offsets in range' do
1508-
expect(internal_route_1).to be_valid
1509-
expect(internal_route_1.vip_offset).to eq(1)
1510-
expect(internal_route_2).to be_valid
1511-
expect(internal_route_3).to be_valid
1512-
end
1513-
1514-
it 'assigns lowest-possible vip_offsets' do
1515-
internal_route_4 = Route.make(host: 'bray', domain: internal_domain)
1516-
expect(internal_route_4.vip_offset).to eq(3)
1517-
internal_route_5 = Route.make(host: 'lemons', domain: internal_domain)
1518-
expect(internal_route_5.vip_offset).to eq(5)
1519-
end
1520-
1521-
it 'reuses vip_offsets' do
1522-
expected_vip_offset = internal_route_2.vip_offset
1523-
internal_route_2.delete
1524-
internal_route_6 = Route.make(host: 'route6', domain: internal_domain)
1525-
expect(internal_route_6.vip_offset).to eq(expected_vip_offset)
1526-
end
1527-
end
1528-
end
1529-
1530-
describe 'vip' do
1531-
before do
1532-
TestConfig.override(
1533-
kubernetes: {}
1534-
)
1535-
end
1536-
1537-
let(:internal_domain) { SharedDomain.make(name: 'apps.internal', internal: true) }
1538-
let!(:internal_route_1) { Route.make(host: 'meow', domain: internal_domain, vip_offset: 1) }
1539-
let!(:internal_route_2) { Route.make(host: 'woof', domain: internal_domain, vip_offset: 2) }
1540-
let!(:internal_route_3) { Route.make(host: 'quack', domain: internal_domain, vip_offset: 4) }
1541-
let(:external_private_route) { Route.make }
1542-
1543-
it 'returns a ipv4 ip address offset from the beginning of the internal route vip range' do
1544-
expect(internal_route_1.vip).to eq('127.128.0.1')
1545-
internal_route_2.vip_offset = 16
1546-
expect(internal_route_2.vip).to eq('127.128.0.16')
1547-
end
1548-
1549-
it 'returns nil when asked for the ip addr for a nil offset' do
1550-
expect(external_private_route.vip).to be_nil
1551-
end
1552-
end
1553-
15541393
describe '#wildcard_host?' do
15551394
let!(:route) { Route.make(host:) }
15561395

0 commit comments

Comments
 (0)