solusvm 0.10.1 → 1.0.0.beta
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.
- 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
data/README.markdown
CHANGED
@@ -41,31 +41,81 @@ Server creation
|
|
41
41
|
Command Line Usage
|
42
42
|
------------------
|
43
43
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
44
|
+
Tasks:
|
45
|
+
solusvm client <command> # Client commands
|
46
|
+
solusvm general <command> # General commands
|
47
|
+
solusvm help [TASK] # Describe available tasks or one specific task
|
48
|
+
solusvm node <command> # Node commands
|
49
|
+
solusvm reseller <command> # Reseller commands
|
50
|
+
solusvm server <command> # Server commands
|
51
|
+
solusvm version # Outputs the current program version
|
52
|
+
|
53
|
+
solusvm client authenticate USERNAME NEWPASSWORD # Verify a clients login. Returns true when the specified login is correct
|
54
|
+
solusvm client change-password USERNAME NEWPASSWORD # Changes the password of an existing client
|
55
|
+
solusvm client check-exists USERNAME # Checks if a client exists
|
56
|
+
solusvm client create # Creates a new client
|
57
|
+
solusvm client delete USERNAME # Deletes an existing client
|
58
|
+
solusvm client help [COMMAND] # Describe subcommands or one specific subcommand
|
59
|
+
solusvm client list # Lists existing clients
|
60
|
+
|
61
|
+
solusvm general help [COMMAND] # Describe subcommands or one specific subcommand
|
62
|
+
solusvm general isos TYPE # Lists existing isos for a given type [openvz|xen|xen hvm|kvm]
|
63
|
+
solusvm general plans TYPE # Lists existing plans for a given type [openvz|xen|xen hvm|kvm]
|
64
|
+
solusvm general templates TYPE # Lists existing templates for a given type [openvz|xen|xen hvm|kvm]
|
65
|
+
|
66
|
+
solusvm node available-ips VSERVERID # Lists the available ips for a given node
|
67
|
+
solusvm node help [COMMAND] # Describe subcommands or one specific subcommand
|
68
|
+
solusvm node list TYPE # Lists existing nodes for a given type [openvz|xen|xen hvm|kvm]
|
69
|
+
solusvm node list-ids TYPE # Lists existing nodes ids for a given type [openvz|xen|xen hvm|kvm]
|
70
|
+
solusvm node stats VSERVERID # Lists statistics for a given node
|
71
|
+
solusvm node virtualservers VSERVERID # Lists the virtual servers for a given node
|
72
|
+
solusvm node xenresources VSERVERID # Lists xen resources for a given node
|
73
|
+
|
74
|
+
solusvm reseller change # Changes the available resources of a reseller
|
75
|
+
solusvm reseller create # Creates a new reseller
|
76
|
+
solusvm reseller delete USERNAME # Deletes an existing reseller
|
77
|
+
solusvm reseller help [COMMAND] # Describe subcommands or one specific subcommand
|
78
|
+
solusvm reseller info USERNAME # Retrieves information from an existing reseller
|
79
|
+
solusvm reseller list # Lists existing resellers
|
80
|
+
|
81
|
+
solusvm server addip VSERVERID # Adds an ip to the server
|
82
|
+
solusvm server boot VSERVERID # Boots up a server
|
83
|
+
solusvm server change-bootorder VSERVERID BOOTORDER # Changes the boot order of a server [cd(Hard Disk CDROM)|dc(CDROM Hard Disk)|c(Hard Di...
|
84
|
+
solusvm server change-consolepass VSERVERID NEWPASSWORD # Changes the console password of a server
|
85
|
+
solusvm server change-hostname VSERVERID HOSTNAME # Changes the hostname of a server
|
86
|
+
solusvm server change-owner VSERVERID CLIENTID # Changes the owner of a server
|
87
|
+
solusvm server change-plan VSERVERID NEWPLAN # Changes the plan of a server
|
88
|
+
solusvm server change-rootpass VSERVERID NEWPASSWORD # Changes the root password of a server
|
89
|
+
solusvm server change-vncpass VSERVERID NEWPASSWORD # Changes the vnc password of a server
|
90
|
+
solusvm server check-exists VSERVERID # Checks if a server exists
|
91
|
+
solusvm server console VSERVERID # Retrieves console information from a server
|
92
|
+
solusvm server create HOSTNAME PASSWORD # Creates a new server
|
93
|
+
solusvm server help [COMMAND] # Describe subcommands or one specific subcommand
|
94
|
+
solusvm server info VSERVERID # Retrieves information from a server
|
95
|
+
solusvm server info-all VSERVERID # Retrieves all availavle information from a server
|
96
|
+
solusvm server mountiso VSERVERID ISO # Mounts an iso
|
97
|
+
solusvm server network-switcher VSERVERID SWITCH(on|off) # Enable/Disable Network mode
|
98
|
+
solusvm server pae-switcher VSERVERID SWITCH(on|off) # Enable/Disable PAE
|
99
|
+
solusvm server reboot VSERVERID # Reboots a server
|
100
|
+
solusvm server rebuild VSERVERID # Rebuilds a server
|
101
|
+
solusvm server resume VSERVERID # Resumes a server
|
102
|
+
solusvm server shutdown VSERVERID # Shuts down a server
|
103
|
+
solusvm server status VSERVERID # Checks the status of a server
|
104
|
+
solusvm server suspend VSERVERID # Suspends a server
|
105
|
+
solusvm server terminate VSERVERID # Terminates a server
|
106
|
+
solusvm server tun-switcher VSERVERID SWITCH(on|off) # Enable/Disable TUN/TAP
|
107
|
+
solusvm server unmountiso VSERVERID # Unmounts an iso
|
108
|
+
solusvm server vnc VSERVERID # Retrieves vnc information from a server
|
109
|
+
|
110
|
+
Options:
|
111
|
+
-I, --api-login, [--api-login=API_LOGIN] # API ID. Required.
|
112
|
+
-K, --api-key, [--api-key=API_KEY] # API KEY. Required.
|
113
|
+
-U, --api-url, [--api-url=API_URL] # API URL. Required.
|
114
|
+
|
115
|
+
|
116
|
+
To check the available options for a given action, you can execute the following command:
|
117
|
+
|
118
|
+
solusvm server help create
|
69
119
|
|
70
120
|
Default Config for Command Line
|
71
121
|
--------------------------------
|
data/bin/solusvm
CHANGED
@@ -1,158 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require "optparse"
|
4
|
-
require "pp"
|
5
|
-
require "yaml"
|
6
|
-
|
7
3
|
$:.unshift(File.join(File.dirname(__FILE__), "/../lib"))
|
8
|
-
require "solusvm"
|
9
|
-
|
10
|
-
opts = {}
|
11
|
-
$shell_methods = {}
|
12
|
-
$shell_methods['server-create'] = "<hostname> <password> -t myimage -k xen -p myplan -i 1"
|
13
|
-
$shell_methods['server-boot'] = "<vserverid>"
|
14
|
-
$shell_methods['server-reboot'] = "<vserverid>"
|
15
|
-
$shell_methods['server-shutdown'] = "<vserverid>"
|
16
|
-
$shell_methods['server-suspend'] = "<vserverid>"
|
17
|
-
$shell_methods['server-resume'] = "<vserverid>"
|
18
|
-
$shell_methods['server-status'] = "<vserverid>"
|
19
|
-
$shell_methods['server-addip'] = "<vserverid>"
|
20
|
-
$shell_methods['server-changeplan'] = "<vserverid> <newplan>"
|
21
|
-
$shell_methods['server-check-exists'] = "<vserverid>"
|
22
|
-
$shell_methods['server-terminate'] = "<vserverid>"
|
23
|
-
$shell_methods['node-stats'] = "<nodeid>"
|
24
|
-
$shell_methods['node-available-ips'] = "<nodeid>"
|
25
|
-
$shell_methods['server-rebuild'] = "<vserverid> -t myimage"
|
26
|
-
|
27
|
-
def list_commands
|
28
|
-
puts "Commands:"
|
29
|
-
puts $shell_methods.collect { |k,v| " #{k} #{v}"}.join("\n")
|
30
|
-
exit
|
31
|
-
end
|
32
|
-
|
33
|
-
op = OptionParser.new do |o|
|
34
|
-
o.banner = "USAGE: #{File.basename($0)} <command> [options]"
|
35
|
-
o.on("-I", "--api-login [id]", "API ID") do |opt|
|
36
|
-
opts[:api_id] = opt
|
37
|
-
end
|
38
|
-
|
39
|
-
o.on("-K", "--api-key [key]", "API KEY") do |opt|
|
40
|
-
opts[:api_key] = opt
|
41
|
-
end
|
42
|
-
|
43
|
-
o.on("-N", "--node [node]", "Node to provision on") do |opt|
|
44
|
-
opts[:node] = opt
|
45
|
-
end
|
46
|
-
|
47
|
-
o.on("-U", "--api-url [URL]", "URL to the API") do |opt|
|
48
|
-
opts[:api_url] = opt
|
49
|
-
end
|
50
|
-
|
51
|
-
o.on("-u", "--username [username]", "The client to put the VPS under") do |opt|
|
52
|
-
opts[:username] = opt
|
53
|
-
end
|
54
|
-
|
55
|
-
o.on("-k", "--kind [kind]", "Type of VPS (#{Solusvm::Server::VALID_SERVER_TYPES.join(',')})") do |opt|
|
56
|
-
opts[:kind] = opt
|
57
|
-
end
|
58
|
-
|
59
|
-
o.on("-t", "--template [template]", "VPS template to boot from") do |opt|
|
60
|
-
opts[:template] = opt
|
61
|
-
end
|
62
|
-
|
63
|
-
o.on("-p", "--plan [plan]", "Plan to use") do |opt|
|
64
|
-
opts[:plan] = opt
|
65
|
-
end
|
66
|
-
|
67
|
-
o.on("-i", "--ips [number]", "Number of ips to add to the VPS") do |opt|
|
68
|
-
opts[:ips] = opt.to_i
|
69
|
-
end
|
70
|
-
|
71
|
-
o.on("-h", "--help", "Show help documentation") do |h|
|
72
|
-
puts o
|
73
|
-
list_commands
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
optparse = op
|
78
|
-
op.parse!
|
79
4
|
|
80
|
-
|
81
|
-
|
82
|
-
general = Solusvm::General.new
|
5
|
+
require "thor"
|
6
|
+
require "solusvm/cli"
|
83
7
|
|
84
|
-
|
85
|
-
# STDERR.puts "USAGE: #{File.basename($0)} [function] [options]"
|
86
|
-
puts optparse.help
|
87
|
-
list_commands
|
88
|
-
else
|
89
|
-
if File.exists?(config_file)
|
90
|
-
config = YAML::load(File.open(config_file))
|
91
|
-
Solusvm.config(config['id'], config['key'], :url => config['url'])
|
92
|
-
opts[:username] = config['username'] unless opts[:username]
|
93
|
-
elsif opts[:api_url] && opts[:api_id] && opts[:api_key]
|
94
|
-
Solusvm.config(opts[:api_id], opts[:api_key], :url => opts[:api_url])
|
95
|
-
else
|
96
|
-
puts "Must supply the api id/key and URL"
|
97
|
-
exit
|
98
|
-
end
|
99
|
-
meth = ARGV[0].chomp
|
100
|
-
if $shell_methods.include?(meth)
|
101
|
-
ARGV.shift
|
102
|
-
if ARGV.empty?
|
103
|
-
p $shell_methods[meth]
|
104
|
-
exit
|
105
|
-
else
|
106
|
-
begin
|
107
|
-
case meth
|
108
|
-
when 'server-create'
|
109
|
-
unless ARGV.size == 2
|
110
|
-
list_commands
|
111
|
-
end
|
112
|
-
p server.create(ARGV[0], ARGV[1], :plan => opts[:plan], :ips => opts[:ips], :type => opts[:kind],
|
113
|
-
:username => opts[:username], :template => opts[:template], :node => opts[:node])
|
114
|
-
when 'server-status'
|
115
|
-
p server.status(ARGV[0])
|
116
|
-
when 'server-changeplan'
|
117
|
-
p server.change_plan(ARGV[0], ARGV[1])
|
118
|
-
when 'server-addip'
|
119
|
-
p server.add_ip(ARGV[0])
|
120
|
-
when 'server-boot'
|
121
|
-
p server.boot(ARGV[0])
|
122
|
-
when 'server-reboot'
|
123
|
-
p server.reboot(ARGV[0])
|
124
|
-
when 'server-shutdown'
|
125
|
-
p server.shutdown(ARGV[0])
|
126
|
-
when 'server-suspend'
|
127
|
-
p server.suspend(ARGV[0])
|
128
|
-
when 'server-resume'
|
129
|
-
p server.resume(ARGV[0])
|
130
|
-
when 'server-check-exists'
|
131
|
-
p server.exists?(ARGV[0])
|
132
|
-
when 'server-terminate'
|
133
|
-
p server.terminate(ARGV[0])
|
134
|
-
when 'node-available-ips'
|
135
|
-
ips = general.node_available_ips(ARGV[0])
|
136
|
-
if ips.any?
|
137
|
-
puts ips.join("\n")
|
138
|
-
else
|
139
|
-
puts ips
|
140
|
-
end
|
141
|
-
when 'node-stats'
|
142
|
-
stats = general.node_statistics(ARGV[0])
|
143
|
-
stats.each do |k,v|
|
144
|
-
puts "#{k} => #{v}"
|
145
|
-
end
|
146
|
-
when 'server-rebuild'
|
147
|
-
p server.rebuild(ARGV[0], opts[:template])
|
148
|
-
end
|
149
|
-
rescue Exception => e
|
150
|
-
puts "Error: #{e}\n\n"
|
151
|
-
puts "Backtrace: \n\n"
|
152
|
-
puts e.backtrace.join("\n")
|
153
|
-
end
|
154
|
-
end
|
155
|
-
else
|
156
|
-
puts "#{meth} is not a valid function"
|
157
|
-
end
|
158
|
-
end
|
8
|
+
Solusvm::Cli.start
|
data/lib/solusvm/base.rb
CHANGED
@@ -6,16 +6,18 @@ module Solusvm
|
|
6
6
|
|
7
7
|
# Prepares and sends the API request to the URL specificed in Solusvm.config
|
8
8
|
#
|
9
|
-
#
|
10
9
|
# class MyClass < Base
|
11
10
|
# def create_server(name)
|
12
11
|
# perform_request(:action => 'name', :id => 1)
|
13
12
|
# end
|
14
13
|
# end
|
14
|
+
#
|
15
15
|
# Options:
|
16
16
|
# * <tt>:action</tt> - Specifies which API method to execute
|
17
17
|
# All other options passed in are converted to http query arguments and are passed along to the API
|
18
|
-
|
18
|
+
#
|
19
|
+
# <tt>force_array</tt> - see parse_response
|
20
|
+
def perform_request(options = {}, force_array = false)
|
19
21
|
options.merge!(api_login)
|
20
22
|
http = Net::HTTP.new(api_endpoint.host, api_endpoint.port)
|
21
23
|
if api_endpoint.port == 443
|
@@ -27,16 +29,20 @@ module Solusvm
|
|
27
29
|
response = http.request(request)
|
28
30
|
|
29
31
|
handle_errors(response.body)
|
30
|
-
@returned_parameters = parse_response(response.body)
|
32
|
+
@returned_parameters = parse_response(response.body, force_array)
|
31
33
|
log_messages(options)
|
32
34
|
end
|
33
35
|
successful?
|
34
36
|
end
|
35
37
|
|
36
38
|
# Converts the XML response to a Hash
|
37
|
-
|
39
|
+
#
|
40
|
+
# <tt>force_array</tt> - Parses the xml element as an array; can be a string with the element name
|
41
|
+
# or an array with element names
|
42
|
+
def parse_response(body, force_array = false)
|
43
|
+
force_array = Array(force_array) if force_array
|
38
44
|
body = "<solusrequest>#{body}</solusrequest>"
|
39
|
-
XmlSimple.xml_in(body, 'ForceArray' =>
|
45
|
+
XmlSimple.xml_in(body, 'ForceArray' => force_array)
|
40
46
|
end
|
41
47
|
|
42
48
|
# Look for known error messages
|
@@ -69,14 +75,15 @@ module Solusvm
|
|
69
75
|
{:id => Solusvm.api_id, :key => Solusvm.api_key}
|
70
76
|
end
|
71
77
|
|
72
|
-
# TODO: clean this up
|
73
78
|
def log_messages(options)
|
74
|
-
|
75
|
-
|
79
|
+
logger, logger_method = Solusvm.api_options[:logger], Solusvm.api_options[:logger_method]
|
80
|
+
|
81
|
+
if logger && logger.respond_to?(logger_method)
|
82
|
+
logger.send(logger_method, "[Start] => #{options[:action]}")
|
76
83
|
returned_parameters.each do |k,v|
|
77
|
-
|
84
|
+
logger.send(logger_method, " #{k} => #{v}")
|
78
85
|
end
|
79
|
-
|
86
|
+
logger.send(logger_method, "[End] => #{options[:action]}")
|
80
87
|
end
|
81
88
|
end
|
82
89
|
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'thor'
|
3
|
+
require 'thor/group'
|
4
|
+
require 'solusvm/version'
|
5
|
+
|
6
|
+
module Solusvm
|
7
|
+
class BaseCli < Thor
|
8
|
+
include Thor::Actions
|
9
|
+
|
10
|
+
# Retrieves default options coming from a configuration file, if any.
|
11
|
+
def self.default_option(key)
|
12
|
+
@@yaml ||= begin
|
13
|
+
file = File.join(File.expand_path(ENV['HOME']), '.solusvm.yml')
|
14
|
+
if File.exists?(file)
|
15
|
+
YAML::load(File.open(file))
|
16
|
+
else
|
17
|
+
{}
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
@@yaml[key.to_s]
|
22
|
+
end
|
23
|
+
|
24
|
+
# Convenience method to get the namespace from the class name. It's the
|
25
|
+
# same as Thor default except that the "_cli" at the end of the class
|
26
|
+
# is removed.
|
27
|
+
def self.namespace(name=nil)
|
28
|
+
return super if name
|
29
|
+
@namespace ||= super.sub(/_cli$/, '')
|
30
|
+
end
|
31
|
+
|
32
|
+
class_option :api_login, :type => :string, :desc => "API ID; Required.", :aliases => ["-I", "--api-login"], :default => default_option(:id)
|
33
|
+
class_option :api_key, :type => :string, :desc => "API KEY; Required.", :aliases => ["-K", "--api-key"], :default => default_option(:key)
|
34
|
+
class_option :api_url, :type => :string, :desc => "API URL; Required.", :aliases => ["-U", "--api-url"], :default => default_option(:url)
|
35
|
+
|
36
|
+
# Overrides the default banner implementation to output the whole command
|
37
|
+
def self.banner(task, namespace = true, subcommand = false)
|
38
|
+
"#{self.namespace.split(":").join(" ")} #{task.formatted_usage(self, false, false)}"
|
39
|
+
end
|
40
|
+
|
41
|
+
protected
|
42
|
+
|
43
|
+
def configure
|
44
|
+
Solusvm.config(options[:api_login], options[:api_key], :url => options[:api_url])
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Solusvm
|
2
|
+
class ClientCli < BaseCli
|
3
|
+
|
4
|
+
desc "create", "Creates a new client"
|
5
|
+
method_option :username, :type => :string, :desc => "Username", :aliases => ["-u", "--username"]
|
6
|
+
method_option :password, :type => :string, :desc => "Password", :aliases => ["-p", "--password"]
|
7
|
+
method_option :email, :type => :string, :desc => "Email", :aliases => ["-e", "--email"]
|
8
|
+
method_option :firstname, :type => :string, :desc => "Firstname", :aliases => ["-f", "--firstname"]
|
9
|
+
method_option :lastname, :type => :string, :desc => "Lastname", :aliases => ["-l", "--lastname"]
|
10
|
+
method_option :company, :type => :string, :desc => "Company", :aliases => ["-c", "--company"]
|
11
|
+
def create
|
12
|
+
say client.create(options)
|
13
|
+
end
|
14
|
+
|
15
|
+
desc "change-password USERNAME NEWPASSWORD", "Changes the password of an existing client"
|
16
|
+
def change_password(username, password)
|
17
|
+
say client.change_password(username, password)
|
18
|
+
end
|
19
|
+
|
20
|
+
desc "authenticate USERNAME NEWPASSWORD", "Verify a clients login. Returns true when the specified login is correct"
|
21
|
+
def authenticate(username, password)
|
22
|
+
say client.authenticate(username, password)
|
23
|
+
end
|
24
|
+
|
25
|
+
desc "check-exists USERNAME", "Checks if a client exists"
|
26
|
+
def check_exists(username)
|
27
|
+
say client.exists?(username)
|
28
|
+
end
|
29
|
+
|
30
|
+
desc "delete USERNAME", "Deletes an existing client"
|
31
|
+
def delete(username)
|
32
|
+
say client.delete(username)
|
33
|
+
end
|
34
|
+
|
35
|
+
desc "list", "Lists existing clients"
|
36
|
+
def list
|
37
|
+
say client.list
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def client
|
43
|
+
@client ||= begin
|
44
|
+
configure
|
45
|
+
Solusvm::Client.new
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Solusvm
|
2
|
+
class GeneralCli < BaseCli
|
3
|
+
|
4
|
+
desc "templates TYPE", "Lists existing templates for a given type [openvz|xen|xen hvm|kvm]"
|
5
|
+
def templates(type)
|
6
|
+
say general.templates(type)
|
7
|
+
end
|
8
|
+
|
9
|
+
desc "plans TYPE", "Lists existing plans for a given type [openvz|xen|xen hvm|kvm]"
|
10
|
+
def plans(type)
|
11
|
+
say general.plans(type)
|
12
|
+
end
|
13
|
+
|
14
|
+
desc "isos TYPE", "Lists existing isos for a given type [openvz|xen|xen hvm|kvm]"
|
15
|
+
def isos(type)
|
16
|
+
say general.isos(type)
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def general
|
22
|
+
@general ||= begin
|
23
|
+
configure
|
24
|
+
Solusvm::General.new
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Solusvm
|
2
|
+
class NodeCli < BaseCli
|
3
|
+
|
4
|
+
desc "list TYPE", "Lists existing nodes for a given type [openvz|xen|xen hvm|kvm]"
|
5
|
+
def list(type)
|
6
|
+
say node.list(type)
|
7
|
+
end
|
8
|
+
|
9
|
+
desc "list-ids TYPE", "Lists existing nodes ids for a given type [openvz|xen|xen hvm|kvm]"
|
10
|
+
def list_ids(type)
|
11
|
+
say node.ids(type)
|
12
|
+
end
|
13
|
+
|
14
|
+
desc "available-ips VSERVERID", "Lists the available ips for a given node"
|
15
|
+
def available_ips(vserverid)
|
16
|
+
say node.available_ips(vserverid).join("\n")
|
17
|
+
end
|
18
|
+
|
19
|
+
desc "stats VSERVERID", "Lists statistics for a given node"
|
20
|
+
def stats(vserverid)
|
21
|
+
say node.statistics(vserverid).map{|k, v| "#{k} => #{v}" }.join("\n")
|
22
|
+
end
|
23
|
+
|
24
|
+
desc "xenresources VSERVERID", "Lists xen resources for a given node"
|
25
|
+
def xenresources(vserverid)
|
26
|
+
say node.xenresources(vserverid).map{|k, v| "#{k} => #{v}" }.join("\n")
|
27
|
+
end
|
28
|
+
|
29
|
+
desc "virtualservers VSERVERID", "Lists the virtual servers for a given node"
|
30
|
+
def virtualservers(vserverid)
|
31
|
+
say node.virtualservers(vserverid)
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def node
|
37
|
+
@node ||= begin
|
38
|
+
configure
|
39
|
+
Solusvm::Node.new
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
module Solusvm
|
2
|
+
class ResellerCli < BaseCli
|
3
|
+
|
4
|
+
desc "create", "Creates a new reseller"
|
5
|
+
method_option :username, :type => :string, :desc => "Username", :aliases => ["-u", "--username"]
|
6
|
+
method_option :password, :type => :string, :desc => "Password", :aliases => ["-p", "--password"]
|
7
|
+
method_option :email, :type => :string, :desc => "Email", :aliases => ["-e", "--email"]
|
8
|
+
method_option :firstname, :type => :string, :desc => "Firstname", :aliases => ["-f", "--firstname"]
|
9
|
+
method_option :lastname, :type => :string, :desc => "Lastname", :aliases => ["-l", "--lastname"]
|
10
|
+
method_option :company, :type => :string, :desc => "Company", :aliases => ["-c", "--company"]
|
11
|
+
method_option :usernameprefix, :type => :string, :desc => "Prefix for reseller client usernames (optional)", :aliases => ["-up", "--usernameprefix"]
|
12
|
+
method_option :maxvps, :type => :string, :desc => "Maximum amount of virtual servers (optional)", :aliases => ["-mvps", "--maxvps"]
|
13
|
+
method_option :maxusers, :type => :string, :desc => "Maximum amount of users (optional)", :aliases => ["-mu", "--maxusers"]
|
14
|
+
method_option :maxmem, :type => :string, :desc => "Maximum amount of memory (optional)", :aliases => ["-mm", "--maxmem"]
|
15
|
+
method_option :maxburst, :type => :string, :desc => "Maximum amount of burst memory or swapspace (optional)", :aliases => ["-mb", "--maxburst"]
|
16
|
+
method_option :maxbw, :type => :string, :desc => "Maximum amount of bandwith (optional)", :aliases => ["-mb", "--maxbw"]
|
17
|
+
method_option :maxdisk, :type => :string, :desc => "Maximum amount of disk (optional)", :aliases => ["-mb", "--maxdisk"]
|
18
|
+
method_option :maxipv4, :type => :string, :desc => "Maximum amount of ipv4 addresses (optional)", :aliases => ["-mipv4", "--maxipv4"]
|
19
|
+
method_option :maxipv6, :type => :string, :desc => "Maximum amount of ipv6 addresses (optional)", :aliases => ["-mipv6", "--maxipv6"]
|
20
|
+
method_option :nodegroups, :type => :string, :desc => "Comma separated list of node groups (optional)", :aliases => ["-ng", "--nodegroups"]
|
21
|
+
method_option :mediagroups, :type => :string, :desc => "Comma separated list of media groups (optional)", :aliases => ["-mg", "--mediagroups"]
|
22
|
+
method_option :openvz, :type => :string, :desc => "y|n Allow building of openvz virtual servers (optional)", :aliases => ["-ovz", "--openvz"]
|
23
|
+
method_option :xenpv, :type => :string, :desc => "y|n Allow building of xen pv virtual servers (optional)", :aliases => ["-xpv", "--xenpv"]
|
24
|
+
method_option :xenhvm, :type => :string, :desc => "y|n Allow building of xen hvm virtual servers (optional)", :aliases => ["-xhvm", "--xenhvm"]
|
25
|
+
method_option :kvm, :type => :string, :desc => "y|n Allow building of kvmvirtual servers (optional)", :aliases => ["-kvm"]
|
26
|
+
def create
|
27
|
+
say reseller.create(options)
|
28
|
+
end
|
29
|
+
|
30
|
+
desc "change", "Changes the available resources of a reseller"
|
31
|
+
method_option :maxvps, :type => :string, :desc => "Maximum amount of virtual servers (optional)", :aliases => ["-mvps", "--maxvps"]
|
32
|
+
method_option :maxusers, :type => :string, :desc => "Maximum amount of users (optional)", :aliases => ["-mu", "--maxusers"]
|
33
|
+
method_option :maxmem, :type => :string, :desc => "Maximum amount of memory (optional)", :aliases => ["-mm", "--maxmem"]
|
34
|
+
method_option :maxburst, :type => :string, :desc => "Maximum amount of burst memory or swapspace (optional)", :aliases => ["-mb", "--maxburst"]
|
35
|
+
method_option :maxbw, :type => :string, :desc => "Maximum amount of bandwith (optional)", :aliases => ["-mb", "--maxbw"]
|
36
|
+
method_option :maxdisk, :type => :string, :desc => "Maximum amount of disk (optional)", :aliases => ["-mb", "--maxdisk"]
|
37
|
+
method_option :maxipv4, :type => :string, :desc => "Maximum amount of ipv4 addresses (optional)", :aliases => ["-mipv4", "--maxipv4"]
|
38
|
+
method_option :maxipv6, :type => :string, :desc => "Maximum amount of ipv6 addresses (optional)", :aliases => ["-mipv6", "--maxipv6"]
|
39
|
+
method_option :nodegroups, :type => :string, :desc => "Comma separated list of node groups (optional)", :aliases => ["-ng", "--nodegroups"]
|
40
|
+
method_option :mediagroups, :type => :string, :desc => "Comma separated list of media groups (optional)", :aliases => ["-mg", "--mediagroups"]
|
41
|
+
method_option :openvz, :type => :string, :desc => "y|n Allow building of openvz virtual servers (optional)", :aliases => ["-ovz", "--openvz"]
|
42
|
+
method_option :xenpv, :type => :string, :desc => "y|n Allow building of xen pv virtual servers (optional)", :aliases => ["-xpv", "--xenpv"]
|
43
|
+
method_option :xenhvm, :type => :string, :desc => "y|n Allow building of xen hvm virtual servers (optional)", :aliases => ["-xhvm", "--xenhvm"]
|
44
|
+
method_option :kvm, :type => :string, :desc => "y|n Allow building of kvmvirtual servers (optional)", :aliases => ["-kvm"]
|
45
|
+
def change_resources
|
46
|
+
say reseller.change_resources(options)
|
47
|
+
end
|
48
|
+
|
49
|
+
desc "info USERNAME", "Retrieves information from an existing reseller"
|
50
|
+
def info(username)
|
51
|
+
say reseller.info(username)
|
52
|
+
end
|
53
|
+
|
54
|
+
desc "delete USERNAME", "Deletes an existing reseller"
|
55
|
+
def delete(username)
|
56
|
+
say reseller.delete(username)
|
57
|
+
end
|
58
|
+
|
59
|
+
desc "list", "Lists existing resellers"
|
60
|
+
def list
|
61
|
+
say reseller.list
|
62
|
+
end
|
63
|
+
|
64
|
+
private
|
65
|
+
|
66
|
+
def reseller
|
67
|
+
@reseller ||= begin
|
68
|
+
configure
|
69
|
+
Solusvm::Reseller.new
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|