Class: CloudInteractor

Inherits:
Object
  • Object
show all
Defined in:
lib/cloud_interactor/domain/update.rb,
lib/cloud_interactor/image.rb,
lib/cloud_interactor/domain.rb,
lib/cloud_interactor/flavor.rb,
lib/cloud_interactor/parser.rb,
lib/cloud_interactor/region.rb,
lib/cloud_interactor/server.rb,
lib/cloud_interactor/sshkey.rb,
lib/cloud_interactor/volume.rb,
lib/cloud_interactor/helpers.rb,
lib/cloud_interactor/version.rb,
lib/cloud_interactor/domain/list.rb,
lib/cloud_interactor/domain/read.rb,
lib/cloud_interactor/server/list.rb,
lib/cloud_interactor/server/poll.rb,
lib/cloud_interactor/server/read.rb,
lib/cloud_interactor/volume/list.rb,
lib/cloud_interactor/volume/read.rb,
lib/cloud_interactor/domain/create.rb,
lib/cloud_interactor/server/create.rb,
lib/cloud_interactor/volume/create.rb,
lib/cloud_interactor/authentication.rb,
lib/cloud_interactor/cloud_provider.rb,
lib/cloud_interactor/domain/destroy.rb,
lib/cloud_interactor/server/destroy.rb,
lib/cloud_interactor/volume/destroy.rb,
lib/cloud_interactor/cloud_interactor.rb,
lib/cloud_interactor/domain/read_record.rb,
lib/cloud_interactor/server/read_volume.rb,
lib/cloud_interactor/domain/list_records.rb,
lib/cloud_interactor/server/list_volumes.rb,
lib/cloud_interactor/domain/create_record.rb,
lib/cloud_interactor/domain/update_record.rb,
lib/cloud_interactor/server/attach_volume.rb,
lib/cloud_interactor/server/detach_volume.rb,
lib/cloud_interactor/domain/destroy_record.rb

Overview

TODO Grant more options to update?

Defined Under Namespace

Classes: Authentication, CloudProvider, Domain, Flavor, Helper, Image, Region, SSHKey, Server, Volume

Constant Summary collapse

VERSION =

major_version.minor_version.bugfixes

"1.1.1"
ALLOWED_HLMS =
['domain', 'flavor', 'image', 'region', 'server', 'sshkey', 'volume']

Instance Method Summary collapse

Constructor Details

#initialize(auth_hash, options) ⇒ CloudInteractor

Returns a new instance of CloudInteractor.



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/cloud_interactor/cloud_interactor.rb', line 4

def initialize auth_hash, options
  @main_obj, @classes = {},{}
  @options            = options
  @main_obj['output'] = {}
  @auth_hash          = auth_hash
  @classes['helper']  = Helper.new(@main_obj, @classes, @options)
  @classes['clouds']  = CloudProvider.new(@options)
  @classes['domain']  = Domain.new(@main_obj, @auth_hash, @classes, @options)
  @classes['flavor']  = Flavor.new(@main_obj, @classes, @options)
  @classes['image']   = Image.new(@main_obj, @classes, @options)
  @classes['region']  = Region.new(@main_obj, @classes, @options)
  @classes['server']  = Server.new(@main_obj, @classes, @options)
  @classes['sshkey']  = SSHKey.new(@main_obj, @classes, @options)
  @classes['volume']  = Volume.new(@main_obj, @classes, @options)
  @classes['auth']    = Authentication.new(@auth_hash, @options)
end

Instance Method Details

#parse_args(args, final_args = {}) ⇒ Object



2
3
4
5
6
7
8
9
# File 'lib/cloud_interactor/parser.rb', line 2

def parse_args args, final_args={}
  args[0] = args[0].singularize
  #example args: domain "create:mydomain.us:23.253.44.192:my"

  raise "This class does not support #{ args[0] } at this time" unless ALLOWED_HLMS.include?(args[0])

  @classes[args[0]].send(:run, args[1].split(':').first, parse_args_hash(args))
end

#parse_args_hash(args, hash_args = {}) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/cloud_interactor/parser.rb', line 11

def parse_args_hash args, hash_args={}
  prep_args = args[1].split(':')

  hash_args[prep_args[0]] = {}

  if prep_args.count > 1
    prep_args[1..(prep_args.count-1)].each do |arg|
      hash_args[prep_args[0]][prep_args.index(arg)] = arg
    end
  else
    hash_args[prep_args[0]]['type'] = prep_args[0]
  end

  mappings = case
             #this case should always be first or else "server" case overrides
             when prep_args[0] =~ /attach_volume|detach_volume|list_volumes|read_volume/ then { 1 => "server_name", 2 => "volume_name", 3 => "size", 4 => "device_location", 5 => 'volume_type'}
             #remap the args from generic args to ones specific for a case
             when args[0] =~ /domain/                                                    then { 1 => "domain", 2 => "subdomain", 3 => "target_ip", 4 => 'type' }
             when args[0] =~ /server/                                                    then { 1 => "name", 2 => "flavor" }
             when args[0] =~ /volume/                                                    then { 1 => "display_name", 2 => "size", 3 => 'volume_type' }
             when args[0] =~ /sshkey/                                                    then { 1 => "name", 2 => :ssh_pub_key }
             when args[0] =~ /flavor|image|region/                                       then { 1 => "name" }
             else raise "FATAL! Unsupported High Level Class #{ args[0] } for CloudInteractor! Please raise an issue on github with this stacktrace! args:#{ args }"
             end 

  Hash[hash_args[hash_args.keys.first].map {|k,v| [mappings[k], v]}]
end

#run(args) ⇒ Object



21
22
23
24
25
26
27
28
# File 'lib/cloud_interactor/cloud_interactor.rb', line 21

def run args
  parse_args(args) unless args.empty?

  #clear out the main_obj so repeated runs do not cause strange data
  @main_obj = @main_obj.keep_if {|key, value| key == 'output'}

  @main_obj['output']
end