Class: Ironfan::Broker::Computer
- Inherits:
-
Ironfan::Builder
- Object
- Ironfan::Builder
- Ironfan::Broker::Computer
- Defined in:
- lib/ironfan/headers.rb,
lib/ironfan/broker/computer.rb
Instance Method Summary collapse
-
#bogus ⇒ Object
Accessors.
-
#bogus? ⇒ Boolean
Status flags.
- #bootstrap_distro ⇒ Object
- #chef_client_script_content ⇒ Object
- #chef_provider ⇒ Object
-
#chosen_providers(options = {}) ⇒ Object
Utility.
- #chosen_resources(options = {}) ⇒ Object
-
#client ⇒ Object
client.
- #client? ⇒ Boolean
-
#correlate ⇒ Object
Discovery.
- #created? ⇒ Boolean
- #display_boolean(value) ⇒ Object
- #dns_name ⇒ Object
- #ensure_dependencies ⇒ Object
- #environment ⇒ Object
- #iaas_provider ⇒ Object
-
#initialize(*args) ⇒ Computer
constructor
A new instance of Computer.
- #keypair ⇒ Object
-
#kill(options = {}) ⇒ Object
Manipulation.
- #killable? ⇒ Boolean
- #launch ⇒ Object
- #launchable? ⇒ Boolean
- #lookup_snapshot_id(region, snapshot_name) ⇒ Object
-
#machine ⇒ Object
Machine.
- #machine=(value) ⇒ Object
- #machine? ⇒ Boolean
- #name ⇒ Object
- #node ⇒ Object
- #node=(value) ⇒ Object
- #node? ⇒ Boolean
- #permanent? ⇒ Boolean
- #private_key ⇒ Object
- #receive_providers(objs) ⇒ Object
- #running? ⇒ Boolean
- #save(options = {}) ⇒ Object
- #server? ⇒ Boolean
- #ssh_identity_file ⇒ Object
- #ssh_user ⇒ Object
-
#sshable? ⇒ Boolean
True if machine is likely to be reachable by ssh.
- #start ⇒ Object
- #stop ⇒ Object
- #stopped? ⇒ Boolean
-
#to_display(style, values = {}) ⇒ Object
Display.
- #to_s ⇒ Object
- #validate ⇒ Object
Methods inherited from Ironfan::Builder
Constructor Details
#initialize(*args) ⇒ Computer
Returns a new instance of Computer.
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/ironfan/broker/computer.rb', line 21 def initialize(*args) super providers[:chef] ||= Ironfan::Provider::ChefServer return unless server providers[:iaas] = server.selected_cloud.provider volumes = server.volumes.values puts server.selected_cloud region = server.selected_cloud.region # Turn snapshot names into snapshot ids corresponding to the server region volumes.each do |vol| vol.snapshot_id || vol.snapshot_id(lookup_snapshot_id(region, vol.snapshot_name)) end volumes += server.implied_volumes volumes.each{|vol| self.drive vol.name, :volume => vol } rescue StandardError => err ; err.polish("#{self.class} on '#{args.inspect}'") rescue nil ; raise end |
Instance Method Details
#bogus ⇒ Object
Accessors
184 185 186 |
# File 'lib/ironfan/broker/computer.rb', line 184 def bogus resources.values.map(&:bogus).flatten end |
#bogus? ⇒ Boolean
Status flags
232 233 234 |
# File 'lib/ironfan/broker/computer.rb', line 232 def bogus? resources.values.any?(&:bogus?) end |
#bootstrap_distro ⇒ Object
214 |
# File 'lib/ironfan/broker/computer.rb', line 214 def bootstrap_distro ; (server && server.selected_cloud) ? server.selected_cloud.bootstrap_distro : nil ; end |
#chef_client_script_content ⇒ Object
144 145 146 147 148 149 150 |
# File 'lib/ironfan/broker/computer.rb', line 144 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.("../../../config/#{cloud.chef_client_script}", File.dirname(File.realdirpath(__FILE__))) @chef_client_script_content = Ironfan.safely{ File.read(script_filename) } end |
#chef_provider ⇒ Object
118 |
# File 'lib/ironfan/broker/computer.rb', line 118 def chef_provider ; providers[:chef] ; end |
#chosen_providers(options = {}) ⇒ Object
Utility
124 125 126 127 128 129 |
# File 'lib/ironfan/broker/computer.rb', line 124 def chosen_providers(={}) case [:providers] when :all,nil then [:chef,:iaas] else [ ([:providers]) ] end end |
#chosen_resources(options = {}) ⇒ Object
131 132 133 134 135 |
# File 'lib/ironfan/broker/computer.rb', line 131 def chosen_resources(={}) chosen_providers().map do |name| providers[name].resources end.flatten end |
#client ⇒ Object
client
199 200 201 |
# File 'lib/ironfan/broker/computer.rb', line 199 def client self[:client] end |
#client? ⇒ Boolean
235 236 237 |
# File 'lib/ironfan/broker/computer.rb', line 235 def client? not client.nil? end |
#correlate ⇒ Object
Discovery
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/ironfan/broker/computer.rb', line 51 def correlate Chef::Log.info chosen_resources 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? ⇒ Boolean
238 239 240 |
# File 'lib/ironfan/broker/computer.rb', line 238 def created? machine? && machine.created? end |
#display_boolean(value) ⇒ Object
179 |
# File 'lib/ironfan/broker/computer.rb', line 179 def display_boolean(value) value ? "yes" : "no"; end |
#dns_name ⇒ Object
213 |
# File 'lib/ironfan/broker/computer.rb', line 213 def dns_name ; machine? ? machine.dns_name : nil ; end |
#ensure_dependencies ⇒ Object
137 138 139 140 141 142 |
# File 'lib/ironfan/broker/computer.rb', line 137 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 ⇒ Object
194 |
# File 'lib/ironfan/broker/computer.rb', line 194 def environment ; server && server.environment ; end |
#iaas_provider ⇒ Object
119 |
# File 'lib/ironfan/broker/computer.rb', line 119 def iaas_provider ; providers[:iaas] ; end |
#keypair ⇒ Object
216 217 218 |
# File 'lib/ironfan/broker/computer.rb', line 216 def keypair resources[:keypair] end |
#kill(options = {}) ⇒ Object
Manipulation
77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/ironfan/broker/computer.rb', line 77 def kill(={}) target_resources = chosen_resources() 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? ⇒ Boolean
244 245 246 |
# File 'lib/ironfan/broker/computer.rb', line 244 def killable? (not bogus?) && (not permanent?) && (node? || client? || created?) end |
#launch ⇒ Object
91 92 93 94 95 96 97 98 99 100 |
# File 'lib/ironfan/broker/computer.rb', line 91 def launch ensure_dependencies iaas_provider.machine_class.create! self node.announce_state :started server.to_machine_manifest.components.each do |component| component.announce_to(node) end save self end |
#launchable? ⇒ Boolean
247 248 249 |
# File 'lib/ironfan/broker/computer.rb', line 247 def launchable? (not bogus?) && (not created?) end |
#lookup_snapshot_id(region, snapshot_name) ⇒ Object
16 17 18 19 |
# File 'lib/ironfan/broker/computer.rb', line 16 def lookup_snapshot_id(region, snapshot_name) keys = [region.to_s, snapshot_name.to_s] return Chef::Config[:ec2_snapshot_info][ keys ][:snapshot_id] rescue nil end |
#machine ⇒ Object
Machine
207 208 209 |
# File 'lib/ironfan/broker/computer.rb', line 207 def machine self[:machine] end |
#machine=(value) ⇒ Object
210 211 212 |
# File 'lib/ironfan/broker/computer.rb', line 210 def machine=(value) self[:machine] = value end |
#machine? ⇒ Boolean
241 242 243 |
# File 'lib/ironfan/broker/computer.rb', line 241 def machine? not machine.nil? end |
#name ⇒ Object
42 43 44 45 46 |
# File 'lib/ironfan/broker/computer.rb', line 42 def name return server.full_name if server? return @name if @name "unnamed:#{object_id}" end |
#node ⇒ Object
187 188 189 |
# File 'lib/ironfan/broker/computer.rb', line 187 def node self[:node] end |
#node=(value) ⇒ Object
190 191 192 |
# File 'lib/ironfan/broker/computer.rb', line 190 def node=(value) self[:node]= value end |
#node? ⇒ Boolean
250 251 252 |
# File 'lib/ironfan/broker/computer.rb', line 250 def node? not node.nil? end |
#permanent? ⇒ Boolean
253 254 255 256 257 |
# File 'lib/ironfan/broker/computer.rb', line 253 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 ⇒ Object
202 |
# File 'lib/ironfan/broker/computer.rb', line 202 def private_key ; client? ? client.private_key : nil ; end |
#receive_providers(objs) ⇒ Object
274 275 276 277 278 279 280 |
# File 'lib/ironfan/broker/computer.rb', line 274 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? ⇒ Boolean
258 259 260 |
# File 'lib/ironfan/broker/computer.rb', line 258 def running? machine? && machine.running? end |
#save(options = {}) ⇒ Object
114 115 116 |
# File 'lib/ironfan/broker/computer.rb', line 114 def save(={}) chosen_resources().each {|res| res.save! self} end |
#server? ⇒ Boolean
261 262 263 |
# File 'lib/ironfan/broker/computer.rb', line 261 def server? not server.nil? end |
#ssh_identity_file ⇒ Object
222 223 224 225 226 227 |
# File 'lib/ironfan/broker/computer.rb', line 222 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 ⇒ Object
220 |
# File 'lib/ironfan/broker/computer.rb', line 220 def ssh_user ; (server && server.selected_cloud) ? server.selected_cloud.ssh_user : nil ; end |
#sshable? ⇒ Boolean
Returns true if machine is likely to be reachable by ssh.
269 270 271 272 |
# File 'lib/ironfan/broker/computer.rb', line 269 def sshable? # if there's any hope of success, give it a try. running? || node? end |
#start ⇒ Object
107 108 109 110 111 112 |
# File 'lib/ironfan/broker/computer.rb', line 107 def start ensure_dependencies machine.start node.announce_state :started save end |
#stop ⇒ Object
102 103 104 105 |
# File 'lib/ironfan/broker/computer.rb', line 102 def stop machine.stop node.announce_state :stopped end |
#stopped? ⇒ Boolean
264 265 266 |
# File 'lib/ironfan/broker/computer.rb', line 264 def stopped? machine? && machine.stopped? end |
#to_display(style, values = {}) ⇒ Object
Display
155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 |
# File 'lib/ironfan/broker/computer.rb', line 155 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 ⇒ Object
282 283 284 |
# File 'lib/ironfan/broker/computer.rb', line 282 def to_s "<#{self.class}(server=#{server}, resources=#{resources && resources.inspect_compact}, providers=#{providers && providers.inspect_compact})>" end |
#validate ⇒ Object
69 70 71 72 |
# File 'lib/ironfan/broker/computer.rb', line 69 def validate computer = self chosen_resources.each {|r| r.validate_computer! computer } end |