Skip to content

Commit 7a04798

Browse files
authored
Remove vip usage (#3761)
1 parent 3635a6b commit 7a04798

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
@@ -126,7 +124,6 @@ def validate
126124
validate_total_routes
127125
validate_ports
128126
validate_total_reserved_route_ports if port && port > 0
129-
errors.add(:name, :vip_offset) if vip_offset_exceeds_range?
130127

131128
RouteValidator.new(self).validate
132129
rescue RoutingApi::UaaUnavailable
@@ -212,59 +209,17 @@ def internal?
212209
domain.internal
213210
end
214211

215-
def vip
216-
vip_offset && internal_route_vip_range.nth(vip_offset).to_s
217-
end
218-
219212
def wildcard_host?
220213
host == '*'
221214
end
222215

223216
private
224217

225-
def vip_offset_exceeds_range?
226-
return false if vip_offset.nil?
227-
return true if vip_offset <= 0
228-
229-
vip_offset > internal_route_vip_range_len
230-
end
231-
232218
def before_destroy
233219
destroy_route_bindings
234220
super
235221
end
236222

237-
def find_next_vip_offset
238-
# This code courtesy of Jeremy Evans as part of discussion on
239-
# https://groups.google.com/d/msg/sequel-talk/3GJ8_mOgJ9U/roWJ2sWHAwAJ
240-
# See SQL self-joins for the reasoning behind this
241-
242-
n = Route.exclude(vip_offset: 1).
243-
exclude { vip_offset - 1 =~ Route.select(:vip_offset) }.order(:vip_offset).get { vip_offset - 1 } ||
244-
(return (Route.max(:vip_offset) || 0) + 1)
245-
Route.where { vip_offset < n }.reverse(:vip_offset).get { vip_offset + 1 } || 1
246-
end
247-
248-
def before_save
249-
return unless internal? && vip_offset.nil?
250-
251-
len = internal_route_vip_range_len
252-
raise OutOfVIPException.new('out of vip_offset slots') if self.class.exclude(vip_offset: nil).count >= len
253-
254-
self.vip_offset = find_next_vip_offset
255-
end
256-
257-
def internal_route_vip_range_len
258-
internal_route_vip_range.len - 2
259-
end
260-
261-
def internal_route_vip_range
262-
@internal_route_vip_range ||= begin
263-
internal_route_vip_range = Config.config.get(:internal_route_vip_range)
264-
NetAddr::IPv4Net.parse(internal_route_vip_range)
265-
end
266-
end
267-
268223
def destroy_route_bindings
269224
errors = RouteBindingDelete.new.delete(route_binding_dataset)
270225

config/cloud_controller.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -379,8 +379,6 @@ credhub_api:
379379
credential_references:
380380
interpolate_service_bindings: true
381381

382-
internal_route_vip_range: '127.128.0.0/9'
383-
384382
locket:
385383
host: 'locket.service.cf.internal'
386384
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
@@ -380,8 +380,6 @@ class ApiSchema < VCAP::Config
380380
max_labels_per_resource: Integer,
381381
max_annotations_per_resource: Integer,
382382

383-
internal_route_vip_range: String,
384-
385383
default_app_lifecycle: enum('buildpack', 'cnb'),
386384
custom_metric_tag_prefix_list: Array,
387385

lib/cloud_controller/config_schemas/base/worker_schema.rb

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

193193
max_labels_per_resource: Integer,
194194
max_annotations_per_resource: Integer,
195-
internal_route_vip_range: String,
196195
custom_metric_tag_prefix_list: Array,
197196
default_app_lifecycle: enum('buildpack', 'cnb')
198197
}

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
@@ -1407,167 +1407,6 @@ def assert_invalid_path(path)
14071407
end
14081408
end
14091409

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

0 commit comments

Comments
 (0)