rimu 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/.codeclimate.yml +6 -5
- data/.gitignore +1 -0
- data/README.md +1 -0
- data/lib/rimu/orders.rb +14 -4
- data/lib/rimu/servers.rb +92 -15
- data/lib/rimu.rb +34 -18
- data/rimu.gemspec +7 -3
- metadata +35 -6
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ODY3ZWYzM2U4MTA2ZjcxMDM2MWEwYTMzYWEzZjgzOTYxZjg4Mjg2MQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NTk0MTNkMDRkYjU2NDgxODlmZmQ4YWFjOGY3N2FjYjY4MjA2ZWQwMQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZmQ3OTVlNzRiMTM2NTgwZDIyMmFmYTJhY2VhZDFiODg1NGQ0OWMwOGI4MzQ5
|
10
|
+
ODlkZWViNDFkMzRjMTdlOWNlMTQyNDk5M2MxZGRkZjlmMjliYWQ5NDI2NTgx
|
11
|
+
ZTlhZGJiNWY5Y2JiNjhmYTIxODI2MzVkYjViM2I2YTJhMzZiYmM=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MWVmNTQwZjZkM2I3YjFiMGU4OTNkMTFmOGYxYWJjMWM4ZDVlYmU4MzNjODQ3
|
14
|
+
NmExNjc1NThmNTQ2OTBiYTU1OGEwOGRkZTdmNTYwYzQwMDg0YjE1OGNjMGM3
|
15
|
+
ZGVkMzgzMjQ3MjY0MDNiYjJiOTQ0ZDIxODY4ZDdiNzkyOGQ0YTY=
|
data/.codeclimate.yml
CHANGED
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -6,6 +6,7 @@ This gem provides bindings for the [Rimuhosting](https://www.rimuhosting.com/) [
|
|
6
6
|
[![codecov.io](https://codecov.io/github/akissa/rimu/coverage.svg?branch=master)](https://codecov.io/github/akissa/rimu?branch=master)
|
7
7
|
[![Test Coverage](https://codeclimate.com/github/akissa/rimu/badges/coverage.svg)](https://codeclimate.com/github/akissa/rimu/coverage)
|
8
8
|
[![Code Climate](https://codeclimate.com/github/akissa/rimu/badges/gpa.svg)](https://codeclimate.com/github/akissa/rimu)
|
9
|
+
[![Gem Version](https://badge.fury.io/rb/rimu.svg)](https://badge.fury.io/rb/rimu)
|
9
10
|
[![MPLv2 License](https://img.shields.io/badge/license-MPLv2-blue.svg?style=flat-square)](https://www.mozilla.org/MPL/2.0/)
|
10
11
|
|
11
12
|
## Installation
|
data/lib/rimu/orders.rb
CHANGED
@@ -1,9 +1,19 @@
|
|
1
|
+
require 'cgi'
|
2
|
+
|
1
3
|
class Rimu::Orders < Rimu
|
2
|
-
def orders
|
3
|
-
|
4
|
+
def orders(params={})
|
5
|
+
raise ArgumentError, "params should be a hash" unless params.is_a?(Hash)
|
6
|
+
default_params = {
|
7
|
+
:include_inactive => 'N',
|
8
|
+
:server_type => 'VPS',
|
9
|
+
}
|
10
|
+
filters = prep_data(default_params, params)
|
11
|
+
path = "/r/orders;" + filters.collect {|k,v| "#{k}=#{CGI::escape(v.to_s)}"}.join(';')
|
12
|
+
send_request(path, "about_orders")
|
4
13
|
end
|
5
14
|
|
6
|
-
def order(oid
|
7
|
-
|
15
|
+
def order(oid)
|
16
|
+
raise ArgumentError, "oid should be an Integer" unless oid.is_a?(Integer)
|
17
|
+
send_request("/r/orders/order-#{oid}-dn", "about_order")
|
8
18
|
end
|
9
19
|
end
|
data/lib/rimu/servers.rb
CHANGED
@@ -1,45 +1,122 @@
|
|
1
1
|
class Rimu::Servers < Rimu
|
2
|
+
def default_vps_params
|
3
|
+
@default_vps_params = {
|
4
|
+
:billing_oid => nil,
|
5
|
+
:dc_location => nil,
|
6
|
+
:file_injection_data => nil,
|
7
|
+
:host_server_oid => nil,
|
8
|
+
:instantiation_options => {
|
9
|
+
:domain_name => nil,
|
10
|
+
:password => nil,
|
11
|
+
:distro => nil,
|
12
|
+
:cloud_config_data => nil,
|
13
|
+
:control_panel => nil,
|
14
|
+
},
|
15
|
+
:instantiation_via_clone_options => {
|
16
|
+
:domain_name => nil,
|
17
|
+
:vps_order_oid_to_clone => nil,
|
18
|
+
},
|
19
|
+
:ip_request => {
|
20
|
+
:extra_ip_reason => nil,
|
21
|
+
:num_ips => nil,
|
22
|
+
:requested_ips => nil,
|
23
|
+
},
|
24
|
+
:is_just_minimal_init => nil,
|
25
|
+
:meta_data => nil,
|
26
|
+
:pricing_plan_code => nil,
|
27
|
+
:user_oid => nil,
|
28
|
+
:vps_parameters => {
|
29
|
+
:disk_space_mb => nil,
|
30
|
+
:memory_mb => nil,
|
31
|
+
:disk_space_2_mb => nil,
|
32
|
+
},
|
33
|
+
:vps_type => nil,
|
34
|
+
}
|
35
|
+
end
|
36
|
+
|
2
37
|
def create(params)
|
3
|
-
|
38
|
+
raise ArgumentError, "params should be a hash" unless params.is_a?(Hash)
|
39
|
+
raise ArgumentError, "params should contain atleast instantiation_options or instantiation_via_clone_options" \
|
40
|
+
unless params.has_key?(:instantiation_options) || params.has_key?(:instantiation_via_clone_options)
|
41
|
+
data = {:new_order_request => prep_data(default_vps_params, params)}
|
42
|
+
send_request("/r/orders/new-vps", "about_order", "POST", data)
|
4
43
|
end
|
5
44
|
|
6
|
-
def
|
45
|
+
def reinstall(oid, params={})
|
46
|
+
raise ArgumentError, "oid should be an Integer" unless oid.is_a?(Integer)
|
47
|
+
raise ArgumentError, "params should be a hash" unless params.is_a?(Hash)
|
48
|
+
data = {:reinstall_request => prep_data(default_vps_params, params)}
|
49
|
+
send_request("/r/orders/order-#{oid}-dn/vps/reinstall", "running_vps_info", "PUT", data)
|
50
|
+
end
|
51
|
+
|
52
|
+
def status(oid)
|
53
|
+
raise ArgumentError, "oid should be an Integer" unless oid.is_a?(Integer)
|
7
54
|
send_request("/r/orders/order-#{oid}-dn/vps", "running_vps_info")
|
8
55
|
end
|
9
56
|
|
57
|
+
def info(oid)
|
58
|
+
raise ArgumentError, "oid should be an Integer" unless oid.is_a?(Integer)
|
59
|
+
send_request("/r/orders/order-#{oid}-dn/vps", "about_order")
|
60
|
+
end
|
61
|
+
|
10
62
|
def cancel(oid)
|
63
|
+
raise ArgumentError, "oid should be an Integer" unless oid.is_a?(Integer)
|
11
64
|
send_request("/r/orders/order-#{oid}-dn/vps", "cancel_messages", "DELETE")
|
12
65
|
end
|
13
66
|
|
14
67
|
def move(oid, params)
|
15
|
-
|
68
|
+
raise ArgumentError, "oid should be an Integer" unless oid.is_a?(Integer)
|
69
|
+
raise ArgumentError, "params should be a hash" unless params.is_a?(Hash)
|
70
|
+
default_params = {
|
71
|
+
:update_dns=>false,
|
72
|
+
:move_reason=>'',
|
73
|
+
:pricing_change_option=>'CHOOSE_BEST_OPTION',
|
74
|
+
:selected_host_server_oid=>nil
|
75
|
+
}
|
76
|
+
data = {:vps_move_request => prep_data(default_params, params)}
|
77
|
+
send_request("/r/orders/order-#{oid}-dn/vps/host-server", "about_order", "PUT", data)
|
16
78
|
end
|
17
79
|
|
18
|
-
def resize(oid)
|
19
|
-
|
80
|
+
def resize(oid, params)
|
81
|
+
raise ArgumentError, "oid should be an Integer" unless oid.is_a?(Integer)
|
82
|
+
raise ArgumentError, "params should be a hash" unless params.is_a?(Hash)
|
83
|
+
default_params = {
|
84
|
+
:disk_space_2_mb => nil,
|
85
|
+
:disk_space_mb => nil,
|
86
|
+
:memory_mb => nil,
|
87
|
+
}
|
88
|
+
data = {:vps_resize_request => prep_data(default_params, params)}
|
89
|
+
send_request("/r/orders/order-#{oid}-dn/vps/parameters", "resource_change_result", "PUT", data)
|
20
90
|
end
|
21
91
|
|
22
|
-
def
|
23
|
-
|
92
|
+
def change_state(oid, new_state)
|
93
|
+
raise ArgumentError, "oid should be an Integer" unless oid.is_a?(Integer)
|
94
|
+
params = {:running_state_change_request=>{:running_state=>new_state}}
|
95
|
+
send_request("/r/orders/order-#{oid}-dn/vps/running-state", "running_vps_info", "PUT", params)
|
24
96
|
end
|
25
97
|
|
26
|
-
def reboot(oid
|
27
|
-
|
98
|
+
def reboot(oid)
|
99
|
+
raise ArgumentError, "oid should be an Integer" unless oid.is_a?(Integer)
|
100
|
+
change_state(oid, "RESTARTING")
|
28
101
|
end
|
29
102
|
|
30
|
-
def shutdown(oid
|
31
|
-
|
103
|
+
def shutdown(oid)
|
104
|
+
raise ArgumentError, "oid should be an Integer" unless oid.is_a?(Integer)
|
105
|
+
change_state(oid, "NOTRUNNING")
|
32
106
|
end
|
33
107
|
|
34
|
-
def start(oid
|
35
|
-
|
108
|
+
def start(oid)
|
109
|
+
raise ArgumentError, "oid should be an Integer" unless oid.is_a?(Integer)
|
110
|
+
change_state(oid, "RUNNING")
|
36
111
|
end
|
37
112
|
|
38
|
-
def power_cycle(oid
|
39
|
-
|
113
|
+
def power_cycle(oid)
|
114
|
+
raise ArgumentError, "oid should be an Integer" unless oid.is_a?(Integer)
|
115
|
+
change_state(oid, "POWERCYCLING")
|
40
116
|
end
|
41
117
|
|
42
118
|
def data_transfer(oid)
|
119
|
+
raise ArgumentError, "oid should be an Integer" unless oid.is_a?(Integer)
|
43
120
|
send_request("/r/orders/order-#{oid}-dn/vps/data-transfer-usage", "data_transfer_usage_info")
|
44
121
|
end
|
45
122
|
end
|
data/lib/rimu.rb
CHANGED
@@ -28,40 +28,43 @@ class Rimu
|
|
28
28
|
'Content-Type' =>'application/json',
|
29
29
|
'Accept' =>'application/json',
|
30
30
|
'User-Agent' => 'RimuAPI-Ruby',
|
31
|
-
'Authorization' => 'rimuhosting apikey
|
31
|
+
'Authorization' => 'rimuhosting apikey=#{api_key}',
|
32
32
|
}
|
33
33
|
end
|
34
34
|
|
35
35
|
def post(path, data)
|
36
|
-
logger.info "POST #{api_url
|
37
|
-
|
38
|
-
HTTParty.post(api_url + path,
|
36
|
+
logger.info "POST #{api_url}#{path} body:#{data.inspect}" if logger
|
37
|
+
options = {headers: set_headers, body: data}
|
38
|
+
HTTParty.post(api_url + path, options).parsed_response
|
39
39
|
end
|
40
40
|
|
41
41
|
def get(path)
|
42
|
-
logger.info "GET #{api_url
|
43
|
-
|
44
|
-
HTTParty.get(api_url + path,
|
42
|
+
logger.info "GET #{api_url}#{path}" if logger
|
43
|
+
options = {headers: set_headers}
|
44
|
+
HTTParty.get(api_url + path, options).parsed_response
|
45
45
|
end
|
46
46
|
|
47
47
|
def delete(path)
|
48
|
-
logger.info "DELETE #{api_url
|
49
|
-
|
50
|
-
HTTParty.delete(api_url + path,
|
48
|
+
logger.info "DELETE #{api_url}#{path}" if logger
|
49
|
+
options = {headers: set_headers}
|
50
|
+
HTTParty.delete(api_url + path, options).parsed_response
|
51
51
|
end
|
52
52
|
|
53
53
|
def error?(response)
|
54
|
-
response and response["
|
54
|
+
response and response["jaxrs_response"] and \
|
55
|
+
response["jaxrs_response"]["response_type"] and \
|
56
|
+
response["jaxrs_response"]["response_type"] == "ERROR"
|
55
57
|
end
|
56
58
|
|
57
59
|
def error_message(response)
|
58
|
-
response["
|
59
|
-
" - Error #{err["human_readable_message"]}. "
|
60
|
-
}.join("\n")
|
60
|
+
" - Error: #{response["jaxrs_response"]["human_readable_message"]}"
|
61
61
|
end
|
62
62
|
|
63
63
|
def format_response(response, field)
|
64
|
-
result = response[
|
64
|
+
result = response[response.keys[0]]
|
65
|
+
if result.is_a?(Hash) and result.has_key?(field)
|
66
|
+
result = result[field]
|
67
|
+
end
|
65
68
|
return result.collect {|item| convert_item(item) } if result.class == Array
|
66
69
|
return result unless result.respond_to?(:keys)
|
67
70
|
convert_item(result)
|
@@ -75,7 +78,7 @@ class Rimu
|
|
75
78
|
OpenStruct.new(response)
|
76
79
|
end
|
77
80
|
|
78
|
-
def send_request(path, field, method="GET", data=
|
81
|
+
def send_request(path, field, method="GET", data=nil)
|
79
82
|
if method == "POST"
|
80
83
|
response = post(path, data)
|
81
84
|
elsif method == "PUT"
|
@@ -97,8 +100,21 @@ class Rimu
|
|
97
100
|
send_request("/r/billing-methods", "billing_methods")
|
98
101
|
end
|
99
102
|
|
100
|
-
def pricing_plans
|
101
|
-
|
103
|
+
# def pricing_plans
|
104
|
+
# send_request("/r/pricing-plans", "pricing_plan_infos")
|
105
|
+
# end
|
106
|
+
|
107
|
+
def prep_data(default_params, params)
|
108
|
+
params.keep_if {|k,_| default_params.keys.include? k }
|
109
|
+
new_params = default_params.merge(params)
|
110
|
+
new_params.each_pair do |key, val|
|
111
|
+
if val.is_a?(Hash)
|
112
|
+
val.keep_if {|_,v| v != nil }
|
113
|
+
val.keep_if {|k,_| default_params[key].keys.include? k }
|
114
|
+
end
|
115
|
+
end
|
116
|
+
new_params.keep_if {|_,v| (v.is_a?(Hash) && ! v.empty?) || (! v.is_a?(Hash) && v != nil) }
|
117
|
+
return new_params
|
102
118
|
end
|
103
119
|
|
104
120
|
def self.has_namespace(*namespaces)
|
data/rimu.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
4
|
spec.name = "rimu"
|
5
|
-
spec.version = "0.0.
|
5
|
+
spec.version = "0.0.2"
|
6
6
|
spec.authors = ["Andrew Colin Kissa"]
|
7
7
|
spec.email = ["andrew@topdog.za.net"]
|
8
8
|
spec.license = "MPL-2.0"
|
@@ -15,11 +15,15 @@ Gem::Specification.new do |spec|
|
|
15
15
|
spec.bindir = "exe"
|
16
16
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
17
17
|
spec.require_paths = ["lib"]
|
18
|
+
spec.required_ruby_version = '>= 1.9.3'
|
19
|
+
spec.extra_rdoc_files = ['README.md']
|
18
20
|
|
19
21
|
spec.add_development_dependency "bundler", "~> 1.10"
|
20
22
|
spec.add_development_dependency "rake", "~> 10.0"
|
21
|
-
spec.add_development_dependency "rspec"
|
22
|
-
spec.add_development_dependency "
|
23
|
+
spec.add_development_dependency "rspec"
|
24
|
+
spec.add_development_dependency "rspec-core"
|
25
|
+
spec.add_development_dependency "rspec-expectations"
|
26
|
+
spec.add_development_dependency "mocha", "~> 0"
|
23
27
|
spec.add_runtime_dependency "httparty", "~> 0.0"
|
24
28
|
spec.add_runtime_dependency "json", "~> 1.0"
|
25
29
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rimu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Colin Kissa
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-11-
|
11
|
+
date: 2015-11-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -42,14 +42,42 @@ dependencies:
|
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ! '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec-core
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ! '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec-expectations
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ! '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ! '>='
|
53
81
|
- !ruby/object:Gem::Version
|
54
82
|
version: '0'
|
55
83
|
- !ruby/object:Gem::Dependency
|
@@ -99,7 +127,8 @@ email:
|
|
99
127
|
- andrew@topdog.za.net
|
100
128
|
executables: []
|
101
129
|
extensions: []
|
102
|
-
extra_rdoc_files:
|
130
|
+
extra_rdoc_files:
|
131
|
+
- README.md
|
103
132
|
files:
|
104
133
|
- .codeclimate.yml
|
105
134
|
- .gitignore
|
@@ -126,7 +155,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
126
155
|
requirements:
|
127
156
|
- - ! '>='
|
128
157
|
- !ruby/object:Gem::Version
|
129
|
-
version:
|
158
|
+
version: 1.9.3
|
130
159
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
131
160
|
requirements:
|
132
161
|
- - ! '>='
|