cloudstack_ruby_client 0.2.3 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MzRhODczOTFkNDY2NDFlMTM1MThjMjc5ZjIwODc0YmRlMGYxZGNiNQ==
4
+ OGM0YWRiMDk2YWMyNmU5MTZmNDgyMjE1ZWU4Yzg3ZWY1Njk5MjA4Mg==
5
5
  data.tar.gz: !binary |-
6
- NGQwNjE5NmM1NDI4MmE5NTBmOGUyYjYwZTZhMGYyNDI1ODI1YmM5Mg==
6
+ OWY4ODEzYjlkNTFjNmFlYWIyM2UwMDQyN2ViY2JkMGY4ZmQwYjZlZQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- MjIxNDg5NWEzNDgzNTZhZDFiYTlhOGE2Yjg2ZTY0YWU0NTJkOTBhMGIxMDEz
10
- NzljODIwNzk0YTljZGQzYTM5NWZkYTVlZGJlOWI1OTk0N2U4ZWZmMzExMjkw
11
- MzU5MzI5NWQyODAzOTM2ODFkZjg5ODRmNjk3MjJiYTFjM2NiMzk=
9
+ OWY5OWNmZWEwYmQ2MTFkNzI3MGZjYWU0MzBmMzIxNjM1ZDI5NWZiN2YwYWE2
10
+ YmM5NDk1ZDBlYzIwMGRiODBmMmE4NDM1MmFiMTE0YTU2OGEwMjY0ZmViMTBh
11
+ NmFhMzhhMmZiODFlZmJmZWM1MWQ0NDY3YjMxYWVlM2ZhY2Q5ODY=
12
12
  data.tar.gz: !binary |-
13
- NzhjMGNjMzY4NWRiODFlODhmYzAzODcyYmUzYWQ1ODg5ZGE3Yzg0MDRiZWJh
14
- ODMxYTFjMGZmNzk1MGM0NDY0NmIxOTBlNTY4YTY1Mzc1OWFkZDQwODMyMmNl
15
- YTgwZTc0ZjU5Mzg0N2MyMmRlYzhmZjllZDA0N2FiMWIxMzFhNDk=
13
+ NmFhNDQ2MmE1NDQxZmNiZTkyNTNiMjI3OTVlODY2YWU2NWQ5YzM5YWM3MzE3
14
+ YTY2OTdhM2E1ZDA3NWVlMmNmOTNkMWNhZmI0MDJlOGI0ZTg2YzkxMzhhNjUz
15
+ NGMxMjU2YWE2MjRjMTA1ZWI4MTk2YTFiOGY1ODA0YmIyYjZmOTU=
@@ -0,0 +1,11 @@
1
+ module CloudstackRubyClient
2
+ module Api
3
+ module AffinityGroup
4
+ cmd_processor :list_affinity_groups,
5
+ :list_affinity_group_types,
6
+ :create_affinity_group,
7
+ :delete_affinity_group,
8
+ :update_vm_affinity_group
9
+ end
10
+ end
11
+ end
@@ -20,8 +20,8 @@ class CloudstackRubyClient::BaseClient
20
20
  url = "#{@api_url}?#{data}&signature=#{signature}"
21
21
  uri = URI.parse(url)
22
22
  http = Net::HTTP.new(uri.host, uri.port)
23
- # http.use_ssl = @use_ssl
24
- # http.verify_mode = OpenSSL::SSL::VERIFY_NONE
23
+ http.use_ssl = @use_ssl
24
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
25
25
  request = Net::HTTP::Get.new(uri.request_uri)
26
26
 
27
27
  http.request(request)
@@ -1,3 +1,5 @@
1
+ require 'timeout'
2
+
1
3
  class CloudstackRubyClient::RequestError < RuntimeError
2
4
  attr_reader :response, :json
3
5
 
@@ -34,6 +36,33 @@ class CloudstackRubyClient::Client < CloudstackRubyClient::BaseClient
34
36
  def logout(params = {})
35
37
  auth_request(params, "logout")
