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])
25 "#{@network}/#{@prefix}"
29 def ipaddresses(role: nil, family: nil)
30 interfaces(:role => role).each_with_object([]) do |interface, addresses|
31 addresses << Address.new(interface[:inet]) if interface[:inet] && (family.nil? || family == :inet)
32 addresses << Address.new(interface[:inet6]) if interface[:inet6] && (family.nil? || family == :inet6)
36 def internal_ipaddress(family: nil)
37 ipaddresses(:role => :internal, :family => family).first
40 def external_ipaddress(family: nil)
41 ipaddresses(:role => :external, :family => family).first
47 Chef::Node.include(OpenStreetMap::Mixin::IPAddresses)