7 attr_reader :address, :prefix, :gateway, :network, :netmask
9 def initialize(address)
10 @address = address[:public_address] || address[:address]
11 @prefix = address[:prefix]
12 @gateway = address[:gateway]
14 ip = IPAddr.new(address[:address]).mask(address[:prefix])
21 address <=> other.address
29 "#{@network}/#{@prefix}"
33 def ipaddresses(role: nil, family: nil)
34 interfaces(:role => role).each_with_object([]) do |interface, addresses|
35 addresses << Address.new(interface[:inet]) if interface[:inet] && (family.nil? || family == :inet)
36 addresses << Address.new(interface[:inet6]) if interface[:inet6] && (family.nil? || family == :inet6)
40 def internal_ipaddress(family: nil)
41 ipaddresses(:role => :internal, :family => family).first
44 def external_ipaddress(family: nil)
45 ipaddresses(:role => :external, :family => family).first
51 Chef::Node.include(OpenStreetMap::Mixin::IPAddresses)