36
38
  end
39
+
40
+ def wait_for_async_job(job, timeout=nil)
41
+ wait_time = 1
42
+ slept_time = 0
43
+ if job.has_key? 'jobid' then
44
+ job_id = job['jobid']
45
+ else
46
+ job_id = job
47
+ end
48
+
49
+ return Timeout::timeout(timeout) do
50
+ while true do
51
+ job_stat = self.query_async_job_result(:jobid => job_id)
52
+ if job_stat[:jobprocstatus] == 0 then #pending
53
+ sleep wait_time
54
+ slept_time += wait_time
55
+ if slept_time >= 30 then
56
+ wait_time = 5
57
+ elsif slept_time >= 10 then
58
+ wait_time = 2
59
+ end
60
+ else
61
+ return job_stat
62
+ end
63
+ end
64
+ end
65
+ end
37
66
 
38
67
  protected
39
68
 
@@ -66,4 +95,5 @@ class CloudstackRubyClient::Client < CloudstackRubyClient::BaseClient
66
95
 
67
96
  json[resp_title]
68
97
  end
98
+
69
99
  end
@@ -1,7 +1,36 @@
1
1
  class Module
2
2
 
3
3
  MALFORMED_CMDS = {
4
- /getvmpassword/i => 'getVMPassword'
4
+ "getvmpassword" => 'getVMPassword',
5
+ "updatevmaffinitygroup" => "updateVMAffinityGroup",
6
+ "listneworkacls" => "listNetworkACLs",
7
+ "createneworkacl" => "createNetworkACL",
8
+ "deleteneworkacl" => "deleteNetworkACL",
9
+ "updateeneworkaclitem" => "updateNetworkACLItem",
10
+ "createnetworkacllist" => "createNetworkACLList",
11
+ "deleteNetworkacllist" => "deleteNetworkACLList",
12
+ "replacenetworkacllist" => "replaceNetworkACLList",
13
+ "listnetworkacllists" => "listNetworkACLLists",
14
+ "setsshkeyforvirtualmachine" => "setSSHKeyForVirtualMachine",
15
+ "registersshkeypair" => "registerSSHKeyPair",
16
+ "createsshkeypair" => "createSSHKeyPair",
17
+ "deletesshkeypair" => "deleteSSHKeyPair",
18
+ "listsshkeypairs" => "listSSHKeyPairs",
19
+ "createlbstickinesspolicy" => "createLBStickinessPolicy",
20
+ "deletelbstickinesspolicy" => "deleteLBStickinessPolicy",
21
+ "deletelbstickinesspolicy" => "deleteLBStickinessPolicy",
22
+ "listlbstickinesspolicies" => "listLBStickinessPolicies",
23
+ "listlbhealthcheckpolicies" => "listLBHealthCheckPolicies",
24
+ "createlbhealthcheckpolicy" => "createLBHealthCheckPolicy",
25
+ "deletelbhealthcheckpolicy" => "deleteLBHealthCheckPolicy",
26
+ "createvpc" => "createVPC",
27
+ "listvpcsdeletevpc" => "listVPCsdeleteVPC",
28
+ "updatevpc" => "updateVPC",
29
+ "restartvpc" => "restartVPC",
30
+ "createvpcoffering" => "createVPCOffering",
31
+ "updatevpcoffering" => "updateVPCOffering",
32
+ "deletevpcoffering" => "deleteVPCOffering",
33
+ "listvpcofferings" => "listVPCOfferings"
5
34
  }
6
35
 
7
36
  #
@@ -27,7 +56,8 @@ class Module
27
56
  /copyiso/i => 'copytemplateresponse',
28
57
  /deleteiso/i => 'deleteisosresponse',
29
58
  /listisopermissions/i => 'listtemplatepermissionsresponse',
30
- /addiptonic/i => 'addiptovmnicresponse'
59
+ /addiptonic/i => 'addiptovmnicresponse',
60
+ /updatevmaffinitygroup/i => 'updatevirtualmachineresponse'
31
61
  }
