Parent

Class/Module Index [+]

Quicksearch

Ironfan::Broker::Computer

Public Class Methods

new(*args) click to toggle source
# File lib/ironfan/broker/computer.rb, line 16
def initialize(*args)
  super
  providers[:chef] ||=    Ironfan::Provider::ChefServer
  return unless server
  providers[:iaas] =      server.selected_cloud.provider
  volumes =               server.volumes.values
  volumes +=              server.implied_volumes
  volumes.each { |v| self.drive v.name, :volume => v }
rescue StandardError => err ; err.polish("#{self.class} on #{args}'") rescue nil ; raise
end

Public Instance Methods

bogus() click to toggle source

Accessors

# File lib/ironfan/broker/computer.rb, line 173
def bogus
  resources.values.map(&:bogus).flatten
end
bogus?() click to toggle source

Status flags

# File lib/ironfan/broker/computer.rb, line 221
def bogus?
  resources.values.any?(&:bogus?)
end
bootstrap_distro() click to toggle source
# File lib/ironfan/broker/computer.rb, line 203
def bootstrap_distro ; (server && server.selected_cloud) ? server.selected_cloud.bootstrap_distro   : nil ; end
chef_client_script_content() click to toggle source
# File lib/ironfan/broker/computer.rb, line 125
def chef_client_script_content
  cloud = server.selected_cloud
  return @chef_client_script_content if @chef_client_script_content
  return unless cloud.chef_client_script
  script_filename = File.expand_path("../../../config/#{cloud.chef_client_script}", File.dirname(File.realdirpath(__FILE__)))
  @chef_client_script_content = Ironfan.safely{ File.read(script_filename) }
end
chef_provider() click to toggle source
# File lib/ironfan/broker/computer.rb, line 99
def chef_provider ; providers[:chef] ; end
chosen_providers(options={}) click to toggle source

Utility

# File lib/ironfan/broker/computer.rb, line 105
def chosen_providers(options={})
  case options[:providers]
  when :all,nil   then    [:chef,:iaas]
  else                    [ (options[:providers]) ]
  end
end
chosen_resources(options={}) click to toggle source
# File lib/ironfan/broker/computer.rb, line 112
def chosen_resources(options={})
  chosen_providers(options).map do |name|
    providers[name].resources
  end.flatten
end
client() click to toggle source

client

# File lib/ironfan/broker/computer.rb, line 188
def client
  self[:client]
end
client?() click to toggle source
# File lib/ironfan/broker/computer.rb, line 224
def client?
  not client.nil?
end
correlate() click to toggle source

Discovery

# File lib/ironfan/broker/computer.rb, line 36
def correlate
  chosen_resources.each do |res|
    res.expected_ids(self).each do |id|
      next unless res.recall? id

      recalled =            res.recall id
      recalled.users <<     self

      target =              res.resource_type.to_s
      target +=             "__#{id}" if res.multiple?
      self[target.to_sym] = recalled

      recalled.on_correlate(self)
    end
  end
end
created?() click to toggle source
# File lib/ironfan/broker/computer.rb, line 227
def created?
  machine? and machine.created?
end
display_boolean(value) click to toggle source
# File lib/ironfan/broker/computer.rb, line 168
def display_boolean(value)        value ? "yes" : "no";   end
dns_name() click to toggle source
# File lib/ironfan/broker/computer.rb, line 202
def dns_name         ; machine? ? machine.dns_name : nil ; end
ensure_dependencies() click to toggle source
# File lib/ironfan/broker/computer.rb, line 118
def ensure_dependencies
  chosen_resources.each do |res|
    # ensure_resource res unless res < Ironfan::IaasProvider::Machine
    res.create! self unless res < Ironfan::IaasProvider::Machine
  end
end
environment() click to toggle source
# File lib/ironfan/broker/computer.rb, line 183
def environment ; server && server.environment ; end
iaas_provider() click to toggle source
# File lib/ironfan/broker/computer.rb, line 100
def iaas_provider ; providers[:iaas] ; end
keypair() click to toggle source
# File lib/ironfan/broker/computer.rb, line 205
def keypair
  resources[:keypair]
end
kill(options={}) click to toggle source

Manipulation

# File lib/ironfan/broker/computer.rb, line 61
def kill(options={})
  target_resources = chosen_resources(options)
  resources.each do |res|
    next unless target_resources.include? res.class
    descriptor = "#{res.class.resource_type} named #{res.name}"
    if res.shared?
      Chef::Log.debug("Not killing shared resource #{descriptor}")
    else
      Ironfan.step(self.name, "Killing #{descriptor}")
      res.destroy
    end
  end
end
killable?() click to toggle source
# File lib/ironfan/broker/computer.rb, line 233
def killable?
  not permanent? and (node? || client? || created?)
