Parent

Class/Module Index [+]

Quicksearch

Facter::Util::SolarisZones

Provide a set of utility methods to interact with Solaris zones. This class is expected to be instantiated once per set of resolutions in order to cache the output of the zoneadm command, which can be quite expensive.

@api private

Attributes

zone_hash[R]
zoneadm_cmd[R]
zoneadm_keys[R]
zoneadm_output[R]

Public Class Methods

add_facts() click to toggle source

add_facts defines all of the facts for solaris zones, for example `zones`, `zone_global_id`, `zone_global_status`, etc... This method defines the static fact named `zones`. The value of this fact is the numver of zones reported by the zoneadm system command. The `zones` fact also defines all of the dynamic facts describing the following seven attribute values for each zone.

Zones may be added to the system while Facter is loaded. In order to define new dynamic facts that reflect this new information, the `virtual` will define new facts as a side effect of refreshing it’s own value.

@api private

# File lib/facter/util/solaris_zones.rb, line 30
def self.add_facts
  model = new
  model.refresh
  model.add_dynamic_facts
  Facter.add("zones") do
    setcode do
      model.refresh if model.flushed?
      model.add_dynamic_facts
      model.count
    end
    on_flush do
      model.flush!
    end
  end
end
new(opts = {}) click to toggle source

@param [Hash] opts the options to create the instance with @option opts [String] :zoneadm_cmd (‘/usr/sbin/zoneadm list -cp’) the

system command to inspect zones

@option opts [String] :zoneadm_output (nil) the cached output of the

zoneadm_cmd
# File lib/facter/util/solaris_zones.rb, line 52
def initialize(opts = {})
  @zoneadm_keys = [:id, :name, :status, :path, :uuid, :brand, :iptype]
  @zoneadm_cmd = opts[:zoneadm_cmd] || '/usr/sbin/zoneadm list -cp'
  if opts[:zoneadm_output]
    @zoneadm_output = opts[:zoneadm_output]
  end
end

Public Instance Methods

add_dynamic_facts() click to toggle source

add_dynamic_facts defines all of the dynamic facts derived from parsing the output of the zoneadm command. The zone facts are dynamic, so this method has the behavior of figuring out what dynamic zone facts need to be defined and how they should be resolved.

@param model [SolarisZones] the model used to store data from the system

@api private

# File lib/facter/util/solaris_zones.rb, line 69
def add_dynamic_facts
  model = self
  zone_hash.each_pair do |zone, attr_hsh|
    attr_hsh.keys.each do |attr|
      Facter.add("zone_#{zone}_#{attr}") do
        setcode do
          model.refresh if model.flushed?
          # Don't resolve if the zone has since been deleted
          if zone_hsh = model.zone_hash[zone]
            zone_hsh[attr] # the value
          end
        end
        on_flush do
          model.flush!
        end
      end
    end
  end
end
count() click to toggle source

count returns the number of running zones, including the global zone. This method is intended to be used from the setcode block of the `zones` fact.

@api private

@return [Fixnum, nil] the number of running zones or nil if the number

could not be determined.
# File lib/facter/util/solaris_zones.rb, line 131
def count
  if @zone_hash
    @zone_hash.size
  end
end
flush!() click to toggle source

flush! purges the saved data from the zoneadm_cmd output

@api private

# File lib/facter/util/solaris_zones.rb, line 141
def flush!
  @zoneadm_output = nil
  @zone_hash = nil
end
flushed?() click to toggle source

flushed? returns true if the instance has no parsed data accessible via the {zone_hash} method.

@api private

@return [Boolean] true if there is no parsed data, false otherwise

# File lib/facter/util/solaris_zones.rb, line 153
def flushed?
  !@zone_hash
end
refresh() click to toggle source

refresh executes the zoneadm_cmd and stores the output data.

@api private

@return [Hash] the parsed output of the zoneadm command

# File lib/facter/util/solaris_zones.rb, line 95
def refresh
  @zoneadm_output = Facter::Util::Resolution.exec(zoneadm_cmd)
  parse!
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.