32
62
 
33
63
  def cmd_processor(*args)
@@ -36,61 +66,44 @@ class Module
36
66
  meta_method = %Q{
37
67
  def #{arg}(args={});
38
68
 
39
- command = "#{
69
+ command = MALFORMED_CMDS.has_key?('#{arga.join('')}') ? MALFORMED_CMDS['#{arga.join('')}'] : "#{
40
70
  arga.each_with_index.map {|x, i|
41
71
  i==0 ? x : x.capitalize
42
72
  }.join('')
43
- }"
73
+ }";
44
74
 
45
- resp_title = "#{arga.join('')}response"
75
+ resp_title = "#{arga.join('')}response";
46
76
  } +
47
77
 
48
78
  #
49
- # The following code block is dealing with malformed api commands
79
+ # The following code block is dealing with malformed response
50
80
  #
51
81
 
52
82
  %Q{
53
- MALFORMED_RESPONSES.each do |k, v|
54
- if k =~ command
55
- resp_title = v
56
- end
57
- end
58
-
59
- MALFORMED_CMDS.each do |k, v|
60
- if k =~ command
61
- command = v
62
- end
63
- end
64
83
 
65
- if /(list|create|delete)networkacl.*/i =~ command
66
- command.gsub!(/acl/i, 'ACL')
67
- end
68
-
69
- if /.*(ssh).*/i =~ command
70
- command.gsub!(/ssh/i, 'SSH')
71
- end
84
+ MALFORMED_RESPONSES.each do |k, v|;
85
+ if k =~ command;
86
+ resp_title = v;
87
+ end;
88
+ end;
72
89
 
73
- if /(list|create|delete)lbstickinesspolic.*/i =~ command
74
- command.gsub!(/lb/i, 'LB')
75
- end
76
-
77
- if /.*vpc.*/i =~ command
78
- command.gsub!(/vpc/i, 'VPC')
79
- end
80
90
  } +
