Class: Facter::Util::SolarisZones

### Home Classes Methods

### In Files

- lib/facter/util/solaris_zones.rb

### Parent

Object

### Methods

- ::add_facts
- ::new
- #add_dynamic_facts
- #count
- #flush!
- #flushed?
- #refresh

### Files

- LICENSE
- Rakefile
- THANKS

### Class/Module Index

Quicksearch

- Facter
- Facter::Application
- Facter::Manufacturer
- Facter::Memory
- Facter::NetMask
- Facter::Util
- Facter::Util::CFPropertyList
- Facter::Util::CFPropertyList::CFArray
- Facter::Util::CFPropertyList::CFBoolean
- Facter::Util::CFPropertyList::CFData
- Facter::Util::CFPropertyList::CFDate
- Facter::Util::CFPropertyList::CFDictionary
- Facter::Util::CFPropertyList::CFInteger
- Facter::Util::CFPropertyList::CFReal
- Facter::Util::CFPropertyList::CFString
- Facter::Util::CFPropertyList::CFType
- Facter::Util::CFPropertyList::XML
- Facter::Util::Collection
- Facter::Util::CompositeLoader
- Facter::Util::Config
- Facter::Util::Confine
- Facter::Util::DirectoryLoader
- Facter::Util::DirectoryLoader::NoSuchDirectoryError
- Facter::Util::EC2
- Facter::Util::Fact
- Facter::Util::FileRead
- Facter::Util::IP
- Facter::Util::IP::Windows
- Facter::Util::IP::Windows::Bindings4
- Facter::Util::IP::Windows::Bindings6
- Facter::Util::Loader
- Facter::Util::Macaddress
- Facter::Util::Macaddress::Darwin
- Facter::Util::Macaddress::Windows
- Facter::Util::Macosx
- Facter::Util::MonkeyPatches
- Facter::Util::MonkeyPatches::Lines
- Facter::Util::NothingLoader
- Facter::Util::Parser
- Facter::Util::Parser::Base
- Facter::Util::Parser::JsonParser
- Facter::Util::Parser::KeyValuePairOutputFormat
- Facter::Util::Parser::NothingParser
- Facter::Util::Parser::PowershellParser
- Facter::Util::Parser::ScriptParser
- Facter::Util::Parser::TextParser
- Facter::Util::Parser::YamlParser
- Facter::Util::Processor
- Facter::Util::Registry
- Facter::Util::Resolution
- Facter::Util::SolarisZones
- Facter::Util::Uptime
- Facter::Util::Values
- Facter::Util::Virtual
- Facter::Util::Vlans
- Facter::Util::WMI
- Facter::Util::Xendomains
- Plist
- Plist::Emit
- Plist::Listener
- Plist::PArray
- Plist::PData
- Plist::PDate
- Plist::PDict
- Plist::PFalse
- Plist::PInteger
- Plist::PKey
- Plist::PList
- Plist::PReal
- Plist::PString
- Plist::PTag
- Plist::PTrue
- Plist::StreamParser
- CFFormatError
- CFPlistError
- CFTypeError
- IO
- Object
- String

No matching classes.

# 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.