end
launch() click to toggle source
# File lib/ironfan/broker/computer.rb, line 75
def launch
  ensure_dependencies
  iaas_provider.machine_class.create! self
  node.announce_state :started
  save
  self
end
launchable?() click to toggle source
# File lib/ironfan/broker/computer.rb, line 236
def launchable?
  not bogus? and not created?
end
machine() click to toggle source

Machine

# File lib/ironfan/broker/computer.rb, line 196
def machine
  self[:machine]
end
machine=(value) click to toggle source
# File lib/ironfan/broker/computer.rb, line 199
def machine=(value)
  self[:machine] = value
end
machine?() click to toggle source
# File lib/ironfan/broker/computer.rb, line 230
def machine?
  not machine.nil?
end
name() click to toggle source
# File lib/ironfan/broker/computer.rb, line 27
def name
  return server.full_name if server?
  return @name            if @name
  "unnamed:#{object_id}"
end
node() click to toggle source
# File lib/ironfan/broker/computer.rb, line 176
def node
  self[:node]
end
node=(value) click to toggle source
# File lib/ironfan/broker/computer.rb, line 179
def node=(value)
  self[:node]= value
end
node?() click to toggle source
# File lib/ironfan/broker/computer.rb, line 239
def node?
  not node.nil?
end
permanent?() click to toggle source
# File lib/ironfan/broker/computer.rb, line 242
def permanent?
  return false unless server?
  return false unless server.selected_cloud.respond_to? :permanent
  [true, :true, 'true'].include? server.selected_cloud.permanent
end
private_key() click to toggle source
# File lib/ironfan/broker/computer.rb, line 191
def private_key ; client? ? client.private_key : nil ; end
receive_providers(objs) click to toggle source
# File lib/ironfan/broker/computer.rb, line 263
def receive_providers(objs)
  objs = objs.map do |obj|
    if obj.is_a?(String) then obj = Gorillib::Inflector.constantize(Gorillib::Inflector.camelize(obj.gsub(/\./, '/'))) ; end
    obj
  end
  super(objs)
end
running?() click to toggle source
# File lib/ironfan/broker/computer.rb, line 247
def running?
  machine? and machine.running?
end
save(options={}) click to toggle source
# File lib/ironfan/broker/computer.rb, line 95
def save(options={})
  chosen_resources(options).each {|res| res.save! self}
end
server?() click to toggle source
# File lib/ironfan/broker/computer.rb, line 250
def server?
  not server.nil?
end
ssh_identity_file() click to toggle source
# File lib/ironfan/broker/computer.rb, line 211
def ssh_identity_file
  if    keypair                         then keypair.key_filename
  elsif server && server.selected_cloud then server.selected_cloud.ssh_identity_file(self)
  else nil
  end
end
ssh_user() click to toggle source
# File lib/ironfan/broker/computer.rb, line 209
def ssh_user         ; (server && server.selected_cloud) ? server.selected_cloud.ssh_user : nil ; end
sshable?() click to toggle source

@return [Boolean] true if machine is likely to be reachable by ssh

# File lib/ironfan/broker/computer.rb, line 258
def sshable?
  # if there's any hope of success, give it a try.
  running? || node?
end
start() click to toggle source
# File lib/ironfan/broker/computer.rb, line 88
def start
  ensure_dependencies
  machine.start
  node.announce_state :started
  save
end
stop() click to toggle source
# File lib/ironfan/broker/computer.rb, line 83
def stop
  machine.stop
  node.announce_state :stopped
end
stopped?() click to toggle source
# File lib/ironfan/broker/computer.rb, line 253
def stopped?
  machine? and machine.stopped?
end
to_display(style,values={}) click to toggle source

Display

# File lib/ironfan/broker/computer.rb, line 144
def to_display(style,values={})
  unless [:minimal,:default,:expanded].include? style
    raise "Bad display style #{style}"
  end

  values["Name"] =        name
  # We expect these to be over-ridden by the contained classes
  values["Chef?"] =       "no"
  values["State"] =       "not running"

  [ server, node, machine ].compact.each do |part|
    part.to_display style, values
  end

  if style == :expanded
    values["Startable"]  = display_boolean(stopped?)
    values["Launchable"] = display_boolean(launchable?)
  end
  values["Bogus"] =       bogus.join(',')

  # Only show values that actually have something to show
  values.delete_if {|k,v| v.to_s.empty?}
  values
end
to_s() click to toggle source
# File lib/ironfan/broker/computer.rb, line 271
def to_s
  "<#{self.class}(server=#{server}, resources=#{resources && resources.inspect_compact}, providers=#{providers && providers.inspect_compact})>"
end
validate() click to toggle source
# File lib/ironfan/broker/computer.rb, line 53
def validate
  computer = self
  chosen_resources.each {|r| r.validate_computer! computer }
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.