91
+
81
92
  %Q{
82
- params = {'command' => command}
83
- params.merge!(args) unless args.empty?
93
+ params = {'command' => command};
94
+ params.merge!(args) unless args.empty?;
84
95
 
85
- response = request(params)
86
- json = JSON.parse(response.body)
96
+ response = request(params);
97
+ json = JSON.parse(response.body);
87
98
 
88
99
  if !response.is_a?(Net::HTTPOK)
89
- if ["431","530"].include?(response.code) and ["9999","4350"].include?(json[resp_title]['cserrorcode'])
90
- raise ArgumentError, json[resp_title]['errortext']
91
- end
100
+ if ["431","530"].include?(response.code) and
101
+ ["9999","4350"].include?(json[resp_title]['cserrorcode'].to_s);
102
+
103
+ raise ArgumentError, json[resp_title]['errortext'];
104
+ end;
92
105
 
93
- raise RuntimeError, json['errorresponse']['errortext'] if response.code == "432"
106
+ raise RuntimeError, json['errorresponse']['errortext'] if response.code.to_s == "432"
94
107
 
95
108
  raise CloudstackRubyClient::RequestError.new(response, json)
96
109
  end
@@ -1,3 +1,3 @@
1
1
  module CloudstackRubyClient
2
- VERSION = "0.2.3"
2
+ VERSION = "1.0.0"
3
3
  end
data/test/config.yml CHANGED
@@ -1,7 +1,6 @@
1
1
  cloudstack:
2
- host: '10.1.192.92'
3
- # host: 'localhost'
2
+ host: '10.1.192.54'
4
3
  port: '8080'
5
4
  admin_port: '8096'
6
- api_key: 'd460dbswlC6ApcirESZJOh-JDCFxCtwtmoRd_FHC9QYwHNkeHi1BjdDrvnfQQ0vwDOC9t4yPF46o5Kfpn5eFVg'
7
- secret_key: 'sZchCmafeZU4ZKM2HkX5DzcoWFWAYp3eGIpYFdgsCoYtZiTIuXIgv48Ja5vD1sdkf_gFFbh534hepPayEfcfNQ'
5
+ api_key: 'j88bUHw6zqG9Ch1RygIsqrwb4vs3PTBM3g-H7mxuY-Lk51cMHxM2c8PyaQELYbvnLqJg1uDeWABKPiPLAgG03g'
6
+ secret_key: 'TdMoVDOHsWofNjpmh4BacktKbRPn8CnjtG6cQLJ6B2ACD1-NXL6fK__yg2d2IAHwm___ogwc7nY2fbr-55fVDQ'
@@ -0,0 +1,46 @@
1
+ require 'test/unit'
2
+ require 'yaml'
3
+ require_relative '../../lib/cloudstack_ruby_client'
4
+
5
+ class AffinityGroupTest < Test::Unit::TestCase
6
+ def setup
7
+ config = YAML.load_file("test/config.yml")
8
+ _host = config['cloudstack']['host']
9
+ _port = config['cloudstack']['port']
10
+ _admin_port = config['cloudstack']['admin_port']
11
+ _api_key = config['cloudstack']['api_key']
12
+ _secret_key = config['cloudstack']['secret_key']
13
+ @client = CloudstackRubyClient::Client.new\
14
+ "http://#{_host}:#{_port}/client/api",
15
+ "#{_api_key}",
16
+ "#{_secret_key}"
17
+ end
18
+
19
+ def teardown
20
+ # Do nothing here!
21
+ end
22
+
23
+ def test_list_affinity_groups
24
+ @client.list_affinity_groups
25
+ end
26
+
27
+ def test_list_affinity_group_types
28
+ @client.list_affinity_group_types
29
+ end
30
+
31
+ def test_create_affinity_group
32
+ assert_raise(ArgumentError) do
33
+ @client.create_affinity_group
34
+ end
35
+ end
36
+
37
+ def test_update_vm_affinity_group
38
+ assert_raise(ArgumentError) do
39
+ @client.update_vm_affinity_group
40
+ end
41
+ end
42
+
43
+ def test_delete_affinity_group
44
+ @client.delete_affinity_group
45
+ end
46
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloudstack_ruby_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chip Childers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-13 00:00:00.000000000 Z
11
+ date: 2014-02-11 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A Ruby client for CloudStack's API, including a simple CLI.
14
14
  email:
@@ -29,6 +29,7 @@ files:
29
29
  - lib/cloudstack_ruby_client.rb
30
30
  - lib/cloudstack_ruby_client/api/accounts_api.rb
31
31
  - lib/cloudstack_ruby_client/api/address_api.rb
32
+ - lib/cloudstack_ruby_client/api/affinity_api.rb
32
33
  - lib/cloudstack_ruby_client/api/alert_api.rb
33
34
  - lib/cloudstack_ruby_client/api/apidiscovery_api.rb
34
35
  - lib/cloudstack_ruby_client/api/asyncjob_api.rb
@@ -67,6 +68,7 @@ files:
67
68
  - test/config.yml
68
69
  - test/integration/client_test.rb
69
70
  - test/unit/accounts_test.rb
71
+ - test/unit/affinitygroup_test.rb
70
72
  - test/unit/asyncjob_test.rb
71
73
  - test/unit/autoscale_test.rb
72
74
  - test/unit/configuration_test.rb
@@ -101,7 +103,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
101
103
  version: '0'
102
104
  requirements: []
103
105
  rubyforge_project:
104
- rubygems_version: 2.1.9
106
+ rubygems_version: 2.2.2
105
107
  signing_key:
106
108
  specification_version: 4
107
109
  summary: A Ruby client for CloudStack's API.
@@ -109,6 +111,7 @@ test_files:
109
111
  - test/config.yml
110
112
  - test/integration/client_test.rb
111
113
  - test/unit/accounts_test.rb
114
+ - test/unit/affinitygroup_test.rb
112
115
  - test/unit/asyncjob_test.rb
113
116
  - test/unit/autoscale_test.rb
114
117
  - test/unit/configuration_test.rb