cloudstack_ruby_client 0.2.3 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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