position
opts is a hash of machine options.
Valid options are:
:position (overridden by position arg)
:size
:os
:ami
:group
:keypair
:address
# File lib/rudy/metadata/machine.rb, line 57 def initialize(position='01', opts={}) opts = { :size => current_machine_size, :os => current_machine_os, :ami => current_machine_image, :group => current_group_name, :keypair => root_keypairname }.merge opts opts[:address] = current_machine_address opts[:position] || position super Rudy::Machines::RTYPE, opts # Rudy::Metadata#initialize @position = position # Defaults: @created = Time.now.utc @available = false postprocess end
# File lib/rudy/metadata/machine.rb, line 181 def attached_volumes volumes = [] return volumes if @instid.nil? Rudy::AWS::EC2::Volumes.list_by_instance( @instid) || [] end
See available attribute
# File lib/rudy/metadata/machine.rb, line 228 def available?; @available; end
# File lib/rudy/metadata/machine.rb, line 141 def create raise "#{name} is already running" if instance_running? # Options for Rudy::AWS::EC2::Instances#create opts = { :min => 1, :size => @size, :ami => @ami, :group => @group, :keypair => @keypair, :zone => @zone, :machine_data => self.generate_machine_data.to_yaml } ld "OPTS: #{opts.inspect}" Rudy::AWS::EC2::Instances.create(opts) do |inst| @instid = inst.awsid @created = @started = Time.now @state = inst.state # We need to be safe when creating machines because if an exception is # raised, instances will have been created but the calling class won't know. end self.save sleep 1 # Eventual consistency in SimpleDB self end
# File lib/rudy/metadata/machine.rb, line 131 def create_mock refresh! @dns_public = @dns_private = nil inst = Rudy::AWS::EC2::Instances.list(:running).first @instid = inst.awsid self.save :replace sleep 1 self end
# File lib/rudy/metadata/machine.rb, line 214 def default_device windows? ? Rudy::DEFAULT_WINDOWS_DEVICE : Rudy::DEFAULT_LINUX_DEVICE end
# File lib/rudy/metadata/machine.rb, line 210 def default_fstype windows? ? Rudy::DEFAULT_WINDOWS_FS : Rudy::DEFAULT_LINUX_FS end
# File lib/rudy/metadata/machine.rb, line 172 def destroy Rudy::AWS::EC2::Instances.destroy(@instid) if instance_running? super end
# File lib/rudy/metadata/machine.rb, line 93 def disks Rudy::Disks.list end
# File lib/rudy/metadata/machine.rb, line 225 def dns_private?; !@dns_private.nil? && !@dns_private.empty?; end
# File lib/rudy/metadata/machine.rb, line 224 def dns_public?; !@dns_public.nil? && !@dns_public.empty?; end
# File lib/rudy/metadata/machine.rb, line 202 def generate_machine_data d = {} [:region, :zone, :environment, :role, :position].each do |k| d[k] = self.send k end d end
# File lib/rudy/metadata/machine.rb, line 102 def get_console raise "Instance not running" unless instance_running? raw = Rudy::AWS::EC2::Instances.console @instid console = Base64.decode64(raw) # The linux console can include ANSI escape codes for color, # clear screen etc... We strip them out to get rid of the # clear specifically. Otherwise the display is messed! console &&= console.noansi if console.respond_to? :noansi console end
# File lib/rudy/metadata/machine.rb, line 98 def get_instance Rudy::AWS::EC2::Instances.get @instid end
# File lib/rudy/metadata/machine.rb, line 113 def get_password unless windows? raise "Password support is Windows only (this is #{@os})" end console = get_console raise "Console output not yet available. Please wait." if console.nil? unless console.match(/<Password>(.+)<\/Password>/) # /m, match multiple lines raise "Password not yet available. Is this a custom AMI?" end encrtypted_text = ($1 || '').strip k = Rye::Key.from_file root_keypairpath k.decrypt encrtypted_text end
# File lib/rudy/metadata/machine.rb, line 221 def linux?; os? 'linux'; end
# File lib/rudy/metadata/machine.rb, line 219 def os?(v); @os.to_s == v.to_s; end
# File lib/rudy/metadata/machine.rb, line 80 def postprocess @position &&= @position.to_s.rjust(2, '0') @os &&= @os.to_sym end
# File lib/rudy/metadata/machine.rb, line 89 def rbox r = Rudy::Routines::Handlers::RyeTools.create_box self end
# File lib/rudy/metadata/machine.rb, line 187 def refresh!(metadata=true) ## Updating the metadata isn't necessary super() if metadata # update metadata @instance = get_instance if @instance.is_a?(Rudy::AWS::EC2::Instance) @dns_public, @dns_private = @instance.dns_public, @instance.dns_private @state = @instance.state save :replace elsif @instance.nil? @awsid = @dns_public = @dns_private = nil @state = 'rogue' # Don't save it b/c it's possible the EC2 server is just down. end end
# File lib/rudy/metadata/machine.rb, line 177 def restart Rudy::AWS::EC2::Instances.restart(@instid) if instance_running? end
# File lib/rudy/metadata/machine.rb, line 222 def solaris?; os? 'solaris'; end
Generated with the Darkfish Rdoc Generator 2.