Class: CloudInteractor
- Inherits:
-
Object
- Object
- CloudInteractor
- 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
-
#initialize(auth_hash, options) ⇒ CloudInteractor
constructor
A new instance of CloudInteractor.
- #parse_args(args, final_args = {}) ⇒ Object
- #parse_args_hash(args, hash_args = {}) ⇒ Object
- #run(args) ⇒ Object
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, @main_obj, @classes = {},{} @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 |