diff --git a/src/bosh-director/lib/bosh/director.rb b/src/bosh-director/lib/bosh/director.rb index 4c072d119ec..b04e64ebe7f 100644 --- a/src/bosh-director/lib/bosh/director.rb +++ b/src/bosh-director/lib/bosh/director.rb @@ -52,7 +52,6 @@ module Director require 'bosh/director/errors' require 'bosh/director/ext' require 'bosh/director/ip_util' -require 'bosh/director/cidr_range_combiner' require 'bosh/director/lock_helper' require 'bosh/director/validation_helper' require 'bosh/director/download_helper' diff --git a/src/bosh-director/lib/bosh/director/cidr_range_combiner.rb b/src/bosh-director/lib/bosh/director/cidr_range_combiner.rb deleted file mode 100644 index 2f041ece9ab..00000000000 --- a/src/bosh-director/lib/bosh/director/cidr_range_combiner.rb +++ /dev/null @@ -1,60 +0,0 @@ -module Bosh::Director - class CidrRangeCombiner - def combine_ranges(cidr_ranges) - sorted_cidr_ranges = sort_ranges(cidr_ranges) - min_max_cidr_tuples = min_max_tuples(sorted_cidr_ranges) - combined_cidr_tuples = combine_adjacent_ranges(min_max_cidr_tuples) - stringify_tuples(combined_cidr_tuples) - end - - private - - def stringify_tuples(cidr_tuples) - cidr_tuples.map { |tuple| [tuple[0].ip, tuple[1].ip] } - end - - def sort_ranges(reserved_ranges) - reserved_ranges.sort do |e1, e2| - e1.to_i <=> e2.to_i - end - end - - def min_max_tuples(sorted_reserved_ranges) - sorted_reserved_ranges.map do |r| - [r.first(Objectify: true), r.last(Objectify: true)] - end - end - - def combine_adjacent_ranges(range_tuples) - combined_ranges = [] - i = 0 - while i < range_tuples.length - range_tuple = range_tuples[i] - can_combine = true - while can_combine - next_range_tuple = range_tuples[i+1] - if next_range_tuple.nil? - can_combine = false - else - if range_tuple.map(&:version).uniq != next_range_tuple.map(&:version).uniq - can_combine = false - break - end - if range_tuple[1].succ == next_range_tuple[0] - range_tuple[1] = next_range_tuple[1] - i += 1 - # does not cover all cases: 10/32, 10/8 - elsif (range_tuple[0] < next_range_tuple[0]) && (range_tuple[1] > next_range_tuple[1]) - i += 1 - else - can_combine = false - end - end - end - combined_ranges << range_tuple - i += 1 - end - combined_ranges - end - end -end diff --git a/src/bosh-director/spec/unit/cidr_range_combiner_spec.rb b/src/bosh-director/spec/unit/cidr_range_combiner_spec.rb deleted file mode 100644 index ad221207730..00000000000 --- a/src/bosh-director/spec/unit/cidr_range_combiner_spec.rb +++ /dev/null @@ -1,108 +0,0 @@ -require 'spec_helper' - -module Bosh::Director - describe CidrRangeCombiner do - subject(:range_combiner) { CidrRangeCombiner.new } - - describe 'chaos' do - let(:cidr_ranges) do - [ - NetAddr::CIDR.create('192.168.0.8/31'), - NetAddr::CIDR.create('192.168.0.6/32'), - NetAddr::CIDR.create('192.168.0.13/32'), - NetAddr::CIDR.create('192.168.1.1/24'), - NetAddr::CIDR.create('192.168.0.10/32'), - NetAddr::CIDR.create('192.168.2.1/24'), - NetAddr::CIDR.create('192.168.0.14/31'), - ] - end - - it 'creates sense' do - expect(range_combiner.combine_ranges(cidr_ranges)).to eq( - [['192.168.0.6', '192.168.0.6'], - ['192.168.0.8', '192.168.0.10'], - ['192.168.0.13', '192.168.0.15'], - ['192.168.1.0', '192.168.2.255']], - ) - end - end - - describe 'when the a range is length 1' do - let(:cidr_ranges) do - [ - NetAddr::CIDR.create('192.168.0.8/32'), - NetAddr::CIDR.create('192.168.0.6/32'), - ] - end - - it 'returns tuples with same first and last value' do - expect(range_combiner.combine_ranges(cidr_ranges)).to eq( - [['192.168.0.6', '192.168.0.6'], ['192.168.0.8', '192.168.0.8']], - ) - end - end - - describe 'when the ranges do not overlap' do - let(:cidr_ranges) do - [ - NetAddr::CIDR.create('192.168.0.8/31'), - NetAddr::CIDR.create('192.168.0.6/32'), - ] - end - - it 'does not combine the ranges' do - expect(range_combiner.combine_ranges(cidr_ranges)).to eq( - [['192.168.0.6', '192.168.0.6'], ['192.168.0.8', '192.168.0.9']], - ) - end - end - - describe 'when a range is a subset of another range' do - let(:cidr_ranges) do - [ - NetAddr::CIDR.create('192.168.0.0/24'), # 0-255 - NetAddr::CIDR.create('192.168.0.10/30'), # 8-11 - ] - end - - it 'combines the ranges' do - expect(range_combiner.combine_ranges(cidr_ranges)).to eq( - [['192.168.0.0', '192.168.0.255']], - ) - end - end - - describe 'when ranges are adjacent' do - let(:cidr_ranges) do - [ - NetAddr::CIDR.create('192.168.0.8/30'), # 8-11 - NetAddr::CIDR.create('192.168.0.12/30'), # 12-15 - ] - end - - it 'combines the ranges' do - expect(range_combiner.combine_ranges(cidr_ranges)).to eq( - [['192.168.0.8', '192.168.0.15']], - ) - end - end - - describe 'when ranges are ipv4 and ipv6' do - let(:cidr_ranges) do - [ - NetAddr::CIDR.create('192.168.0.8/30'), - NetAddr::CIDR.create('fd7a:eeed:e696:968f:0000:0000:0000:0005/128'), - NetAddr::CIDR.create('fd7a:eeed:e696:968f:0000:0000:0000:0005/64'), - NetAddr::CIDR.create('192.168.0.20/32'), - ] - end - - it 'combines the ranges' do - expect(range_combiner.combine_ranges(cidr_ranges)).to eq( - [['192.168.0.8', '192.168.0.11'], ['192.168.0.20', '192.168.0.20'], - ['fd7a:eeed:e696:968f:0000:0000:0000:0000', 'fd7a:eeed:e696:968f:ffff:ffff:ffff:ffff']], - ) - end - end - end -end