Builder
# 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
Accessors
# File lib/ironfan/broker/computer.rb, line 173 def bogus resources.values.map(&:bogus).flatten end
Status flags
# File lib/ironfan/broker/computer.rb, line 221 def bogus? resources.values.any?(&:bogus?) end
# File lib/ironfan/broker/computer.rb, line 203 def bootstrap_distro ; (server && server.selected_cloud) ? server.selected_cloud.bootstrap_distro : nil ; end
# 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
# File lib/ironfan/broker/computer.rb, line 99 def chef_provider ; providers[:chef] ; end
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
# 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
# File lib/ironfan/broker/computer.rb, line 188 def client self[:client] end
# File lib/ironfan/broker/computer.rb, line 224 def client? not client.nil? end
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
# File lib/ironfan/broker/computer.rb, line 227 def created? machine? and machine.created? end
# File lib/ironfan/broker/computer.rb, line 168 def display_boolean(value) value ? "yes" : "no"; end
# File lib/ironfan/broker/computer.rb, line 202 def dns_name ; machine? ? machine.dns_name : nil ; end
# 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
# File lib/ironfan/broker/computer.rb, line 183 def environment ; server && server.environment ; end
# File lib/ironfan/broker/computer.rb, line 100 def iaas_provider ; providers[:iaas] ; end
# File lib/ironfan/broker/computer.rb, line 205 def keypair resources[:keypair] end
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
# File lib/ironfan/broker/computer.rb, line 233 def killable? not permanent? and (node? || client? || created?) end
# 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
# File lib/ironfan/broker/computer.rb, line 236 def launchable? not bogus? and not created? end
Machine
# File lib/ironfan/broker/computer.rb, line 196 def machine self[:machine] end
# File lib/ironfan/broker/computer.rb, line 199 def machine=(value) self[:machine] = value end
# File lib/ironfan/broker/computer.rb, line 230 def machine? not machine.nil? end
# File lib/ironfan/broker/computer.rb, line 27 def name return server.full_name if server? return @name if @name "unnamed:#{object_id}" end
# File lib/ironfan/broker/computer.rb, line 176 def node self[:node] end
# File lib/ironfan/broker/computer.rb, line 179 def node=(value) self[:node]= value end
# File lib/ironfan/broker/computer.rb, line 239 def node? not node.nil? end
# 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
# File lib/ironfan/broker/computer.rb, line 191 def private_key ; client? ? client.private_key : nil ; end
# 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
# File lib/ironfan/broker/computer.rb, line 247 def running? machine? and machine.running? end
# File lib/ironfan/broker/computer.rb, line 95 def save(options={}) chosen_resources(options).each {|res| res.save! self} end
# File lib/ironfan/broker/computer.rb, line 250 def server? not server.nil? end
# 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
# File lib/ironfan/broker/computer.rb, line 209 def ssh_user ; (server && server.selected_cloud) ? server.selected_cloud.ssh_user : nil ; end
@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
# File lib/ironfan/broker/computer.rb, line 88 def start ensure_dependencies machine.start node.announce_state :started save end
# File lib/ironfan/broker/computer.rb, line 83 def stop machine.stop node.announce_state :stopped end
# File lib/ironfan/broker/computer.rb, line 253 def stopped? machine? and machine.stopped? end
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
Generated with the Darkfish Rdoc Generator 2.