class VCloudSdk::IpRanges

Attributes

ranges[RW]

Public Class Methods

new(value = nil) click to toggle source
# File lib/ruby_vcloud_sdk/ip_ranges.rb, line 8
def initialize(value = nil)
  @ranges = Set.new

  parse_ip_ranges(value) unless value.nil?
end

Public Instance Methods

+(ip_ranges)
Alias for: add
-(ip_ranges)
Alias for: subtract
add(ip_ranges) click to toggle source
# File lib/ruby_vcloud_sdk/ip_ranges.rb, line 14
def add(ip_ranges)
  ip_ranges = objectify ip_ranges
  result = IpRanges.new
  result.ranges.merge @ranges
  result.ranges.merge ip_ranges.ranges
  result
end
Also aliased as: +
include?(ip_ranges) click to toggle source
# File lib/ruby_vcloud_sdk/ip_ranges.rb, line 33
def include?(ip_ranges)
  ip_ranges = objectify ip_ranges
  @ranges.superset? ip_ranges.ranges
end
subtract(ip_ranges) click to toggle source
# File lib/ruby_vcloud_sdk/ip_ranges.rb, line 23
def subtract(ip_ranges)
  ip_ranges = objectify ip_ranges
  difference = IpRanges.new
  difference.ranges.merge @ranges
  difference.ranges.subtract ip_ranges.ranges

  difference
end
Also aliased as: -

Private Instance Methods

ips(ip_start_string, ip_end_string) click to toggle source
# File lib/ruby_vcloud_sdk/ip_ranges.rb, line 73
def ips(ip_start_string, ip_end_string)
  ip_start = NetAddr::CIDR.create(ip_start_string)
  ip_end = NetAddr::CIDR.create(ip_end_string)
  if ip_start.is_a?(NetAddr::CIDRv6) || ip_end.is_a?(NetAddr::CIDRv6)
    fail "IPv6 is not supported"
  end

  if ip_start > ip_end
    fail "IP #{ip_start.ip} is bigger than IP #{ip_end.ip}"
  end

  @ranges.merge((ip_start..ip_end).map(&:ip))
end
objectify(ip_ranges) click to toggle source
# File lib/ruby_vcloud_sdk/ip_ranges.rb, line 87
def objectify(ip_ranges)
  ip_ranges = IpRanges.new(ip_ranges) if ip_ranges.is_a? String
  unless ip_ranges.is_a? IpRanges
    fail "Unable to parse object that is not IpRange or string"
  end
  ip_ranges
end
parse_ip_range(ip_range_string) click to toggle source
# File lib/ruby_vcloud_sdk/ip_ranges.rb, line 53
def parse_ip_range(ip_range_string)
  case ip_range_string
  when /-/
    ips = ip_range_string.split("-")
    unless ips.length == 2
      fail "Invalid input: #{ips.length} field/fields separated by '-'"
    end

    ips ips[0], ips[1]
  when /\//
    ips = NetAddr::CIDR.create(ip_range_string)
    ips ips.first, ips.last
  else
    # A single IP address such as "10.142.15.11"
    ip = NetAddr::CIDR.create(ip_range_string)
    fail "IPv6 is not supported" if ip.is_a?(NetAddr::CIDRv6)
    @ranges.add ip.ip
  end
end
parse_ip_ranges(ip_ranges_string) click to toggle source
# File lib/ruby_vcloud_sdk/ip_ranges.rb, line 44
def parse_ip_ranges(ip_ranges_string)
  fail "Parameter is not a string" unless ip_ranges_string.is_a? String

  # remove white space
  ip_ranges_string.gsub(/\s+/, "").split(",").map do |i|
    parse_ip_range(i)
  end
end