cloudstack_ruby_client 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (30) hide show
  1. data/Rakefile +1 -1
  2. data/bin/cloudstack_ruby_client +71 -0
  3. data/cloudstack_ruby_client.gemspec +1 -1
  4. data/lib/cloudstack_ruby_client/api/accounts_api.rb +2 -2
  5. data/lib/cloudstack_ruby_client/api/apidiscovery_api.rb +7 -0
  6. data/lib/cloudstack_ruby_client/api/asyncjob_api.rb +8 -0
  7. data/lib/cloudstack_ruby_client/api/autoscale_api.rb +2 -2
  8. data/lib/cloudstack_ruby_client/api/configuration_api.rb +2 -2
  9. data/lib/cloudstack_ruby_client/api/firewall_api.rb +2 -2
  10. data/lib/cloudstack_ruby_client/api/infra_api.rb +2 -2
  11. data/lib/cloudstack_ruby_client/api/network_api.rb +2 -2
  12. data/lib/cloudstack_ruby_client/api/project_api.rb +2 -2
  13. data/lib/cloudstack_ruby_client/api/securitygroup_api.rb +2 -2
  14. data/lib/cloudstack_ruby_client/api/serviceoffering_api.rb +2 -2
  15. data/lib/cloudstack_ruby_client/api/snapshot_api.rb +2 -2
  16. data/lib/cloudstack_ruby_client/api/storage_api.rb +2 -2
  17. data/lib/cloudstack_ruby_client/api/systemvm_api.rb +2 -2
  18. data/lib/cloudstack_ruby_client/api/template_api.rb +2 -2
  19. data/lib/cloudstack_ruby_client/api/vm_api.rb +2 -2
  20. data/lib/cloudstack_ruby_client/api/volume_api.rb +2 -2
  21. data/lib/cloudstack_ruby_client/base_client.rb +6 -21
  22. data/lib/cloudstack_ruby_client/client.rb +54 -67
  23. data/lib/cloudstack_ruby_client/client_helper.rb +42 -51
  24. data/lib/cloudstack_ruby_client/help.rb +9 -0
  25. data/lib/cloudstack_ruby_client/version.rb +1 -1
  26. data/lib/cloudstack_ruby_client.rb +3 -2
  27. data/test/config.yml +3 -2
  28. data/test/unit/accounts_test.rb +11 -0
  29. data/test/unit/asyncjob_test.rb +34 -0
  30. metadata +47 -26
data/Rakefile CHANGED
@@ -16,4 +16,4 @@ end
16
16
 
17
17
  desc 'Run tests'
18
18
  task :test => Rake::Task["test:unit"]
