Method: Jamf::NetworkSegment.network_ranges

Defined in:
lib/jamf/api/classic/api_objects/network_segment.rb

.network_ranges(refresh = false, api: nil, cnx: Jamf.cnx) ⇒ Hash{Integer => Range}

All NetworkSegments in the given API as ruby Ranges of IPAddr instances representing the Segment, e.g. with starting = 10.24.9.1 and ending = 10.24.15.254 the range looks like:

<IPAddr: IPv4:10.24.9.1/255.255.255.255>
 ..
<IPAddr: IPv4:10.24.15.254/255.255.255.255>

Using the #include? method on those Ranges is very useful.

Note1: We don’t use the IPAddr#to_range method because that works

best for masked IPAddrs (which are ranges of IPs with widths
determined by the mask) and Jamf Network Segments can have arbitrary
widths.

Note2: See the network_ranges_as_integers method below, which is similar

but much faster.

Parameters:

  • refresh (Boolean) (defaults to: false)

    should the data be re-queried?

  • cnx (Jamf::Connection) (defaults to: Jamf.cnx)

    the API to query

Returns:

  • (Hash{Integer => Range})

    the network segments as IPv4 address Ranges keyed by id



95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/jamf/api/classic/api_objects/network_segment.rb', line 95

def self.network_ranges(refresh = false, api: nil, cnx: Jamf.cnx)
  cnx = api if api

  @network_ranges = nil if refresh
  return @network_ranges if @network_ranges

  @network_ranges = {}
  all(refresh, cnx: cnx).each do |ns|
    @network_ranges[ns[:id]] = IPAddr.new(ns[:starting_address])..IPAddr.new(ns[:ending_address])
  end
  @network_ranges
end