class AutomateIt::PlatformManager::Struct

PlatformManager::Struct

A simple PlatformManager driver that queries a hash for results. Although not useful on its own, it’s inherited by other drivers that provide platform-specific methods to query the system.

Attributes

key_aliases[RW]

Hash mapping of keys that have many common names, e.g., “release” and “version”

Public Instance Methods

query(search) click to toggle source

See PlatformManager#query

# File lib/automateit/platform_manager/struct.rb, line 36
def query(search)
  result = ""
  for key in search.to_s.split(/#/)
    result << "_" unless result.empty?
    result << _query_key(key)
  end
  result
end
setup(opts={}) click to toggle source

Options:

  • :struct – The hash to use for queries.

Calls superclass method AutomateIt::Plugin::Driver#setup
# File lib/automateit/platform_manager/struct.rb, line 18
def setup(opts={})
  super(opts)

  @@struct_cache ||= {}

  if opts[:struct]
    @struct = opts[:struct]
  else
    @struct ||= {}
  end

  # Generate bi-directional map
  @key_aliases ||= @@key_aliases ||= {
    :version => :release,
  }.inject({}){|s,v| s[v[0]] = v[1]; s[v[1]] = v[0]; s}
end
single_vendor?() click to toggle source

See PlatformManager#single_vendor?

# File lib/automateit/platform_manager/struct.rb, line 60
def single_vendor?
  return false
end
tags() click to toggle source

See PlatformManager#tags

# File lib/automateit/platform_manager/struct.rb, line 65
def tags
  results = []
  for key in %w(os arch distro os#arch)
    results << query(key) rescue IndexError
  end

  release_query = \
    if single_vendor?
      "os#release"     # E.g. windows_xp
    else
      "distro#release" # E.g. ubuntu_6.06
    end
  results << query(release_query) rescue IndexError
  return results
end

Private Instance Methods

_query_key(key) click to toggle source
# File lib/automateit/platform_manager/struct.rb, line 45
def _query_key(key)
  key = key.to_sym
  unless @struct.has_key?(key)
    key_alias = key_aliases[key]
    if @struct.has_key?(key_alias)
      key = key_alias
    else
      raise IndexError.new("platform doesn't provide key: #{key}")
    end
  end
  return @struct[key]
end