solusvm 1.4.0 → 2.0.0.beta1
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 +4 -4
- data/Gemfile +0 -1
- data/LICENSE +1 -1
- data/README.markdown +159 -116
- data/Rakefile +3 -33
- data/bin/solusvm +3 -4
- data/lib/solusvm.rb +1 -3
- data/lib/solusvm/base.rb +101 -46
- data/lib/solusvm/cli.rb +8 -8
- data/lib/solusvm/cli/base_cli.rb +3 -3
- data/lib/solusvm/cli/client_cli.rb +3 -5
- data/lib/solusvm/cli/general_cli.rb +3 -5
- data/lib/solusvm/cli/node_cli.rb +3 -5
- data/lib/solusvm/cli/reseller_cli.rb +3 -5
- data/lib/solusvm/cli/server_cli.rb +4 -6
- data/lib/solusvm/client.rb +45 -27
- data/lib/solusvm/errors.rb +3 -0
- data/lib/solusvm/general.rb +11 -12
- data/lib/solusvm/hash.rb +1 -11
- data/lib/solusvm/node.rb +33 -21
- data/lib/solusvm/reseller.rb +53 -49
- data/lib/solusvm/server.rb +188 -52
- data/lib/solusvm/version.rb +2 -2
- data/test/cli/test_base_cli.rb +14 -4
- data/test/cli/test_client_cli.rb +13 -13
- data/test/cli/test_general_cli.rb +7 -7
- data/test/cli/test_node_cli.rb +13 -13
- data/test/cli/test_reseller_cli.rb +11 -11
- data/test/cli/test_server_cli.rb +61 -61
- data/test/sham_rack_stubs/base/parse-response.json +4 -0
- data/test/sham_rack_stubs/client/authenticate.json +4 -0
- data/test/sham_rack_stubs/client/change-password.json +6 -0
- data/test/sham_rack_stubs/client/create.json +9 -0
- data/test/sham_rack_stubs/client/delete.json +4 -0
- data/test/sham_rack_stubs/client/exists.json +4 -0
- data/test/sham_rack_stubs/client/list-empty.json +5 -0
- data/test/sham_rack_stubs/client/list.json +30 -0
- data/test/sham_rack_stubs/general/isos-empty.json +5 -0
- data/test/sham_rack_stubs/general/isos.json +5 -0
- data/test/sham_rack_stubs/general/plans-empty.json +5 -0
- data/test/sham_rack_stubs/general/plans.json +5 -0
- data/test/sham_rack_stubs/general/templates-empty.json +7 -0
- data/test/sham_rack_stubs/general/templates.json +7 -0
- data/test/sham_rack_stubs/generic/error.json +4 -0
- data/test/sham_rack_stubs/node/available-ips-empty.json +6 -0
- data/test/sham_rack_stubs/node/available-ips.json +6 -0
- data/test/sham_rack_stubs/node/ids.json +5 -0
- data/test/sham_rack_stubs/node/list-empty.json +5 -0
- data/test/sham_rack_stubs/node/list-groups.json +5 -0
- data/test/sham_rack_stubs/node/list.json +5 -0
- data/test/sham_rack_stubs/node/statistics.json +21 -0
- data/test/sham_rack_stubs/node/virtualservers-empty.json +5 -0
- data/test/sham_rack_stubs/node/virtualservers.json +19 -0
- data/test/sham_rack_stubs/node/xenresources.json +6 -0
- data/test/sham_rack_stubs/reseller/change-resources.json +18 -0
- data/test/sham_rack_stubs/reseller/create.json +25 -0
- data/test/sham_rack_stubs/reseller/delete.json +4 -0
- data/test/sham_rack_stubs/reseller/info.json +24 -0
- data/test/sham_rack_stubs/reseller/list-empty.json +5 -0
- data/test/sham_rack_stubs/reseller/list.json +5 -0
- data/test/sham_rack_stubs/server/add-ip.json +5 -0
- data/test/sham_rack_stubs/server/boot.json +4 -0
- data/test/sham_rack_stubs/server/change-bootorder.json +4 -0
- data/test/sham_rack_stubs/server/change-hostname.json +5 -0
- data/test/sham_rack_stubs/server/change-owner.json +4 -0
- data/test/sham_rack_stubs/server/change-plan.json +4 -0
- data/test/sham_rack_stubs/server/change-rootpassword.json +5 -0
- data/test/sham_rack_stubs/server/change-vncpass.json +5 -0
- data/test/sham_rack_stubs/server/console.json +13 -0
- data/test/sham_rack_stubs/server/create.json +13 -0
- data/test/sham_rack_stubs/server/del-ip.json +4 -0
- data/test/sham_rack_stubs/server/exists.json +4 -0
- data/test/sham_rack_stubs/server/info-all.json +16 -0
- data/test/sham_rack_stubs/server/info.json +15 -0
- data/test/sham_rack_stubs/server/mountiso.json +4 -0
- data/test/sham_rack_stubs/server/network-disable.json +4 -0
- data/test/sham_rack_stubs/server/network-enable.json +4 -0
- data/test/sham_rack_stubs/server/pae-disable.json +4 -0
- data/test/sham_rack_stubs/server/pae-enable.json +4 -0
- data/test/sham_rack_stubs/server/reboot.json +4 -0
- data/test/sham_rack_stubs/server/rebuild.json +4 -0
- data/test/sham_rack_stubs/server/resume.json +4 -0
- data/test/sham_rack_stubs/server/shutdown.json +4 -0
- data/test/sham_rack_stubs/server/status.json +4 -0
- data/test/sham_rack_stubs/server/suspend.json +4 -0
- data/test/sham_rack_stubs/server/terminate.json +4 -0
- data/test/sham_rack_stubs/server/tun-disable.json +4 -0
- data/test/sham_rack_stubs/server/tun-enable.json +4 -0
- data/test/sham_rack_stubs/server/unmountiso.json +4 -0
- data/test/sham_rack_stubs/server/vnc.json +8 -0
- data/test/solusvm/test_base.rb +34 -56
- data/test/solusvm/test_cli.rb +3 -3
- data/test/solusvm/test_client.rb +56 -66
- data/test/solusvm/test_general.rb +34 -19
- data/test/solusvm/test_hash.rb +0 -9
- data/test/solusvm/test_node.rb +66 -72
- data/test/solusvm/test_reseller.rb +47 -58
- data/test/solusvm/test_server.rb +149 -164
- data/test/test_helper.rb +43 -31
- metadata +173 -189
- data/.document +0 -5
- data/.gitignore +0 -25
- data/.travis.yml +0 -12
- data/solusvm.gemspec +0 -33
- data/test/vcr_cassettes/base/invalid_key.yml +0 -19
- data/test/vcr_cassettes/base/invalid_status.yml +0 -19
- data/test/vcr_cassettes/base/nonexistent_node.yml +0 -19
- data/test/vcr_cassettes/base/parse_response.yml +0 -28
- data/test/vcr_cassettes/base/statusmsg.yml +0 -28
- data/test/vcr_cassettes/base/successful.yml +0 -68
- data/test/vcr_cassettes/base/successful_instance_config.yml +0 -28
- data/test/vcr_cassettes/base/unauthorized_ip.yml +0 -19
- data/test/vcr_cassettes/client/authenticate.yml +0 -37
- data/test/vcr_cassettes/client/change_password.yml +0 -39
- data/test/vcr_cassettes/client/create.yml +0 -42
- data/test/vcr_cassettes/client/delete.yml +0 -37
- data/test/vcr_cassettes/client/exists.yml +0 -20
- data/test/vcr_cassettes/client/list.yml +0 -66
- data/test/vcr_cassettes/general/isos.yml +0 -38
- data/test/vcr_cassettes/general/plans.yml +0 -38
- data/test/vcr_cassettes/general/templates.yml +0 -38
- data/test/vcr_cassettes/node/available_ips.yml +0 -41
- data/test/vcr_cassettes/node/ids.yml +0 -21
- data/test/vcr_cassettes/node/list.yml +0 -38
- data/test/vcr_cassettes/node/list_groups.yml +0 -20
- data/test/vcr_cassettes/node/statistics.yml +0 -32
- data/test/vcr_cassettes/node/virtualservers.yml +0 -67
- data/test/vcr_cassettes/node/xenresources.yml +0 -22
- data/test/vcr_cassettes/reseller/change_resources.yml +0 -27
- data/test/vcr_cassettes/reseller/create.yml +0 -27
- data/test/vcr_cassettes/reseller/delete.yml +0 -15
- data/test/vcr_cassettes/reseller/info.yml +0 -27
- data/test/vcr_cassettes/reseller/list.yml +0 -27
- data/test/vcr_cassettes/server/.yml +0 -1017
- data/test/vcr_cassettes/server/add_ip.yml +0 -15
- data/test/vcr_cassettes/server/boot.yml +0 -15
- data/test/vcr_cassettes/server/change_bootorder.yml +0 -15
- data/test/vcr_cassettes/server/change_consolepass.yml +0 -16
- data/test/vcr_cassettes/server/change_hostname.yml +0 -15
- data/test/vcr_cassettes/server/change_owner.yml +0 -15
- data/test/vcr_cassettes/server/change_plan.yml +0 -15
- data/test/vcr_cassettes/server/change_rootpassword.yml +0 -15
- data/test/vcr_cassettes/server/change_vncpass.yml +0 -15
- data/test/vcr_cassettes/server/console.yml +0 -28
- data/test/vcr_cassettes/server/create.yml +0 -27
- data/test/vcr_cassettes/server/del_ip.yml +0 -15
- data/test/vcr_cassettes/server/exists.yml +0 -15
- data/test/vcr_cassettes/server/info.yml +0 -27
- data/test/vcr_cassettes/server/info_all.yml +0 -15
- data/test/vcr_cassettes/server/mountiso.yml +0 -15
- data/test/vcr_cassettes/server/network_disable.yml +0 -15
- data/test/vcr_cassettes/server/network_enable.yml +0 -15
- data/test/vcr_cassettes/server/pae_disable.yml +0 -15
- data/test/vcr_cassettes/server/pae_enable.yml +0 -15
- data/test/vcr_cassettes/server/reboot.yml +0 -15
- data/test/vcr_cassettes/server/rebuild.yml +0 -15
- data/test/vcr_cassettes/server/resume.yml +0 -15
- data/test/vcr_cassettes/server/shutdown.yml +0 -15
- data/test/vcr_cassettes/server/status.yml +0 -15
- data/test/vcr_cassettes/server/suspend.yml +0 -15
- data/test/vcr_cassettes/server/terminate.yml +0 -27
- data/test/vcr_cassettes/server/tun_disable.yml +0 -15
- data/test/vcr_cassettes/server/tun_enable.yml +0 -15
- data/test/vcr_cassettes/server/unmountiso.yml +0 -15
- data/test/vcr_cassettes/server/vnc.yml +0 -15
data/lib/solusvm/cli.rb
CHANGED
@@ -6,17 +6,17 @@ require 'solusvm/cli/general_cli'
|
|
6
6
|
require 'solusvm/cli/reseller_cli'
|
7
7
|
require 'solusvm/cli/client_cli'
|
8
8
|
|
9
|
-
module
|
10
|
-
class
|
11
|
-
register(
|
12
|
-
register(
|
13
|
-
register(
|
14
|
-
register(
|
15
|
-
register(
|
9
|
+
module SolusVM
|
10
|
+
class CLI < Thor
|
11
|
+
register(ServerCLI, 'server', 'server <command>', 'Server commands')
|
12
|
+
register(NodeCLI, 'node', 'node <command>', 'Node commands')
|
13
|
+
register(GeneralCLI, 'general', 'general <command>', 'General commands')
|
14
|
+
register(ResellerCLI, 'reseller', 'reseller <command>', 'Reseller commands')
|
15
|
+
register(ClientCLI, 'client', 'client <command>', 'Client commands')
|
16
16
|
|
17
17
|
desc "version", "Outputs the current program version"
|
18
18
|
def version
|
19
|
-
say
|
19
|
+
say SolusVM::VERSION
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|
data/lib/solusvm/cli/base_cli.rb
CHANGED
@@ -3,8 +3,8 @@ require 'thor'
|
|
3
3
|
require 'thor/group'
|
4
4
|
require 'solusvm/version'
|
5
5
|
|
6
|
-
module
|
7
|
-
class
|
6
|
+
module SolusVM
|
7
|
+
class BaseCLI < Thor
|
8
8
|
include Thor::Actions
|
9
9
|
|
10
10
|
class << self
|
@@ -72,7 +72,7 @@ module Solusvm
|
|
72
72
|
end
|
73
73
|
|
74
74
|
def present_or_exit(options_key, default_option_key, message)
|
75
|
-
options[options_key] ||
|
75
|
+
options[options_key] || BaseCLI.default_option(default_option_key) || (say(message) && raise(SystemExit))
|
76
76
|
end
|
77
77
|
end
|
78
78
|
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
module
|
2
|
-
class
|
1
|
+
module SolusVM
|
2
|
+
class ClientCLI < BaseCLI
|
3
3
|
|
4
4
|
desc "create", "Creates a new h"
|
5
5
|
method_option :username, type: :string, desc: "Username", aliases: ["-u", "--username"]
|
@@ -40,9 +40,7 @@ module Solusvm
|
|
40
40
|
private
|
41
41
|
|
42
42
|
def api
|
43
|
-
@client ||=
|
44
|
-
Solusvm::Client.new(api_params())
|
45
|
-
end
|
43
|
+
@client ||= SolusVM::Client.new(api_params())
|
46
44
|
end
|
47
45
|
end
|
48
46
|
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
module
|
2
|
-
class
|
1
|
+
module SolusVM
|
2
|
+
class GeneralCLI < BaseCLI
|
3
3
|
|
4
4
|
desc "templates TYPE", "Lists existing templates for a given type [openvz|xen|xen hvm|kvm]"
|
5
5
|
def templates(type)
|
@@ -19,9 +19,7 @@ module Solusvm
|
|
19
19
|
private
|
20
20
|
|
21
21
|
def api
|
22
|
-
@general ||=
|
23
|
-
Solusvm::General.new(api_params)
|
24
|
-
end
|
22
|
+
@general ||= SolusVM::General.new(api_params)
|
25
23
|
end
|
26
24
|
end
|
27
25
|
end
|
data/lib/solusvm/cli/node_cli.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
module
|
2
|
-
class
|
1
|
+
module SolusVM
|
2
|
+
class NodeCLI < BaseCLI
|
3
3
|
|
4
4
|
desc "list TYPE", "Lists existing nodes for a given type [openvz|xen|xen hvm|kvm]"
|
5
5
|
def list(type)
|
@@ -34,9 +34,7 @@ module Solusvm
|
|
34
34
|
private
|
35
35
|
|
36
36
|
def api
|
37
|
-
@node ||=
|
38
|
-
Solusvm::Node.new(api_params)
|
39
|
-
end
|
37
|
+
@node ||= SolusVM::Node.new(api_params)
|
40
38
|
end
|
41
39
|
end
|
42
40
|
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
module
|
2
|
-
class
|
1
|
+
module SolusVM
|
2
|
+
class ResellerCLI < BaseCLI
|
3
3
|
|
4
4
|
desc "create", "Creates a new reseller"
|
5
5
|
method_option :username, type: :string, desc: "Username", aliases: ["-u", "--username"]
|
@@ -64,9 +64,7 @@ module Solusvm
|
|
64
64
|
private
|
65
65
|
|
66
66
|
def api
|
67
|
-
@reseller ||=
|
68
|
-
Solusvm::Reseller.new(api_params)
|
69
|
-
end
|
67
|
+
@reseller ||= SolusVM::Reseller.new(api_params)
|
70
68
|
end
|
71
69
|
end
|
72
70
|
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
module
|
2
|
-
class
|
1
|
+
module SolusVM
|
2
|
+
class ServerCLI < BaseCLI
|
3
3
|
|
4
4
|
desc "status VSERVERID", "Checks the status of a server"
|
5
5
|
def status(vserverid)
|
@@ -135,7 +135,7 @@ module Solusvm
|
|
135
135
|
desc "create HOSTNAME PASSWORD", "Creates a new server"
|
136
136
|
method_option :plan, type: :string, desc: "Plan to use", aliases: ["-p", "--plan"]
|
137
137
|
method_option :ips, type: :string, desc: "Number of ips to add to the vps", aliases: ["-i", "--ips"]
|
138
|
-
method_option :kind, type: :string, desc: "Type of VPS (#{
|
138
|
+
method_option :kind, type: :string, desc: "Type of VPS (#{SolusVM::Server::VALID_SERVER_TYPES.join(',')})", aliases: ["-k", "--kind"]
|
139
139
|
method_option :username, type: :string, desc: "The client to put the VPS under", aliases: ["-u", "--username"]
|
140
140
|
method_option :template, type: :string, desc: "VPS template to boot from", aliases: ["-t", "--template"]
|
141
141
|
method_option :node, type: :string, desc: "Node to provision on", aliases: ["-n", "--node"]
|
@@ -149,9 +149,7 @@ module Solusvm
|
|
149
149
|
private
|
150
150
|
|
151
151
|
def api
|
152
|
-
@server ||=
|
153
|
-
Solusvm::Server.new(api_params)
|
154
|
-
end
|
152
|
+
@server ||= SolusVM::Server.new(api_params)
|
155
153
|
end
|
156
154
|
|
157
155
|
def switch(vserverid, switch_value, on_method, off_method)
|
data/lib/solusvm/client.rb
CHANGED
@@ -1,49 +1,67 @@
|
|
1
|
-
module
|
2
|
-
#
|
1
|
+
module SolusVM
|
2
|
+
# SolusVM::Client is the class for working with clients.
|
3
3
|
class Client < Base
|
4
|
-
# Creates a client.
|
4
|
+
# Public: Creates a client.
|
5
5
|
#
|
6
|
-
#
|
6
|
+
# options - A Hash of options:
|
7
|
+
# :username
|
8
|
+
# :password
|
9
|
+
# :email
|
10
|
+
# :firstname
|
11
|
+
# :lastname
|
12
|
+
# :company
|
7
13
|
#
|
8
|
-
#
|
9
|
-
#
|
10
|
-
|
11
|
-
# * <tt>:firstname</tt>
|
12
|
-
# * <tt>:lastname</tt>
|
13
|
-
# * <tt>:company</tt>
|
14
|
-
def create(options ={})
|
14
|
+
# Returns a Hash with the new client info, or false if the client was not
|
15
|
+
# created successfully.
|
16
|
+
def create(options = {})
|
15
17
|
perform_request(options.merge(action: 'client-create')) && returned_parameters
|
16
18
|
end
|
17
19
|
|
18
|
-
# Change client password for the
|
20
|
+
# Public: Change client password for the Solus admin.
|
21
|
+
#
|
22
|
+
# username - The client's username
|
23
|
+
# new_password - The new password
|
24
|
+
#
|
25
|
+
# Returns true if the client's password was successfully changed.
|
19
26
|
def change_password(username, new_password)
|
20
|
-
perform_request(
|
27
|
+
perform_request(action: "client-updatepassword", username: username, password: new_password)
|
21
28
|
end
|
22
29
|
|
23
|
-
# Checks
|
30
|
+
# Public: Checks if a specific client exists.
|
31
|
+
#
|
32
|
+
# username - The client's username
|
33
|
+
#
|
34
|
+
# Returns true if the client exists.
|
24
35
|
def exists?(username)
|
25
|
-
perform_request(
|
36
|
+
perform_request(action: 'client-checkexists', username: username)
|
37
|
+
!!statusmsg.match(/Client exists/i)
|
26
38
|
end
|
27
39
|
|
28
|
-
# Verify a
|
40
|
+
# Public: Verify a client's login.
|
41
|
+
#
|
42
|
+
# username - The client's username
|
43
|
+
# password - The client's password
|
44
|
+
#
|
45
|
+
# Returns true if the given credentials are correct.
|
29
46
|
def authenticate(username, password)
|
30
|
-
perform_request(
|
47
|
+
perform_request(action: 'client-authenticate', username: username, password: password)
|
31
48
|
end
|
32
49
|
|
33
|
-
# Deletes an existing client.
|
50
|
+
# Public: Deletes an existing client.
|
51
|
+
#
|
52
|
+
# username - The client's username
|
53
|
+
#
|
54
|
+
# Returns true if the client was successfully deleted.
|
34
55
|
def delete(username)
|
35
|
-
perform_request(
|
56
|
+
perform_request(action: "client-delete", username: username)
|
36
57
|
end
|
37
58
|
|
38
|
-
# Lists existing clients.
|
59
|
+
# Public: Lists existing clients.
|
60
|
+
#
|
61
|
+
# Returns an Array if clients were found, otherwise nil.
|
39
62
|
def list
|
40
|
-
perform_request(
|
41
|
-
|
42
|
-
if returned_parameters["clients"] && returned_parameters["clients"]["client"]
|
43
|
-
returned_parameters["clients"]["client"]
|
44
|
-
elsif returned_parameters["clients"]
|
45
|
-
[]
|
46
|
-
end
|
63
|
+
perform_request(action: "client-list")
|
64
|
+
returned_parameters["clients"]
|
47
65
|
end
|
48
66
|
end
|
49
67
|
end
|
data/lib/solusvm/general.rb
CHANGED
@@ -1,12 +1,11 @@
|
|
1
|
-
module
|
2
|
-
#
|
1
|
+
module SolusVM
|
2
|
+
# SolusVM::General is the class for retrieving general information.
|
3
3
|
class General < Base
|
4
|
-
|
5
|
-
# Lists available templates.
|
4
|
+
# Public: Lists available templates.
|
6
5
|
#
|
7
|
-
#
|
6
|
+
# type - a valid virtualization type; e.g: [openvz|xen|xen hvm|kvm]
|
8
7
|
#
|
9
|
-
#
|
8
|
+
# Returns an Array.
|
10
9
|
def templates(type)
|
11
10
|
validate_server_type(type) do
|
12
11
|
perform_request(action: 'listtemplates', type: type)
|
@@ -14,11 +13,11 @@ module Solusvm
|
|
14
13
|
end
|
15
14
|
end
|
16
15
|
|
17
|
-
# Lists available plans.
|
16
|
+
# Public: Lists available plans.
|
18
17
|
#
|
19
|
-
#
|
18
|
+
# type - a valid virtualization type; e.g: [openvz|xen|xen hvm|kvm]
|
20
19
|
#
|
21
|
-
#
|
20
|
+
# Returns an Array.
|
22
21
|
def plans(type)
|
23
22
|
validate_server_type(type) do
|
24
23
|
perform_request(action: 'listplans', type: type)
|
@@ -26,11 +25,11 @@ module Solusvm
|
|
26
25
|
end
|
27
26
|
end
|
28
27
|
|
29
|
-
# Lists available
|
28
|
+
# Public: Lists available ISOS.
|
30
29
|
#
|
31
|
-
#
|
30
|
+
# type - a valid virtualization type; e.g: [openvz|xen|xen hvm|kvm]
|
32
31
|
#
|
33
|
-
#
|
32
|
+
# Returns an Array.
|
34
33
|
def isos(type)
|
35
34
|
validate_server_type(type) do
|
36
35
|
perform_request(action: 'listiso', type: type)
|
data/lib/solusvm/hash.rb
CHANGED
@@ -1,14 +1,4 @@
|
|
1
1
|
class Hash
|
2
|
-
unless method_defined?(:to_query)
|
3
|
-
def to_query
|
4
|
-
elements = []
|
5
|
-
self.each do |key, value|
|
6
|
-
elements << "#{CGI::escape(key.to_s)}=#{CGI::escape(value.to_s)}"
|
7
|
-
end
|
8
|
-
elements.join('&')
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
2
|
unless method_defined?(:reverse_merge)
|
13
3
|
def reverse_merge(other_hash)
|
14
4
|
other_hash.merge(self)
|
@@ -20,4 +10,4 @@ class Hash
|
|
20
10
|
replace(reverse_merge(other_hash))
|
21
11
|
end
|
22
12
|
end
|
23
|
-
end
|
13
|
+
end
|
data/lib/solusvm/node.rb
CHANGED
@@ -1,12 +1,11 @@
|
|
1
|
-
module
|
2
|
-
#
|
1
|
+
module SolusVM
|
2
|
+
# SolusVM::Node is the class for working with nodes.
|
3
3
|
class Node < Base
|
4
|
-
|
5
|
-
# Lists existing nodes of a given type.
|
4
|
+
# Public: Lists existing nodes of a given type.
|
6
5
|
#
|
7
|
-
#
|
6
|
+
# type - a valid virtualization type; e.g: [openvz|xen|xen hvm|kvm]
|
8
7
|
#
|
9
|
-
#
|
8
|
+
# Returns an Array.
|
10
9
|
def list(type)
|
11
10
|
validate_server_type(type) do
|
12
11
|
perform_request(action: 'listnodes', type: type)
|
@@ -14,7 +13,9 @@ module Solusvm
|
|
14
13
|
end
|
15
14
|
end
|
16
15
|
|
17
|
-
# Lists existing node groups
|
16
|
+
# Public: Lists existing node groups
|
17
|
+
#
|
18
|
+
# Returns an Array.
|
18
19
|
def list_groups
|
19
20
|
perform_request(action: 'listnodegroups')
|
20
21
|
|
@@ -22,11 +23,11 @@ module Solusvm
|
|
22
23
|
returned_parameters['nodegroups'].to_s.split(',').map {|group| group.split('|')[1]}
|
23
24
|
end
|
24
25
|
|
25
|
-
# Lists existing nodes ids of a given type.
|
26
|
+
# Public: Lists existing nodes ids of a given type.
|
26
27
|
#
|
27
|
-
#
|
28
|
+
# type - a valid virtualization type; e.g: [openvz|xen|xen hvm|kvm]
|
28
29
|
#
|
29
|
-
#
|
30
|
+
# Returns an Array.
|
30
31
|
def ids(type)
|
31
32
|
validate_server_type(type) do
|
32
33
|
perform_request(action: 'node-idlist', type: type)
|
@@ -34,19 +35,31 @@ module Solusvm
|
|
34
35
|
end
|
35
36
|
end
|
36
37
|
|
37
|
-
# Retrieves statistics from a specific node.
|
38
|
+
# Public: Retrieves statistics from a specific node.
|
39
|
+
#
|
40
|
+
# nodeid - The node ID
|
41
|
+
#
|
42
|
+
# Returns a Hash.
|
38
43
|
def statistics(nodeid)
|
39
44
|
perform_request(action: 'node-statistics', nodeid: nodeid)
|
40
45
|
returned_parameters
|
41
46
|
end
|
42
47
|
|
43
48
|
# Retrieves available xen resources from a specific node.
|
49
|
+
#
|
50
|
+
# nodeid - The node ID
|
51
|
+
#
|
52
|
+
# Returns a Hash.
|
44
53
|
def xenresources(nodeid)
|
45
54
|
perform_request(action: 'node-xenresources', nodeid: nodeid)
|
46
55
|
returned_parameters
|
47
56
|
end
|
48
57
|
|
49
|
-
# Retrieves a list of available IPs for a specific node.
|
58
|
+
# Public: Retrieves a list of available IPs for a specific node.
|
59
|
+
#
|
60
|
+
# nodeid - The node ID
|
61
|
+
#
|
62
|
+
# Returns an Array.
|
50
63
|
def available_ips(nodeid)
|
51
64
|
perform_request(action: 'node-iplist', nodeid: nodeid)
|
52
65
|
if statusmsg.match /no available ip/i
|
@@ -56,15 +69,14 @@ module Solusvm
|
|
56
69
|
end
|
57
70
|
end
|
58
71
|
|
59
|
-
# Lists virtual servers from a specific node.
|
72
|
+
# Public: Lists virtual servers from a specific node.
|
73
|
+
#
|
74
|
+
# nodeid - The node ID
|
75
|
+
#
|
76
|
+
# Returns an Array if virtual servers were found, otherwise nil.
|
60
77
|
def virtualservers(nodeid)
|
61
|
-
perform_request(
|
62
|
-
|
63
|
-
if returned_parameters["virtualservers"] && returned_parameters["virtualservers"]["virtualserver"]
|
64
|
-
returned_parameters["virtualservers"]["virtualserver"]
|
65
|
-
elsif returned_parameters["virtualservers"]
|
66
|
-
[]
|
67
|
-
end
|
78
|
+
perform_request(action: "node-virtualservers", nodeid: nodeid)
|
79
|
+
returned_parameters["virtualservers"]
|
68
80
|
end
|
69
81
|
end
|
70
|
-
end
|
82
|
+
end
|
data/lib/solusvm/reseller.rb
CHANGED
@@ -1,72 +1,76 @@
|
|
1
|
-
module
|
1
|
+
module SolusVM
|
2
|
+
# SolusVM::Server is the class for working with reseller accounts.
|
2
3
|
class Reseller < Base
|
3
|
-
|
4
|
-
# Creates a reseller.
|
4
|
+
# Public: Creates a reseller.
|
5
5
|
#
|
6
|
-
#
|
6
|
+
# options - A Hash of options:
|
7
|
+
# :username
|
8
|
+
# :password
|
9
|
+
# :email
|
10
|
+
# :firstname
|
11
|
+
# :lastname
|
12
|
+
# :company - (optional)
|
13
|
+
# :usernameprefix - prefix for reseller client usernames (optional)
|
14
|
+
# :maxvps - maximum amount of virtual servers (optional)
|
15
|
+
# :maxusers - maximum amount of users (optional)
|
16
|
+
# :maxmem - maximum amount memory (optional)
|
17
|
+
# :maxburst - maximum amount of burst memory or swapspace
|
18
|
+
# (optional)
|
19
|
+
# :maxdisk - maximum amount of diskspace (optional)
|
20
|
+
# :maxbw - maximum amount of bandwidth (optional)
|
21
|
+
# :maxipv4 - maximum amount of ipv4 addresses (optional)
|
22
|
+
# :maxipv6 - maximum amount of ipv6 addresses (optional)
|
23
|
+
# :nodegroups - comma separated list of node groups (optional)
|
24
|
+
# :mediagroups - comma separated list of media groups
|
25
|
+
# (optional)
|
26
|
+
# :openvz - y|n Allow building of openvz virtual servers
|
27
|
+
# (optional)
|
28
|
+
# :xenpv - y|n Allow building of xen pv virtual servers
|
29
|
+
# (optional)
|
30
|
+
# :xenhvm - y|n Allow building of xen hvm virtual servers
|
31
|
+
# (optional)
|
32
|
+
# :kvm - y|n Allow building of kvmvirtual servers
|
33
|
+
# (optional)
|
7
34
|
#
|
8
|
-
#
|
9
|
-
#
|
10
|
-
|
11
|
-
# * <tt>:firstname</tt>
|
12
|
-
# * <tt>:lastname</tt>
|
13
|
-
# * <tt>:company</tt> - (optional)
|
14
|
-
# * <tt>:usernameprefix</tt> - prefix for reseller client usernames (optional)
|
15
|
-
# * <tt>:maxvps</tt> - maximum amount of virtual servers (optional)
|
16
|
-
# * <tt>:maxusers</tt> - maximum amount of users (optional)
|
17
|
-
# * <tt>:maxmem</tt> - maximum amount memory - (optional)
|
18
|
-
# * <tt>:maxburst</tt> - maximum amount of burst memory or swapspace (optional)
|
19
|
-
# * <tt>:maxdisk</tt> - maximum amount of diskspace (optional)
|
20
|
-
# * <tt>:maxbw</tt> - maximum amount of bandwidth (optional)
|
21
|
-
# * <tt>:maxipv4</tt> - maximum amount of ipv4 addresses (optional)
|
22
|
-
# * <tt>:maxipv6</tt> - maximum amount of ipv6 addresses (optional)
|
23
|
-
# * <tt>:nodegroups</tt> - comma seperated list of node groups (optional)
|
24
|
-
# * <tt>:mediagroups</tt> - comma seperated list of media groups (optional)
|
25
|
-
# * <tt>:openvz</tt> - y|n Allow building of openvz virtual servers (optional)
|
26
|
-
# * <tt>:xenpv</tt> - y|n Allow building of xen pv virtual servers (optional)
|
27
|
-
# * <tt>:xenhvm</tt> - y|n Allow building of xen hvm virtual servers (optional)
|
28
|
-
# * <tt>:kvm</tt> - y|n Allow building of kvmvirtual servers (optional)
|
29
|
-
def create(options ={})
|
35
|
+
# Returns a Hash with the new client info, or false if the client was not
|
36
|
+
# created successfully.
|
37
|
+
def create(options = {})
|
30
38
|
perform_request(options.merge(action: 'reseller-create')) && returned_parameters
|
31
39
|
end
|
32
40
|
|
33
41
|
# Changes the available resources for a specific reseller.
|
34
42
|
#
|
35
|
-
#
|
43
|
+
# options - A Hash of options, see `#create` for details
|
36
44
|
#
|
37
|
-
#
|
38
|
-
#
|
39
|
-
|
40
|
-
# * <tt>:maxburst</tt> - maximum amount of burst memory or swapspace (optional)
|
41
|
-
# * <tt>:maxdisk</tt> - maximum amount of diskspace (optional)
|
42
|
-
# * <tt>:maxbw</tt> - maximum amount of bandwidth (optional)
|
43
|
-
# * <tt>:maxipv4</tt> - maximum amount of ipv4 addresses (optional)
|
44
|
-
# * <tt>:maxipv6</tt> - maximum amount of ipv6 addresses (optional)
|
45
|
-
# * <tt>:nodegroups</tt> - comma seperated list of node groups (optional)
|
46
|
-
# * <tt>:mediagroups</tt> - comma seperated list of media groups (optional)
|
47
|
-
# * <tt>:openvz</tt> - y|n Allow building of openvz virtual servers (optional)
|
48
|
-
# * <tt>:xenpv</tt> - y|n Allow building of xen pv virtual servers (optional)
|
49
|
-
# * <tt>:xenhvm</tt> - y|n Allow building of xen hvm virtual servers (optional)
|
50
|
-
# * <tt>:kvm</tt> - y|n Allow building of kvmvirtual servers (optional)
|
51
|
-
def change_resources(username, options={})
|
45
|
+
# Returns a Hash with the new reseller info, or false if the reseller was
|
46
|
+
# not created successfully.
|
47
|
+
def change_resources(username, options = {})
|
52
48
|
perform_request(options.merge(action: 'reseller-modifyresources', username: username)) && returned_parameters
|
53
49
|
end
|
54
50
|
|
55
|
-
# Retrieves information from an existing reseller.
|
51
|
+
# Public: Retrieves information from an existing reseller.
|
52
|
+
#
|
53
|
+
# username - The reseller's username
|
54
|
+
#
|
55
|
+
# Returns a Hash with the reseller info, or false if the reseller was not
|
56
|
+
# found.
|
56
57
|
def info(username)
|
57
|
-
perform_request(
|
58
|
+
perform_request(action: 'reseller-info', username: username) && returned_parameters
|
58
59
|
end
|
59
60
|
|
60
|
-
# Deletes an existing reseller.
|
61
|
+
# Public: Deletes an existing reseller.
|
62
|
+
#
|
63
|
+
# Returns true if the reseller was deleted.
|
61
64
|
def delete(username)
|
62
|
-
perform_request(
|
65
|
+
perform_request(action: 'reseller-delete', username: username)
|
63
66
|
end
|
64
67
|
|
65
|
-
# Lists existing resellers.
|
68
|
+
# Public: Lists existing resellers.
|
69
|
+
#
|
70
|
+
# Returns an Array.
|
66
71
|
def list
|
67
72
|
perform_request(action: 'reseller-list')
|
68
73
|
parse_returned_params_as_list('usernames')
|
69
74
|
end
|
70
|
-
|
71
75
|
end
|
72
|
-
end
|
76
|
+
end
|