Class: PoolParty::Remote::Metavirt

Inherits:
RemoterBase show all
Includes:
Dslify, CloudResourcer
Defined in:
lib/poolparty/net/remoter_bases/metavirt/metavirt.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods included from CloudResourcer

#dependency_resolver, #instances, #plugin_directory, #run_stored_block, #store_block, #stored_block, #using

Methods inherited from RemoterBase

#after_launch_instance, #after_launched, available_bases, #before_shutdown, #cloud, inherited, #key_name, #keypair, #launch_instance!, launch_instance!, #remoter_base_options, symbol, #terminate_youngest_instance!, #to_s

Methods included from Pinger

included

Methods included from PoolParty::Remote

#are_any_nodes_exceeding_minimum_runtime?, #are_too_few_instances_running?, #are_too_many_instances_running?, available, #commands, #execute!, #list_of_instances, #list_of_nodes_exceeding_minimum_runtime, #netssh, #nodes, #remote_rsync_command, #remote_ssh_array, #remote_ssh_string, #rsync, #rsync_command, #rsync_storage_files_to, #rsync_storage_files_to_command, #rsync_to, #rsync_to_command, #run_command_on, #run_command_on_command, #run_command_on_instance_number, #run_local, #run_remote, #scp_array, #scp_to_command, #simplest_run_remote, #ssh_array, #ssh_command, #ssh_into, #ssh_into_instance_number, #ssh_options, #ssh_string, #target_host

Constructor Details

#initialize(o = {}, &block) ⇒ Metavirt

Returns a new instance of Metavirt.



19
20
21
22
23
# File 'lib/poolparty/net/remoter_bases/metavirt/metavirt.rb', line 19

def initialize(o={}, &block)
  using o[:remoter_base], o.delete(:remote_base) if o.has_key?(:remoter_base)
  super
  set_vars_from_options remote_base.dsl_options
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(m, args, &blk) ⇒ Object



25
26
27
# File 'lib/poolparty/net/remoter_bases/metavirt/metavirt.rb', line 25

def method_missing(m, args, &blk)
  remote_base.respond_to?(m) ? remote_base.send(m, args, &blk) : super
end

Class Method Details

.describe_instance(o = {}) ⇒ Object

Describe an instance’s status, must pass :vmx_file in the options



81
82
83
# File 'lib/poolparty/net/remoter_bases/metavirt/metavirt.rb', line 81

def self.describe_instance(o={})
  new(o).describe_instance
end

.describe_instances(o = {}) ⇒ Object



90
91
92
# File 'lib/poolparty/net/remoter_bases/metavirt/metavirt.rb', line 90

def self.describe_instances(o={})
  new(o).describe_instances
end

.launch_new_instance!(o = {}) ⇒ Object



60
61
62
# File 'lib/poolparty/net/remoter_bases/metavirt/metavirt.rb', line 60

def self.launch_new_instance!(o={})
  new_instance(o).launch_new_instance!
end

.terminate_instance!(o = {}) ⇒ Object

Terminate an instance by id



71
72
73
# File 'lib/poolparty/net/remoter_bases/metavirt/metavirt.rb', line 71

def self.terminate_instance!(o={})
  new(nil, o).terminate_instance!
end

Instance Method Details

#authorized_keysObject



29
30
31
# File 'lib/poolparty/net/remoter_bases/metavirt/metavirt.rb', line 29

def authorized_keys
  keypair.public_key
end

#describe_instance(o = {}) ⇒ Object



84
85
86
87
88
# File 'lib/poolparty/net/remoter_bases/metavirt/metavirt.rb', line 84

def describe_instance(o={})
  opts = to_hash.merge(o)
  raise "id or instance_id must be set before calling describe_instace" if !id(o)
  MetavirtInstance.new server["/instances/#{id(o)}"].get.json_parse
end

#describe_instances(o = {}) ⇒ Object



93
94
95
96
97
# File 'lib/poolparty/net/remoter_bases/metavirt/metavirt.rb', line 93

def describe_instances(o={})
  opts = to_hash.merge(o)
  list = JSON.parse( server["/instances/"].get ).collect{|i| i.symbolize_keys!}
  list.collect{|l| MetavirtInstance.new l}
end

#image_idObject



41
42
43
# File 'lib/poolparty/net/remoter_bases/metavirt/metavirt.rb', line 41

def image_id
  dsl_options[:remote_base].image_id
end

#launch_new_instance!(o = {}) ⇒ Object



63
64
65
66
67
68
# File 'lib/poolparty/net/remoter_bases/metavirt/metavirt.rb', line 63

def launch_new_instance!(o={})
  opts = to_hash.merge(o)
  result = JSON.parse(server['/run-instance'].put(opts.to_json)).symbolize_keys!
  @id = result[:instance_id]
  MetavirtInstance.new result
end

#remote_base(n = nil) ⇒ Object



33
34
35
36
37
38
39
# File 'lib/poolparty/net/remoter_bases/metavirt/metavirt.rb', line 33

def remote_base(n=nil)
  if n.nil?
    @remote_base
  else
    @remote_base = n
  end
end

#serverObject

Setup server instance that will talk to metavirt webservice



46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/poolparty/net/remoter_bases/metavirt/metavirt.rb', line 46

def server
  if @server
    @server
  else
    opts = { :content_type  =>'application/json', 
             :accept        => 'application/json',
             :host          => 'http://localhost',
             :port          => '3000'
            }.merge(server_config)
    @uri = "#{opts.delete(:host)}:#{opts.delete(:port)}"
    @server = RestClient::Resource.new( @uri, opts)
  end
end

#terminate_instance!(o = {}) ⇒ Object



74
75
76
77
78
# File 'lib/poolparty/net/remoter_bases/metavirt/metavirt.rb', line 74

def terminate_instance!(o={})
  opts = to_hash.merge(o)
  raise "id or instance_id must be set before calling describe_instace" if !id(o)
  MetavirtInstance.new server["/instances/#{id(o)}"].delete.json_parse
end

#to_hashObject



99
100
101
# File 'lib/poolparty/net/remoter_bases/metavirt/metavirt.rb', line 99

def to_hash
  dsl_options.merge(:remote_base => remote_base.to_hash)
end