solusvm 0.10.1 → 1.0.0.beta
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +75 -25
- data/bin/solusvm +3 -153
- data/lib/solusvm/base.rb +17 -10
- data/lib/solusvm/cli/base_cli.rb +47 -0
- data/lib/solusvm/cli/client_cli.rb +49 -0
- data/lib/solusvm/cli/general_cli.rb +28 -0
- data/lib/solusvm/cli/node_cli.rb +43 -0
- data/lib/solusvm/cli/reseller_cli.rb +73 -0
- data/lib/solusvm/cli/server_cli.rb +168 -0
- data/lib/solusvm/cli.rb +22 -0
- data/lib/solusvm/client.rb +26 -12
- data/lib/solusvm/general.rb +25 -17
- data/lib/solusvm/node.rb +60 -0
- data/lib/solusvm/reseller.rb +72 -0
- data/lib/solusvm/server.rb +116 -2
- data/lib/solusvm/version.rb +1 -1
- data/lib/solusvm.rb +8 -8
- data/solusvm.gemspec +3 -0
- data/test/cli/test_client_cli.rb +80 -0
- data/test/cli/test_general_cli.rb +35 -0
- data/test/cli/test_node_cli.rb +64 -0
- data/test/cli/test_reseller_cli.rb +139 -0
- data/test/cli/test_server_cli.rb +267 -0
- data/test/fixtures/client_delete_success.txt +2 -0
- data/test/fixtures/client_list_success.txt +14 -0
- data/test/fixtures/client_list_success_empty.txt +2 -0
- data/test/fixtures/general_isos_success.txt +3 -0
- data/test/fixtures/general_node_virtualservers_success.txt +15 -0
- data/test/fixtures/general_node_virtualservers_success_empty.txt +2 -0
- data/test/fixtures/general_node_xenresources_success.txt +4 -0
- data/test/fixtures/general_nodes_ids_success.txt +3 -0
- data/test/fixtures/general_plans_success.txt +3 -0
- data/test/fixtures/reseller_change_resources_success.txt +16 -0
- data/test/fixtures/reseller_create_success.txt +23 -0
- data/test/fixtures/reseller_delete_success.txt +2 -0
- data/test/fixtures/reseller_info_success.txt +23 -0
- data/test/fixtures/reseller_list_success.txt +3 -0
- data/test/fixtures/server_bootorder_success.txt +2 -0
- data/test/fixtures/server_change_consolepass_success.txt +3 -0
- data/test/fixtures/server_change_owner_success.txt +2 -0
- data/test/fixtures/server_change_vncpass_success.txt +3 -0
- data/test/fixtures/server_console_success.txt +7 -0
- data/test/fixtures/server_hostname_success.txt +3 -0
- data/test/fixtures/server_mountiso_success.txt +2 -0
- data/test/fixtures/server_network_disable_success.txt +2 -0
- data/test/fixtures/server_network_enable_success.txt +2 -0
- data/test/fixtures/server_pae_success.txt +2 -0
- data/test/fixtures/server_rootpassword_success.txt +3 -0
- data/test/fixtures/server_status_success.txt +2 -0
- data/test/fixtures/server_tun_disable_success.txt +2 -0
- data/test/fixtures/server_tun_enable_success.txt +2 -0
- data/test/fixtures/server_unmountiso_success.txt +2 -0
- data/test/fixtures/server_vnc_success.txt +6 -0
- data/test/helper.rb +6 -0
- data/test/test_cli.rb +17 -0
- data/test/test_client.rb +50 -6
- data/test/test_general.rb +24 -48
- data/test/test_node.rb +107 -0
- data/test/test_reseller.rb +75 -0
- data/test/test_server.rb +95 -1
- metadata +132 -17
@@ -0,0 +1,168 @@
|
|
1
|
+
module Solusvm
|
2
|
+
class ServerCli < BaseCli
|
3
|
+
|
4
|
+
desc "status VSERVERID", "Checks the status of a server"
|
5
|
+
def status(vserverid)
|
6
|
+
say server.status(vserverid)
|
7
|
+
end
|
8
|
+
|
9
|
+
desc "info VSERVERID", "Retrieves information from a server"
|
10
|
+
def info(vserverid)
|
11
|
+
say server.info(vserverid)
|
12
|
+
end
|
13
|
+
|
14
|
+
desc "vnc VSERVERID", "Retrieves vnc information from a server"
|
15
|
+
def vnc(vserverid)
|
16
|
+
say server.vnc(vserverid)
|
17
|
+
end
|
18
|
+
|
19
|
+
desc "console VSERVERID", "Retrieves console information from a server"
|
20
|
+
def console(vserverid)
|
21
|
+
say server.console(vserverid)
|
22
|
+
end
|
23
|
+
|
24
|
+
desc "info-all VSERVERID", "Retrieves all availavle information from a server"
|
25
|
+
def info_all(vserverid)
|
26
|
+
say server.info_all(vserverid)
|
27
|
+
end
|
28
|
+
|
29
|
+
desc "change-plan VSERVERID NEWPLAN", "Changes the plan of a server"
|
30
|
+
def change_plan(vserverid, newplan)
|
31
|
+
say server.change_plan(vserverid, newplan)
|
32
|
+
end
|
33
|
+
|
34
|
+
desc "change-owner VSERVERID CLIENTID", "Changes the owner of a server"
|
35
|
+
def change_owner(vserverid, clientid)
|
36
|
+
say server.change_owner(vserverid, clientid)
|
37
|
+
end
|
38
|
+
|
39
|
+
desc "change-consolepass VSERVERID NEWPASSWORD", "Changes the console password of a server"
|
40
|
+
def change_consolepass(vserverid, newpassword)
|
41
|
+
say server.change_consolepass(vserverid, newpassword)
|
42
|
+
end
|
43
|
+
|
44
|
+
desc "change-vncpass VSERVERID NEWPASSWORD", "Changes the vnc password of a server"
|
45
|
+
def change_vncpass(vserverid, newpassword)
|
46
|
+
say server.change_vncpass(vserverid, newpassword)
|
47
|
+
end
|
48
|
+
|
49
|
+
desc "change-rootpass VSERVERID NEWPASSWORD", "Changes the root password of a server"
|
50
|
+
def change_rootpass(vserverid, newpassword)
|
51
|
+
say server.change_rootpassword(vserverid, newpassword)
|
52
|
+
end
|
53
|
+
|
54
|
+
desc "change-bootorder VSERVERID BOOTORDER", "Changes the boot order of a server [cd(Hard Disk CDROM)|dc(CDROM Hard Disk)|c(Hard Disk)|d(CDROM)]"
|
55
|
+
def change_bootorder(vserverid, newbootorder)
|
56
|
+
say server.change_bootorder(vserverid, newbootorder)
|
57
|
+
end
|
58
|
+
|
59
|
+
desc "change-hostname VSERVERID HOSTNAME", "Changes the hostname of a server"
|
60
|
+
def change_hostname(vserverid, newhostname)
|
61
|
+
say server.change_hostname(vserverid, newhostname)
|
62
|
+
end
|
63
|
+
|
64
|
+
desc "addip VSERVERID", "Adds an ip to the server"
|
65
|
+
def addip(vserverid)
|
66
|
+
say server.add_ip(vserverid)
|
67
|
+
end
|
68
|
+
|
69
|
+
desc "boot VSERVERID", "Boots up a server"
|
70
|
+
def boot(vserverid)
|
71
|
+
say server.boot(vserverid)
|
72
|
+
end
|
73
|
+
|
74
|
+
desc "reboot VSERVERID", "Reboots a server"
|
75
|
+
def reboot(vserverid)
|
76
|
+
say server.reboot(vserverid)
|
77
|
+
end
|
78
|
+
|
79
|
+
desc "shutdown VSERVERID", "Shuts down a server"
|
80
|
+
def shutdown(vserverid)
|
81
|
+
say server.shutdown(vserverid)
|
82
|
+
end
|
83
|
+
|
84
|
+
desc "suspend VSERVERID", "Suspends a server"
|
85
|
+
def suspend(vserverid)
|
86
|
+
say server.suspend(vserverid)
|
87
|
+
end
|
88
|
+
|
89
|
+
desc "resume VSERVERID", "Resumes a server"
|
90
|
+
def resume(vserverid)
|
91
|
+
say server.resume(vserverid)
|
92
|
+
end
|
93
|
+
|
94
|
+
desc "check-exists VSERVERID", "Checks if a server exists"
|
95
|
+
def check_exists(vserverid)
|
96
|
+
say server.check_exists(vserverid)
|
97
|
+
end
|
98
|
+
|
99
|
+
desc "terminate VSERVERID", "Terminates a server"
|
100
|
+
def terminate(vserverid)
|
101
|
+
say server.terminate(vserverid)
|
102
|
+
end
|
103
|
+
|
104
|
+
desc "rebuild VSERVERID", "Rebuilds a server"
|
105
|
+
method_option :template, :type => :string, :desc => "VPS template to boot from", :aliases => ["-t", "--template"]
|
106
|
+
def rebuild(vserverid)
|
107
|
+
say server.rebuild(vserverid, {:template => options[:template]})
|
108
|
+
end
|
109
|
+
|
110
|
+
desc "tun-switcher VSERVERID SWITCH(on|off)", "Enable/Disable TUN/TAP"
|
111
|
+
def tun_switcher(vserverid, switch)
|
112
|
+
say switch(vserverid, switch, :tun_enable, :tun_disable)
|
113
|
+
end
|
114
|
+
|
115
|
+
desc "network-switcher VSERVERID SWITCH(on|off)", "Enable/Disable Network mode"
|
116
|
+
def network_switcher(vserverid, switch)
|
117
|
+
say switch(vserverid, switch, :network_enable, :network_disable)
|
118
|
+
end
|
119
|
+
|
120
|
+
desc "pae-switcher VSERVERID SWITCH(on|off)", "Enable/Disable PAE"
|
121
|
+
def pae_switcher(vserverid, switch)
|
122
|
+
say switch(vserverid, switch, :pae_enable, :pae_disable)
|
123
|
+
end
|
124
|
+
|
125
|
+
desc "mountiso VSERVERID ISO", "Mounts an iso"
|
126
|
+
def mountiso(vserverid, iso)
|
127
|
+
say server.mountiso(vserverid, iso)
|
128
|
+
end
|
129
|
+
|
130
|
+
desc "unmountiso VSERVERID", "Unmounts an iso"
|
131
|
+
def unmountiso(vserverid)
|
132
|
+
say server.unmountiso(vserverid)
|
133
|
+
end
|
134
|
+
|
135
|
+
desc "create HOSTNAME PASSWORD", "Creates a new server"
|
136
|
+
method_option :plan, :type => :string, :desc => "Plan to use", :aliases => ["-p", "--plan"]
|
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 (#{Solusvm::Server::VALID_SERVER_TYPES.join(',')})", :aliases => ["-k", "--kind"]
|
139
|
+
method_option :username, :type => :string, :desc => "The client to put the VPS under", :aliases => ["-u", "--username"]
|
140
|
+
method_option :template, :type => :string, :desc => "VPS template to boot from", :aliases => ["-t", "--template"]
|
141
|
+
method_option :node, :type => :string, :desc => "Node to provision on", :aliases => ["-n", "--node"]
|
142
|
+
def create(hostname, password)
|
143
|
+
say server.create(hostname, password, {
|
144
|
+
:plan => options[:plan], :ips => options[:ips], :type => options[:kind],
|
145
|
+
:username => options[:username], :template => options[:template], :node => options[:node]
|
146
|
+
})
|
147
|
+
end
|
148
|
+
|
149
|
+
private
|
150
|
+
|
151
|
+
def server
|
152
|
+
@server ||= begin
|
153
|
+
configure
|
154
|
+
Solusvm::Server.new
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
def switch(vserverid, switch_value, on_method, off_method)
|
159
|
+
if switch_value == "on"
|
160
|
+
server.send(on_method, vserverid)
|
161
|
+
elsif switch_value == "off"
|
162
|
+
server.send(off_method, vserverid)
|
163
|
+
else
|
164
|
+
"Invalid switch value. Valid values are on|off"
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
data/lib/solusvm/cli.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'solusvm'
|
2
|
+
require 'solusvm/cli/base_cli'
|
3
|
+
require 'solusvm/cli/server_cli'
|
4
|
+
require 'solusvm/cli/node_cli'
|
5
|
+
require 'solusvm/cli/general_cli'
|
6
|
+
require 'solusvm/cli/reseller_cli'
|
7
|
+
require 'solusvm/cli/client_cli'
|
8
|
+
|
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
|
+
|
17
|
+
desc "version", "Outputs the current program version"
|
18
|
+
def version
|
19
|
+
say Solusvm::VERSION
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/solusvm/client.rb
CHANGED
@@ -1,35 +1,49 @@
|
|
1
1
|
module Solusvm
|
2
|
-
# Solusvm::Client is the class for working with clients
|
2
|
+
# Solusvm::Client is the class for working with clients.
|
3
3
|
class Client < Base
|
4
|
-
# Creates a client
|
4
|
+
# Creates a client.
|
5
5
|
#
|
6
6
|
# Options:
|
7
|
+
#
|
7
8
|
# * <tt>:username</tt>
|
8
9
|
# * <tt>:password</tt>
|
9
10
|
# * <tt>:email</tt>
|
10
11
|
# * <tt>:firstname</tt>
|
11
12
|
# * <tt>:lastname</tt>
|
13
|
+
# * <tt>:company</tt>
|
12
14
|
def create(options ={})
|
13
|
-
options.merge
|
14
|
-
perform_request(options)
|
15
|
+
perform_request(options.merge(:action => 'client-create')) && returned_parameters
|
15
16
|
end
|
16
17
|
|
17
|
-
#
|
18
|
-
def change_password(username,
|
19
|
-
perform_request({:action => "client-updatepassword", :username => username, :password =>
|
20
|
-
statusmsg.match /success/i
|
18
|
+
# Change client password for the solus admin.
|
19
|
+
def change_password(username, new_password)
|
20
|
+
perform_request({:action => "client-updatepassword", :username => username, :password => new_password})
|
21
21
|
end
|
22
22
|
|
23
|
-
#
|
23
|
+
# Checks wether a specific client exists.
|
24
24
|
def exists?(username)
|
25
25
|
perform_request({:action => 'client-checkexists', :username => username})
|
26
|
-
statusmsg.match /client exists/i
|
27
26
|
end
|
28
27
|
|
29
|
-
# Verify a clients login. Returns true when the specified login is correct
|
28
|
+
# Verify a clients login. Returns true when the specified login is correct.
|
30
29
|
def authenticate(username, password)
|
31
30
|
perform_request({:action => 'client-authenticate', :username => username, :password => password})
|
32
|
-
|
31
|
+
end
|
32
|
+
|
33
|
+
# Deletes an existing client.
|
34
|
+
def delete(username)
|
35
|
+
perform_request({:action => "client-delete", :username => username})
|
36
|
+
end
|
37
|
+
|
38
|
+
# Lists existing clients.
|
39
|
+
def list
|
40
|
+
perform_request({:action => "client-list"}, "client")
|
41
|
+
|
42
|
+
if returned_parameters["clients"] && returned_parameters["clients"]["client"]
|
43
|
+
returned_parameters["clients"]["client"]
|
44
|
+
elsif returned_parameters["clients"]
|
45
|
+
[]
|
46
|
+
end
|
33
47
|
end
|
34
48
|
end
|
35
49
|
end
|
data/lib/solusvm/general.rb
CHANGED
@@ -1,30 +1,38 @@
|
|
1
1
|
module Solusvm
|
2
|
+
# Solusvm::General is the class for retrieving general information.
|
2
3
|
class General < Base
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
4
|
+
|
5
|
+
# Lists available templates.
|
6
|
+
#
|
7
|
+
# Parameters:
|
8
|
+
#
|
9
|
+
# * +type+ - a valid virtualization type; e.g: [openvz|xen|xen hvm|kvm]
|
9
10
|
def templates(type)
|
10
11
|
validate_server_type!(type)
|
11
12
|
perform_request(:action => 'listtemplates', :type => type)
|
12
13
|
returned_parameters['templates'].split(',')
|
13
14
|
end
|
14
15
|
|
15
|
-
|
16
|
-
|
17
|
-
|
16
|
+
# Lists available plans.
|
17
|
+
#
|
18
|
+
# Parameters:
|
19
|
+
#
|
20
|
+
# * +type+ - a valid virtualization type; e.g: [openvz|xen|xen hvm|kvm]
|
21
|
+
def plans(type)
|
22
|
+
validate_server_type!(type)
|
23
|
+
perform_request(:action => 'listplans', :type => type)
|
24
|
+
returned_parameters['plans'].split(',')
|
18
25
|
end
|
19
26
|
|
20
|
-
#
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
27
|
+
# Lists available isos.
|
28
|
+
#
|
29
|
+
# Parameters:
|
30
|
+
#
|
31
|
+
# * +type+ - a valid virtualization type; e.g: [openvz|xen|xen hvm|kvm]
|
32
|
+
def isos(type)
|
33
|
+
validate_server_type!(type)
|
34
|
+
perform_request(:action => 'listiso', :type => type)
|
35
|
+
returned_parameters['iso'].split(',')
|
28
36
|
end
|
29
37
|
end
|
30
38
|
end
|
data/lib/solusvm/node.rb
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
module Solusvm
|
2
|
+
# Solusvm::Node is the class for working with nodes.
|
3
|
+
class Node < Base
|
4
|
+
|
5
|
+
# Lists existing nodes of a given type.
|
6
|
+
#
|
7
|
+
# Parameters:
|
8
|
+
#
|
9
|
+
# * +type+ - a valid virtualization type; e.g: [openvz|xen|xen hvm|kvm]
|
10
|
+
def list(type)
|
11
|
+
validate_server_type!(type)
|
12
|
+
perform_request(:action => 'listnodes', :type => type)
|
13
|
+
returned_parameters['nodes'].split(',')
|
14
|
+
end
|
15
|
+
|
16
|
+
# Lists existing nodes ids of a given type.
|
17
|
+
#
|
18
|
+
# Parameters:
|
19
|
+
#
|
20
|
+
# * +type+ - a valid virtualization type; e.g: [openvz|xen|xen hvm|kvm]
|
21
|
+
def ids(type)
|
22
|
+
validate_server_type!(type)
|
23
|
+
perform_request(:action => 'node-idlist', :type => type)
|
24
|
+
returned_parameters['nodes'].split(',')
|
25
|
+
end
|
26
|
+
|
27
|
+
# Retrieves statistics from a specific node.
|
28
|
+
def statistics(nodeid)
|
29
|
+
perform_request(:action => 'node-statistics', :nodeid => nodeid)
|
30
|
+
returned_parameters
|
31
|
+
end
|
32
|
+
|
33
|
+
# Retrieves available xen resources from a specific node.
|
34
|
+
def xenresources(nodeid)
|
35
|
+
perform_request(:action => 'node-xenresources', :nodeid => nodeid)
|
36
|
+
returned_parameters
|
37
|
+
end
|
38
|
+
|
39
|
+
# Retrieves a list of available IPs for a specific node.
|
40
|
+
def available_ips(nodeid)
|
41
|
+
perform_request(:action => 'node-iplist', :nodeid => nodeid)
|
42
|
+
if statusmsg.match /no available ip/i
|
43
|
+
[]
|
44
|
+
else
|
45
|
+
returned_parameters['ips'].split(',')
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# Lists virtual servers from a specific node.
|
50
|
+
def virtualservers(nodeid)
|
51
|
+
perform_request({:action => "node-virtualservers", :nodeid => nodeid}, "virtualserver")
|
52
|
+
|
53
|
+
if returned_parameters["virtualservers"] && returned_parameters["virtualservers"]["virtualserver"]
|
54
|
+
returned_parameters["virtualservers"]["virtualserver"]
|
55
|
+
elsif returned_parameters["virtualservers"]
|
56
|
+
[]
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
module Solusvm
|
2
|
+
class Reseller < Base
|
3
|
+
|
4
|
+
# Creates a reseller.
|
5
|
+
#
|
6
|
+
# Options:
|
7
|
+
#
|
8
|
+
# * <tt>:username</tt>
|
9
|
+
# * <tt>:password</tt>
|
10
|
+
# * <tt>:email</tt>
|
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 ={})
|
30
|
+
perform_request(options.merge(:action => 'reseller-create')) && returned_parameters
|
31
|
+
end
|
32
|
+
|
33
|
+
# Changes the available resources for a specific reseller.
|
34
|
+
#
|
35
|
+
# Options:
|
36
|
+
#
|
37
|
+
# * <tt>:maxvps</tt> - maximum amount of virtual servers (optional)
|
38
|
+
# * <tt>:maxusers</tt> - maximum amount of users (optional)
|
39
|
+
# * <tt>:maxmem</tt> - maximum amount memory - (optional)
|
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={})
|
52
|
+
perform_request(options.merge(:action => 'reseller-modifyresources', :username => username)) && returned_parameters
|
53
|
+
end
|
54
|
+
|
55
|
+
# Retrieves information from an existing reseller.
|
56
|
+
def info(username)
|
57
|
+
perform_request({:action => 'reseller-info', :username => username}) && returned_parameters
|
58
|
+
end
|
59
|
+
|
60
|
+
# Deletes an existing reseller.
|
61
|
+
def delete(username)
|
62
|
+
perform_request({:action => 'reseller-delete', :username => username})
|
63
|
+
end
|
64
|
+
|
65
|
+
# Lists existing resellers.
|
66
|
+
def list
|
67
|
+
perform_request(:action => 'reseller-list')
|
68
|
+
returned_parameters['usernames'].split(',')
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
end
|
data/lib/solusvm/server.rb
CHANGED
@@ -1,5 +1,25 @@
|
|
1
1
|
module Solusvm
|
2
|
+
# Solusvm::Server is the class for working with servers.
|
2
3
|
class Server < Base
|
4
|
+
|
5
|
+
# Creates a server.
|
6
|
+
#
|
7
|
+
# Options:
|
8
|
+
#
|
9
|
+
# * <tt>:type</tt> - openvz|xen|xen hvm|kvm
|
10
|
+
# * <tt>:node</tt> - name of node
|
11
|
+
# * <tt>:nodegroup</tt> - name of nodegroup
|
12
|
+
# * <tt>:username</tt> - client username
|
13
|
+
# * <tt>:plan</tt> - plan name
|
14
|
+
# * <tt>:template</tt> - template or iso name
|
15
|
+
# * <tt>:ips</tt> - amount of ips
|
16
|
+
# * <tt>:hvmt</tt> - 0|1 Default is 0. This allows to define templates & isos for Xen HVM
|
17
|
+
# * <tt>:custommemory</tt> - overide plan memory with this amount
|
18
|
+
# * <tt>:customdiskspace</tt> - overide plan diskspace with this amount
|
19
|
+
# * <tt>:custombandwidth</tt> - overide plan bandwidth with this amount
|
20
|
+
# * <tt>:customcpu</tt> - overide plan cpu cores with this amount
|
21
|
+
# * <tt>:customextraip</tt> - add this amount of extra ips
|
22
|
+
# * <tt>:issuelicense</tt> - 1|2 1 = cPanel monthly 2= cPanel yearly
|
3
23
|
def create(hostname, password, options = {})
|
4
24
|
options.reverse_merge!(
|
5
25
|
:type => 'xen',
|
@@ -11,64 +31,158 @@ module Solusvm
|
|
11
31
|
:password => password,
|
12
32
|
:hostname => hostname
|
13
33
|
).merge!(:action => 'vserver-create')
|
14
|
-
perform_request(options)
|
15
|
-
returned_parameters
|
34
|
+
perform_request(options) && returned_parameters
|
16
35
|
end
|
17
36
|
|
37
|
+
# Boots a server.
|
18
38
|
def boot(vid)
|
19
39
|
perform_request(:action => 'vserver-boot', :vserverid => vid)
|
20
40
|
end
|
21
41
|
|
42
|
+
# Reboots a server.
|
22
43
|
def reboot(vid)
|
23
44
|
perform_request(:action => 'vserver-reboot', :vserverid => vid)
|
24
45
|
end
|
25
46
|
|
47
|
+
# Suspends a server.
|
26
48
|
def suspend(vid)
|
27
49
|
perform_request(:action => 'vserver-suspend', :vserverid => vid)
|
28
50
|
end
|
29
51
|
|
52
|
+
# Resumes a server.
|
30
53
|
def resume(vid)
|
31
54
|
perform_request(:action => 'vserver-unsuspend', :vserverid => vid)
|
32
55
|
end
|
33
56
|
|
57
|
+
# Shuts down a server.
|
34
58
|
def shutdown(vid)
|
35
59
|
perform_request(:action => 'vserver-shutdown', :vserverid => vid)
|
36
60
|
end
|
37
61
|
|
62
|
+
# Enable TUN/TAP.
|
63
|
+
def tun_enable(vid)
|
64
|
+
perform_request(:action => 'vserver-tun-enable', :vserverid => vid)
|
65
|
+
end
|
66
|
+
|
67
|
+
# Disable TUN/TAP.
|
68
|
+
def tun_disable(vid)
|
69
|
+
perform_request(:action => 'vserver-tun-disable', :vserverid => vid)
|
70
|
+
end
|
71
|
+
|
72
|
+
# Enable Network Mode.
|
73
|
+
def network_enable(vid)
|
74
|
+
perform_request(:action => 'vserver-network-enable', :vserverid => vid)
|
75
|
+
end
|
76
|
+
|
77
|
+
# Disables Network Mode.
|
78
|
+
def network_disable(vid)
|
79
|
+
perform_request(:action => 'vserver-network-disable', :vserverid => vid)
|
80
|
+
end
|
81
|
+
|
82
|
+
# Enable PAE.
|
83
|
+
def pae_enable(vid)
|
84
|
+
perform_request(:action => 'vserver-pae', :vserverid => vid, :pae => "on")
|
85
|
+
end
|
86
|
+
|
87
|
+
# Disables PAE.
|
88
|
+
def pae_disable(vid)
|
89
|
+
perform_request(:action => 'vserver-pae', :vserverid => vid, :pae => "off")
|
90
|
+
end
|
91
|
+
|
92
|
+
# Terminates a server.
|
38
93
|
def terminate(vid, deleteclient = false)
|
39
94
|
perform_request(:action => 'vserver-terminate', :vserverid => vid, :deleteclient => deleteclient)
|
40
95
|
end
|
41
96
|
|
97
|
+
# Checks if a specific server exists.
|
42
98
|
def exists?(vid)
|
43
99
|
perform_request(:action => 'vserver-checkexists', :vserverid => vid)
|
44
100
|
!statusmsg.match(/Virtual server exists/i).nil?
|
45
101
|
end
|
46
102
|
|
103
|
+
# Checks the status of specific server (disabled|online|offline).
|
47
104
|
def status(vid)
|
48
105
|
perform_request(:action => 'vserver-status', :vserverid => vid)
|
49
106
|
statusmsg
|
50
107
|
end
|
51
108
|
|
109
|
+
# Adds an IP address for a specific server.
|
52
110
|
def add_ip(vid)
|
53
111
|
perform_request(:action => 'vserver-addip', :vserverid => vid)
|
54
112
|
end
|
55
113
|
|
114
|
+
# Changes server plan.
|
56
115
|
def change_plan(vid, plan)
|
57
116
|
perform_request(:action => 'vserver-change', :vserverid => vid, :plan => plan)
|
58
117
|
end
|
59
118
|
|
119
|
+
# Changes server owner.
|
120
|
+
def change_owner(vid, client_id)
|
121
|
+
perform_request(:action => 'vserver-changeowner', :vserverid => vid, :clientid => client_id)
|
122
|
+
end
|
123
|
+
|
124
|
+
# Changes server console password.
|
125
|
+
def change_consolepass(vid, new_password)
|
126
|
+
perform_request(:action => 'vserver-consolepass', :vserverid => vid, :consolepassword => new_password)
|
127
|
+
end
|
128
|
+
|
129
|
+
# Changes server vnc password.
|
130
|
+
def change_vncpass(vid, new_password)
|
131
|
+
perform_request(:action => 'vserver-vncpass', :vserverid => vid, :vncpassword => new_password)
|
132
|
+
end
|
133
|
+
|
134
|
+
# Changes server root password.
|
135
|
+
def change_rootpassword(vid, new_password)
|
136
|
+
perform_request(:action => 'vserver-rootpassword', :vserverid => vid, :rootpassword => new_password)
|
137
|
+
end
|
138
|
+
|
139
|
+
# Changes server boot order [cd(Hard Disk CDROM)|dc(CDROM Hard Disk)|c(Hard Disk)|d(CDROM)].
|
140
|
+
def change_bootorder(vid, bootorder)
|
141
|
+
perform_request(:action => 'vserver-bootorder', :vserverid => vid, :bootorder => bootorder.to_s)
|
142
|
+
end
|
143
|
+
|
144
|
+
# Changes server hostname.
|
145
|
+
def change_hostname(vid, hostname)
|
146
|
+
perform_request(:action => 'vserver-hostname', :vserverid => vid, :hostname => hostname)
|
147
|
+
end
|
148
|
+
|
149
|
+
# Retrieves server information.
|
60
150
|
def info(vid, reboot = false)
|
61
151
|
perform_request(:action => 'vserver-info', :vserverid => vid, :reboot => reboot)
|
62
152
|
returned_parameters
|
63
153
|
end
|
154
|
+
|
155
|
+
# Retrieves server vnc information.
|
156
|
+
def vnc(vid)
|
157
|
+
perform_request(:action => 'vserver-vnc', :vserverid => vid)
|
158
|
+
returned_parameters
|
159
|
+
end
|
160
|
+
|
161
|
+
# Retrieves server console information.
|
162
|
+
def console(vid)
|
163
|
+
perform_request(:action => 'vserver-console', :vserverid => vid)
|
164
|
+
returned_parameters
|
165
|
+
end
|
64
166
|
|
167
|
+
# Retrieves all available server information.
|
65
168
|
def info_all(vid)
|
66
169
|
perform_request(:action => 'vserver-infoall', :vserverid => vid)
|
67
170
|
returned_parameters
|
68
171
|
end
|
69
172
|
|
173
|
+
# Rebuilds a server using a given template.
|
70
174
|
def rebuild(vid, template)
|
71
175
|
perform_request(:action => 'vserver-rebuild', :vserverid => vid, :template => template)
|
72
176
|
end
|
177
|
+
|
178
|
+
# Mounts a given iso.
|
179
|
+
def mountiso(vid, iso)
|
180
|
+
perform_request(:action => 'vserver-mountiso', :vserverid => vid, :iso => iso)
|
181
|
+
end
|
182
|
+
|
183
|
+
# Unmounts a given iso.
|
184
|
+
def unmountiso(vid)
|
185
|
+
perform_request(:action => 'vserver-unmountiso', :vserverid => vid)
|
186
|
+
end
|
73
187
|
end
|
74
188
|
end
|
data/lib/solusvm/version.rb
CHANGED
data/lib/solusvm.rb
CHANGED
@@ -26,11 +26,11 @@ module Solusvm
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
-
|
30
|
-
|
31
|
-
require
|
32
|
-
require
|
33
|
-
require
|
34
|
-
require
|
35
|
-
require
|
36
|
-
require
|
29
|
+
require 'solusvm/exceptions'
|
30
|
+
require 'solusvm/hash'
|
31
|
+
require 'solusvm/base'
|
32
|
+
require 'solusvm/general'
|
33
|
+
require 'solusvm/client'
|
34
|
+
require 'solusvm/server'
|
35
|
+
require 'solusvm/reseller'
|
36
|
+
require 'solusvm/node'
|
data/solusvm.gemspec
CHANGED
@@ -19,9 +19,12 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.require_paths = ["lib"]
|
20
20
|
|
21
21
|
s.add_runtime_dependency 'xml-simple'
|
22
|
+
s.add_runtime_dependency 'thor'
|
22
23
|
s.add_runtime_dependency 'jruby-openssl' if RUBY_PLATFORM == 'java'
|
23
24
|
|
24
25
|
s.add_development_dependency 'redgreen', '~> 1.2.2'
|
25
26
|
s.add_development_dependency 'fakeweb', '~> 1.3.0'
|
27
|
+
s.add_development_dependency 'mocha', '~> 0.10.3'
|
28
|
+
s.add_development_dependency 'rdoc', '~> 3.12'
|
26
29
|
s.add_development_dependency 'rake', '~> 0.9.2.2'
|
27
30
|
end
|