19
- task :default => :test
19
+ task :default => :test
@@ -0,0 +1,71 @@
1
+ #!/usr/bin/env ruby
2
+ require 'readline'
3
+ require 'yaml'
4
+ require 'json'
5
+ require 'cloudstack_ruby_client'
6
+
7
+
8
+ case ARGV.first when '-h', '--help', '--usage', '-?', 'help', nil
9
+ puts CloudstackRubyClient::Help
10
+ exit ARGV.first ? 0 : 1
11
+ when '--version'
12
+ puts CloudstackRubyClient::Version
13
+ exit 0
14
+ end
15
+
16
+
17
+ APIKEY = ARGV[2]
18
+ SECRETKEY = ARGV[3]
19
+ URL = "http://#{ARGV[0]}:#{ARGV[1]}/client/api/"
20
+
21
+ comp = proc { |s| CloudstackRubyClient::Client.API_LIST.sort.grep(/^#{Regexp.escape(s)}/) }
22
+
23
+ client = nil
24
+
25
+ begin
26
+ client = CloudstackRubyClient::Client.new(URL, APIKEY, SECRETKEY, false)
27
+ rescue
28
+ puts "Error, cannot initiate the cloudStackRubyClient."
29
+ exit
30
+ end
31
+
32
+ puts "="*100
33
+ puts "Connected to host : #{URL}"
34
+ puts "APIKEY : #{APIKEY}"
35
+ puts "SECRETKEY : #{SECRETKEY}"
36
+ puts "="*100
37
+
38
+ Readline.completion_append_character = " "
39
+ Readline.completion_proc = comp
40
+ Readline.completer_word_break_characters = ""
41
+
42
+ stty_save = `stty -g`.chomp
43
+
44
+ begin
45
+ while line = Readline.readline("cloudstack(#{ARGV[0]}:#{ARGV[1]})>>", true)
46
+ begin
47
+ command = line.split(' ')[0].strip
48
+ argument = line.gsub(command, '').strip
49
+
50
+ if argument
51
+ argument = JSON.parse("{" + line.gsub(command, '').gsub('\'', '"').gsub('=>', ':') + "}")
52
+ puts client.method(command).call argument
53
+ else
54
+ puts client.method(command).call
55
+ end
56
+ rescue ArgumentError => e
57
+ puts "#{e.to_s}"
58
+ rescue RuntimeError => e
59
+ puts "Oops! something bad happened. Please try again"
60
+ rescue
61
+ puts "Sorry, command not supported"
62
+ end
63
+ end
64
+ rescue Interrupt => e
65
+ puts %Q{
66
+
67
+ Disconnected from the host
68
+ }
69
+ system('stty', stty_save) # Restore
70
+ exit
71
+ end
@@ -8,7 +8,7 @@ Gem::Specification.new do |gem|
8
8
  gem.version = CloudstackRubyClient::VERSION
9
9
  gem.authors = ["Chip Childers"]
10
10
  gem.email = ["chip.childers@gmail.com"]
11
- gem.description = %q{A Ruby client for CloudStack's API, licensed via the Apache Software License v2.}
11
+ gem.description = %q{A Ruby client for CloudStack's API, including a simple CLI.}
12
12
  gem.summary = %q{A Ruby client for CloudStack's API.}
13
13
  gem.homepage = "http://chipchilders.github.io/cloudstack_ruby_client/"
14
14
 
@@ -1,5 +1,5 @@
1
1
  module CloudstackRubyClient
2
- module Accounts
2
+ module Api
3
3
  module Domain
4
4
  cmd_processor :list_domains,
5
5
  :create_domain,
@@ -58,4 +58,4 @@ module CloudstackRubyClient
58
58
  :list_traffic_monitors
59
59
  end
60
60
  end
61
- end
61
+ end
@@ -0,0 +1,7 @@
1
+ module CloudstackRubyClient
2
+ module Api
3
+ module ApiDiscovery
4
+ cmd_processor :list_apis
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ module CloudstackRubyClient
2
+ module Api
3
+ module AsyncJob
4
+ cmd_processor :list_async_jobs,
5
+ :query_async_job_result
6
+ end
7
+ end
8
+ end
@@ -1,5 +1,5 @@
1
1
  module CloudstackRubyClient
2
- module AutoScale
2
+ module Api
3
3
  module AutoScale
4
4
  cmd_processor :create_counter,
5
5
  :create_condition,
@@ -23,4 +23,4 @@ module CloudstackRubyClient
23
23
  :update_auto_scale_vm_group
24
24
  end
25
25
  end
26
- end
26
+ end
@@ -1,5 +1,5 @@
1
1
  module CloudstackRubyClient
2
- module Configuration
2
+ module Api
3
3
  module Configuration
4
4
  cmd_processor :update_configuration,
5
5
  :list_configurations,
@@ -13,4 +13,4 @@ module CloudstackRubyClient
13
13
  :list_event_types
14
14
  end
15
15
  end
16
- end
16
+ end
@@ -1,5 +1,5 @@
1
1
  module CloudstackRubyClient
2
- module Firewall
2
+ module Api
3
3
  module Firewall
4
4
  cmd_processor :list_port_forwarding_rules,
5
5
  :create_port_forwarding_rule,
@@ -13,4 +13,4 @@ module CloudstackRubyClient
13
13
  :list_egress_firewall_rules
14
14
  end
15
15
  end
16
- end
16
+ end
@@ -1,5 +1,5 @@
1
1
  module CloudstackRubyClient
2
- module Infrastructure
2
+ module Api
3
3
  module Region
4
4
  cmd_processor :add_region,
5
5
  :update_region,
@@ -40,4 +40,4 @@ module CloudstackRubyClient
40
40
  :reconnect_host
41
41
  end
42
42
  end
43
- end
43
+ end
@@ -1,5 +1,5 @@
1
1
  module CloudstackRubyClient
2
- module Network
2
+ module Api
3
3
  module NetworkOffering
4
4
  cmd_processor :create_network_offering,
5
5
  :update_network_offering,
@@ -112,4 +112,4 @@ module CloudstackRubyClient
112
112
  :list_static_routes
113
113
  end
114
114
  end
115
- end
115
+ end
@@ -1,5 +1,5 @@
1
1
  module CloudstackRubyClient
2
- module Project
2
+ module Api
3
3
  module Project
4
4
  cmd_processor :create_project,
5
5
  :delete_project,
@@ -13,4 +13,4 @@ module CloudstackRubyClient
13
13
 
14
14
  end
15
15
  end
16
- end
16
+ end
@@ -1,5 +1,5 @@
1
1
  module CloudstackRubyClient
2
- module SecurityGroup
2
+ module Api
3
3
  module SecurityGroup
4
4
  cmd_processor :create_security_group,
5
5
  :delete_security_group,
@@ -10,4 +10,4 @@ module CloudstackRubyClient
10
10
  :list_security_groups
11
11
  end
12
12
  end
13
- end
13
+ end
@@ -1,5 +1,5 @@
1
1
  module CloudstackRubyClient
2
- module ServiceOffering
2
+ module Api
3
3
  module ServiceOffering
4
4
  cmd_processor :create_service_offering,
5
5
  :delete_service_offering,
@@ -14,4 +14,4 @@ module CloudstackRubyClient
14
14
  :list_disk_offerings
15
15
  end
16
16
  end
17
- end
17
+ end
@@ -1,5 +1,5 @@
1
1
  module CloudstackRubyClient
2
- module Snapshot
2
+ module Api
3
3
  module Snapshot
4
4
  cmd_processor :create_snapshot,
5
5
  :list_snapshots,
@@ -10,4 +10,4 @@ module CloudstackRubyClient
10
10
  :list_snapshot_policies
11
11
  end
12
12
  end
13
- end
13
+ end
@@ -1,5 +1,5 @@
1
1
  module CloudstackRubyClient
2
- module Storage
2
+ module Api
3
3
  module StoragePool
4
4
  cmd_processor :list_storage_pools,
5
5
  :create_storage_pool,
@@ -15,4 +15,4 @@ module CloudstackRubyClient
15
15
  :delete_image_store
16
16
  end
17
17
  end
18
- end
18
+ end
@@ -1,5 +1,5 @@
1
1
  module CloudstackRubyClient
2
- module SystemVm
2
+ module Api
3
3
  module SystemVm
4
4
  cmd_processor :start_system_vm,
5
5
  :reboot_system_vm,
@@ -22,4 +22,4 @@ module CloudstackRubyClient
22
22
  :create_virtual_router_element
23
23
  end
24
24
  end
25
- end
25
+ end
@@ -1,5 +1,5 @@
1
1
  module CloudstackRubyClient
2
- module Template
2
+ module Api
3
3
  module Template
4
4
  cmd_processor :create_template,
5
5
  :update_template,
@@ -31,4 +31,4 @@ module CloudstackRubyClient
31
31
  :register_ssh_key_pair
32
32
  end
33
33
  end
34
- end
34
+ end
@@ -1,5 +1,5 @@
1
1
  module CloudstackRubyClient
2
- module VirtualMachine
2
+ module Api
3
3
  module VirtualMachine
4
4
  cmd_processor :deploy_virtual_machine,
5
5
  :destroy_virtual_machine,
@@ -28,4 +28,4 @@ module CloudstackRubyClient
28
28
  :list_instance_groups
29
29
  end
30
30
  end
31
- end
31
+ end
@@ -1,5 +1,5 @@
1
1
  module CloudstackRubyClient
2
- module Volume
2
+ module Api
3
3
  module Volume
4
4
  cmd_processor :attach_volume,
5
5
  :upload_volume,
@@ -12,4 +12,4 @@ module CloudstackRubyClient
12
12
  :resize_volume
13
13
  end
14
14
  end
15
- end
15
+ end
@@ -1,11 +1,3 @@
1
- # require 'rubygems'
2
- # require 'base64'
3
- # require 'openssl'
4
- # require 'uri'
5
- # require 'cgi'
6
- # require 'net/http'
7
- # require 'json'
8
-
9
1
  class CloudstackRubyClient::BaseClient
10
2
 
11
3
  def initialize(api_url, api_key, secret_key, use_ssl=nil)
@@ -18,27 +10,20 @@ class CloudstackRubyClient::BaseClient
18
10
  def request(params)
19
11
  params['response'] = 'json'
20
12
  params['apiKey'] = @api_key
21
-
22
- params_arr = []
23
- params.each do |elem|
24
- params_arr << elem[0].to_s + '=' + CGI.escape(elem[1].to_s)\
25
- .gsub('+', '%20').gsub(' ','%20')
26
- end
27
-
28
- data = params_arr.sort.join '&'
29
-
13
+
14
+ data = params.map{ |k,v| "#{k.to_s}=#{CGI.escape(v.to_s).gsub(/\+|\ /, "%20")}" }.sort.join('&')
15
+
30
16
  signature = OpenSSL::HMAC.digest 'sha1', @secret_key, data.downcase
31
17
  signature = Base64.encode64(signature).chomp
32
18
  signature = CGI.escape(signature)
33
-
19
+
34
20
  url = "#{@api_url}?#{data}&signature=#{signature}"
35
21
  uri = URI.parse(url)
36
22
  http = Net::HTTP.new(uri.host, uri.port)
37
- #http.use_ssl = @use_ssl
38
- #http.verify_mode = OpenSSL::SSL::VERIFY_NONE
23
+ # http.use_ssl = @use_ssl
24
+ # http.verify_mode = OpenSSL::SSL::VERIFY_NONE
39
25
  request = Net::HTTP::Get.new(uri.request_uri)
40
26
 
41
27
  http.request(request)
42
28
  end
43
-
44
29
  end
@@ -1,75 +1,62 @@
1
1
  class CloudstackRubyClient::Client < CloudstackRubyClient::BaseClient
2
-
3
- ## Infra Api commands injection
4
- include CloudstackRubyClient::Infrastructure::Region
5
- include CloudstackRubyClient::Infrastructure::Zone
6
- include CloudstackRubyClient::Infrastructure::Pod
7
- include CloudstackRubyClient::Infrastructure::Cluster
8
- include CloudstackRubyClient::Infrastructure::Host
9
-
10
-
11
- ## Accounts Api command injection
12
- include CloudstackRubyClient::Accounts::Domain
13
- include CloudstackRubyClient::Accounts::Account
14
- include CloudstackRubyClient::Accounts::User
15
- include CloudstackRubyClient::Accounts::Limit
16
- include CloudstackRubyClient::Accounts::Usage
17
-
18
- ## System VM commands injection
19
- include CloudstackRubyClient::VirtualMachine::VirtualMachine
20
- include CloudstackRubyClient::VirtualMachine::VMGroup
21
-
22
- ## Virtual Machine commands insjection
23
- include CloudstackRubyClient::SystemVm::SystemVm
24
- include CloudstackRubyClient::SystemVm::Router
25
-
26
- ## Storage commands injection
27
- include CloudstackRubyClient::Storage::StoragePool
28
- include CloudstackRubyClient::Storage::ImageStore
29
-
30
- ## Network commands injection
31
- include CloudstackRubyClient::Network::NetworkOffering
32
- include CloudstackRubyClient::Network::Network
33
- include CloudstackRubyClient::Network::PhysicalNetwork
34
- include CloudstackRubyClient::Network::NetworkServiceProvider
35
- include CloudstackRubyClient::Network::StorageIpRange
36
- include CloudstackRubyClient::Network::NetworkDevice
37
- include CloudstackRubyClient::Network::NetworkACL
38
- include CloudstackRubyClient::Network::Vlan
39
- include CloudstackRubyClient::Network::Nat
40
- include CloudstackRubyClient::Network::VPN
41
- include CloudstackRubyClient::Network::LoadBalancer
42
- include CloudstackRubyClient::Network::VPC
43
2
 
44
- ## Volume command injection
45
- include CloudstackRubyClient::Volume::Volume
3
+ @@API_LIST = []
46
4
 
47
- ## Templdate command injection
48
- include CloudstackRubyClient::Template::Template
49
- include CloudstackRubyClient::Template::ISO
50
- include CloudstackRubyClient::Template::Registration
51
-
52
- ## Security group command injection
53
- include CloudstackRubyClient::SecurityGroup::SecurityGroup
54
-
55
- ## Project command injection
56
- include CloudstackRubyClient::Project::Project
57
-
58
- ## Snapshot command injection
59
- include CloudstackRubyClient::Snapshot::Snapshot
60
-
61
- ## Configuraion command injection
62
- include CloudstackRubyClient::Configuration::Configuration
63
- include CloudstackRubyClient::Configuration::Event
5
+ ## Api command injection
6
+ CloudstackRubyClient::Api.constants.collect{|k|
7
+ CloudstackRubyClient::Api.const_get(k)
8
+ }.select {|k| k.is_a?(Module)}.each do |sub_module|
9
+ include sub_module
10
+
11
+ @@API_LIST.concat sub_module.instance_methods(false)
12
+ end
64
13
 
65
- ## Service offering command injection
66
- include CloudstackRubyClient::ServiceOffering::ServiceOffering
67
- include CloudstackRubyClient::ServiceOffering::DiskOffering
14
+ def self.API_LIST
15
+ @@API_LIST
16
+ end
68
17
 
69
- ## Auto scale command injection
70
- include CloudstackRubyClient::AutoScale::AutoScale
18
+ ## login api command
19
+ def login(params = {})
20
+ auth_request(params, "login")
21
+ end
71
22
 
72
- ## Firewall command injection
73
- include CloudstackRubyClient::Firewall::Firewall
74
23
 
24
+ ## logout api command
25
+ def logout(params = {})
26
+ auth_request(params, "logout")
27
+ end
28
+
29
+ protected
30
+
31
+ def auth_request(params, command)
32
+ params['response'] = 'json'
33
+ params['command'] = command
34
+ data = params.map{ |k,v| "#{k.to_s}=#{CGI.escape(v.to_s).gsub(/\+|\ /, "%20")}" }.sort.join('&')
35
+
36
+ url = "#{@api_url}?#{data}"
37
+ uri = URI.parse(url)
38
+ http = Net::HTTP.new(uri.host, uri.port)
39
+ # http.use_ssl = @use_ssl
40
+ # http.verify_mode = OpenSSL::SSL::VERIFY_NONE
41
+ request = Net::HTTP::Get.new(uri.request_uri)
42
+
43
+ resp_title = "#{command}response";
44
+
45
+ response = http.request(request)
46
+ json = JSON.parse(response.body)
47
+
48
+ if !response.is_a?(Net::HTTPOK)
49
+ if ["431","530"].include?(response.code) and ["9999","4350"].include?(json[resp_title]['cserrorcode'])
50
+ raise ArgumentError, json[resp_title]['errortext']
51
+ end
52
+
53
+ raise RuntimeError, json['errorresponse']['errortext'] if response.code == "432"
54
+
55
+ puts 'Error ' + response.code + ':'
56
+ puts JSON.pretty_generate(json)
57
+ exit 1
58
+ end
59
+
60
+ json[resp_title]
61
+ end
75
62
  end
@@ -38,9 +38,9 @@ class Module
38
38
  arga.each_with_index.map {|x, i|
39
39
  i==0 ? x : x.capitalize
40
40
  }.join('')
41
- }";
41
+ }"
42
42
 
43
- resp_title = "#{arga.join('')}response";
43
+ resp_title = "#{arga.join('')}response"
44
44
  } +
45
45
 
46
46
  #
@@ -48,67 +48,58 @@ class Module
48
48
  #
49
49
 
50
50
  %Q{
51
- MALFORMED_RESPONSES.each do |k, v|;
52
- if k =~ command;
53
- resp_title = v;
54
- end;
55
- end;
56
-
57
- MALFORMED_CMDS.each do |k, v|;
58
- if k =~ command;
59
- command = v;
51
+ MALFORMED_RESPONSES.each do |k, v|
52
+ if k =~ command
53
+ resp_title = v
60
54
  end
61
- end;
55
+ end
62
56
 
63
- if /(list|create|delete)networkacl.*/i =~ command;
64
- command.gsub! /acl/i, 'ACL';
65
- end;
57
+ MALFORMED_CMDS.each do |k, v|
58
+ if k =~ command
59
+ command = v
60
+ end
61
+ end
62
+
63
+ if /(list|create|delete)networkacl.*/i =~ command
64
+ command.gsub!(/acl/i, 'ACL')
65
+ end
66
66
 
67
- if /.*(ssh).*/i =~ command;
68
- command.gsub! /ssh/i, 'SSH';
69
- end;
67
+ if /.*(ssh).*/i =~ command
68
+ command.gsub!(/ssh/i, 'SSH')
69
+ end
70
70
 
71
- if /(list|create|delete)lbstickinesspolic.*/i =~ command;
72
- command.gsub! /lb/i, 'LB';
73
- end;
71
+ if /(list|create|delete)lbstickinesspolic.*/i =~ command
72
+ command.gsub!(/lb/i, 'LB')
73
+ end
74
74
 
75
- if /.*vpc.*/i =~ command;
76
- command.gsub! /vpc/i, 'VPC';
77
- end;
75
+ if /.*vpc.*/i =~ command
76
+ command.gsub!(/vpc/i, 'VPC')
77
+ end
78
78
  } +
79
79
  %Q{
80
- params = {'command' => command};
81
- params.merge! args unless args.empty?;
82
-
83
- response = request params;
84
-
85
- if !response.is_a?(Net::HTTPOK);
86
- if response.code =~ /(431|530)/ &&
87
- (JSON.parse(response.body)[resp_title]['cserrorcode'] == 9999 ||
88
- JSON.parse(response.body)[resp_title]['cserrorcode'] == 4350);
89
-
90
- raise ArgumentError, JSON.parse(response.body)\
91
- [resp_title]['errortext'];
92
-
93
- end;
94
-
95
- if response.code == "432";
96
- raise RuntimeError, JSON.parse(response.body)\
97
- ['errorresponse']['errortext'];
80
+ params = {'command' => command}
81
+ params.merge!(args) unless args.empty?
82
+
83
+ response = request(params)
84
+ json = JSON.parse(response.body)
85
+
86
+ if !response.is_a?(Net::HTTPOK)
87
+ if ["431","530"].include?(response.code) and ["9999","4350"].include?(json[resp_title]['cserrorcode'])
88
+ raise ArgumentError, json[resp_title]['errortext']
89
+ end
98
90
 
99
- end;
91
+ raise RuntimeError, json['errorresponse']['errortext'] if response.code == "432"
100
92
 
101
93
  puts 'Error ' + response.code + ':'
102
- puts JSON.pretty_generate(JSON.parse(response.body));
103
- exit 1;
104
- end;
105
-
106
- json = JSON.parse(response.body);
94
+ puts JSON.pretty_generate(json)
95
+ exit 1
96
+ end
97
+
107
98
  json[resp_title]
108
- end;
99
+ end
109
100
  }
110
101
 
111
- self.class_eval meta_method
102
+ self.class_eval(meta_method)
112
103
  end
113
104
  end
114
- end
105
+ end
@@ -0,0 +1,9 @@
1
+ module CloudstackRubyClient
2
+ Help = %Q{
3
+ Usage: $ bin/cloudstack_ruby_client ${IPADDR}, ${PORT}, ${APIKEY}, ${SECRETKEY}
4
+
5
+ Example:
6
+
7
+ $cloudstack >> create_domain 'name' => 'testdomain'
8
+ }
9
+ end
@@ -1,3 +1,3 @@
1
1
  module CloudstackRubyClient
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -1,9 +1,10 @@
1
- %w[ base64 cgi openssl uri digest/sha1 net/https net/http json ].each { |f| require f }
1
+ %w[ base64 cgi openssl uri digest/sha1 net/https net/http json ].each { |f| require f }
2
2
 
3
3
  require 'cloudstack_ruby_client/version'
4
+ require 'cloudstack_ruby_client/help'
4
5
  require 'cloudstack_ruby_client/client_helper'
5
6
 
6
- Dir[File.join(File.dirname(__FILE__), 'cloudstack_ruby_client/api/*.rb')].sort.each { |lib| require lib }
7
+ Dir[File.join(File.dirname(__FILE__), 'cloudstack_ruby_client/api/*.rb')].sort.each { |lib| require lib }
7
8
 
8
9
  require 'cloudstack_ruby_client/base_client'
9
10
  require 'cloudstack_ruby_client/client'
data/test/config.yml CHANGED
@@ -1,6 +1,7 @@
1
1
  cloudstack:
2
2
  host: '10.1.192.92'
3
+ # host: 'localhost'
3
4
  port: '8080'
4
5
  admin_port: '8096'
5
- api_key: 'Vjx7Onwakz3t711ozmVBYEn279Vx8Cvo1ZCPdSDMflBfQnMyp90K3ZsBP-a8ai6VIUViolHll9uflM4JW561LQ'
6
- secret_key: 'cRph9bBFx32dg8yUjtv7srUyaC5eoM9_QimtutcO8b4l4RekQyuoNTUla7jx0D9GgjCfrEnAu_Vvck_4li7Ong'
6
+ api_key: 'd460dbswlC6ApcirESZJOh-JDCFxCtwtmoRd_FHC9QYwHNkeHi1BjdDrvnfQQ0vwDOC9t4yPF46o5Kfpn5eFVg'
7
+ secret_key: 'sZchCmafeZU4ZKM2HkX5DzcoWFWAYp3eGIpYFdgsCoYtZiTIuXIgv48Ja5vD1sdkf_gFFbh534hepPayEfcfNQ'
@@ -191,6 +191,17 @@ class AccountsTest < Test::Unit::TestCase
191
191
  assert_equal({}, @client.list_vpn_users)
192
192
  end
193
193
 
194
+ def test_login
195
+ # @client.login 'username' => 'admin', 'domain' => '/', 'password' => 'password'
196
+ assert_raise(RuntimeError) do
197
+ @client.login
198
+ end
199
+ end
200
+
201
+ def test_logout
202
+ assert_equal({"description" => "success"}, @client.logout)
203
+ end
204
+
194
205
  ### Limit Test ###
195
206
 
196
207
  def test_update_resource_limit
@@ -0,0 +1,34 @@
1
+ require 'test/unit'
2
+ require 'yaml'
3
+ require_relative '../../lib/cloudstack_ruby_client'
4
+
5
+ class AsyncjobTest < Test::Unit::TestCase
6
+
7
+ def setup
8
+ config = YAML.load_file("test/config.yml")
9
+ _host = config['cloudstack']['host']
10
+ _port = config['cloudstack']['port']
11
+ _admin_port = config['cloudstack']['admin_port']
12
+ _api_key = config['cloudstack']['api_key']
13
+ _secret_key = config['cloudstack']['secret_key']
14
+ @client = CloudstackRubyClient::Client.new \
15
+ "http://#{_host}:#{_port}/client/api",
16
+ "#{_api_key}",
17
+ "#{_secret_key}"
18
+ end
19
+
20
+ def teardown
21
+ # Do nothing here!
22
+ end
23
+
24
+ def test_list_async_jobs
25
+ assert_equal([], @client.list_async_jobs)
26
+ end
27
+
28
+ def test_query_async_job_result
29
+ assert_raise(ArgumentError) do
30
+ @client.query_async_job_result
31
+ end
32
+ end
33
+
34
+ end
metadata CHANGED
@@ -1,33 +1,45 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: cloudstack_ruby_client
3
- version: !ruby/object:Gem::Version
4
- version: 0.1.1
5
- prerelease:
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 2
8
+ - 0
9
+ version: 0.2.0
6
10
  platform: ruby
7
- authors:
11
+ authors:
8
12
  - Chip Childers
9
13
  autorequire:
10
14
  bindir: bin
11
15
  cert_chain: []
12
- date: 2013-08-19 00:00:00.000000000 Z
16
+
17
+ date: 2013-08-26 00:00:00 -04:00
18
+ default_executable:
13
19
  dependencies: []
14
- description: A Ruby client for CloudStack's API, licensed via the Apache Software
15
- License v2.
16
- email:
20
+
21
+ description: A Ruby client for CloudStack's API, including a simple CLI.
22
+ email:
17
23
  - chip.childers@gmail.com
18
- executables: []
24
+ executables:
25
+ - cloudstack_ruby_client
19
26
  extensions: []
27
+
20
28
  extra_rdoc_files: []
21
- files:
29
+
30
+ files:
22
31
  - .gitignore
23
32
  - Gemfile
24
33
  - LICENSE
25
34
  - NOTICE
26
35
  - README.md
27
36
  - Rakefile
37
+ - bin/cloudstack_ruby_client
28
38
  - cloudstack_ruby_client.gemspec
29
39
  - lib/cloudstack_ruby_client.rb
30
40
  - lib/cloudstack_ruby_client/api/accounts_api.rb
41
+ - lib/cloudstack_ruby_client/api/apidiscovery_api.rb
42
+ - lib/cloudstack_ruby_client/api/asyncjob_api.rb
31
43
  - lib/cloudstack_ruby_client/api/autoscale_api.rb
32
44
  - lib/cloudstack_ruby_client/api/configuration_api.rb
33
45
  - lib/cloudstack_ruby_client/api/firewall_api.rb
@@ -45,10 +57,12 @@ files:
45
57
  - lib/cloudstack_ruby_client/base_client.rb
46
58
  - lib/cloudstack_ruby_client/client.rb
47
59
  - lib/cloudstack_ruby_client/client_helper.rb
60
+ - lib/cloudstack_ruby_client/help.rb
48
61
  - lib/cloudstack_ruby_client/version.rb
49
62
  - test/config.yml
50
63
  - test/integration/client_test.rb
51
64
  - test/unit/accounts_test.rb
65
+ - test/unit/asyncjob_test.rb
52
66
  - test/unit/autoscale_test.rb
53
67
  - test/unit/configuration_test.rb
54
68
  - test/unit/firewall_test.rb
@@ -63,34 +77,41 @@ files:
63
77
  - test/unit/template_test.rb
64
78
  - test/unit/vm_test.rb
65
79
  - test/unit/volume_test.rb
80
+ has_rdoc: true
66
81
  homepage: http://chipchilders.github.io/cloudstack_ruby_client/
67
82
  licenses: []
83
+
68
84
  post_install_message:
69
85
  rdoc_options: []
70
- require_paths:
86
+
87
+ require_paths:
71
88
  - lib
72
- required_ruby_version: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
78
- required_rubygems_version: !ruby/object:Gem::Requirement
79
- none: false
80
- requirements:
81
- - - ! '>='
82
- - !ruby/object:Gem::Version
83
- version: '0'
89
+ required_ruby_version: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ segments:
94
+ - 0
95
+ version: "0"
96
+ required_rubygems_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ segments:
101
+ - 0
102
+ version: "0"
84
103
  requirements: []
104
+
85
105
  rubyforge_project:
86
- rubygems_version: 1.8.24
106
+ rubygems_version: 1.3.6
87
107
  signing_key:
88
108
  specification_version: 3
89
109
  summary: A Ruby client for CloudStack's API.
90
- test_files:
110
+ test_files:
91
111
  - test/config.yml
92
112
  - test/integration/client_test.rb
93
113
  - test/unit/accounts_test.rb
114
+ - test/unit/asyncjob_test.rb
94
115
  - test/unit/autoscale_test.rb
95
116
  - test/unit/configuration_test.rb
96
117
  - test/unit/firewall_test.rb