class Bosh::Director::CidrRangeCombiner

Public Instance Methods

combine_ranges(cidr_ranges) click to toggle source
# File lib/bosh/director/cidr_range_combiner.rb, line 3
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 Instance Methods

combine_adjacent_ranges(range_tuples) click to toggle source
# File lib/bosh/director/cidr_range_combiner.rb, line 28
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? && (range_tuple[1].succ == next_range_tuple[0])
        range_tuple[1] = next_range_tuple[1]
        i += 1
      elsif !next_range_tuple.nil? && (range_tuple[0] < next_range_tuple[0] && range_tuple[1] > next_range_tuple[1])
        i += 1
      else
        can_combine = false
      end
    end
    combined_ranges << range_tuple
    i += 1
  end
  combined_ranges
end
min_max_tuples(sorted_reserved_ranges) click to toggle source
# File lib/bosh/director/cidr_range_combiner.rb, line 22
def min_max_tuples(sorted_reserved_ranges)
  sorted_reserved_ranges.map do |r|
    [r.first(Objectify: true), r.last(Objectify: true)]
  end
end
sort_ranges(reserved_ranges) click to toggle source
# File lib/bosh/director/cidr_range_combiner.rb, line 16
def sort_ranges(reserved_ranges)
  reserved_ranges.sort do |e1, e2|
    e1.to_i <=> e2.to_i
  end
end
stringify_tuples(cidr_tuples) click to toggle source
# File lib/bosh/director/cidr_range_combiner.rb, line 12
def stringify_tuples(cidr_tuples)
  cidr_tuples.map { |tuple| [tuple[0].ip, tuple[1].ip] }
end