solusvm 0.3.3 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +35 -3
- data/Rakefile +5 -0
- data/VERSION.yml +3 -3
- data/bin/solusvm +119 -0
- data/solusvm.gemspec +6 -2
- metadata +10 -9
data/README.rdoc
CHANGED
@@ -1,6 +1,38 @@
|
|
1
|
-
=
|
1
|
+
= Solusvm
|
2
2
|
|
3
|
-
|
3
|
+
Solusvm allows for easy interaction with the SolusVM Admin::API.
|
4
|
+
|
5
|
+
This library was first created for internal use at {Site5 LLC}[http://www.site5.com].
|
6
|
+
|
7
|
+
== Basic Examples
|
8
|
+
|
9
|
+
Solusvm.config('api_id', 'api_password', :url => 'http://www.example.com/api')
|
10
|
+
server = Solusvm::Server.new
|
11
|
+
|
12
|
+
# 200 is the id of the virtual server
|
13
|
+
server.shutdown(200) # => true
|
14
|
+
server.boot(200) # => true
|
15
|
+
server.reboot(200) # => true
|
16
|
+
server.suspend(200) # => true
|
17
|
+
server.resume(200) # => true
|
18
|
+
|
19
|
+
== Server creation
|
20
|
+
options = {:type => 'xen', :username => 'bob', :node => 'node1', :plan => 'plan1', :template => 'mytpl', :ips => 1}
|
21
|
+
result = sever.create('server.hostname.com', 'password', options}
|
22
|
+
p server.successful?
|
23
|
+
=> true
|
24
|
+
|
25
|
+
p result
|
26
|
+
=> {"mainipaddress"=>"127.0.0.1", "consoleuser"=>"console-user", "vserverid"=>"10",
|
27
|
+
"statusmsg"=>"Virtual server created", "virtid"=>"vm10", "consolepassword"=>"myPassisL33t",
|
28
|
+
"extraipaddress"=>{}, "hostname"=>"server.hostname", "rootpassword"=>"password", "status"=>"success"}
|
29
|
+
|
30
|
+
|
31
|
+
== REQUIREMENTS:
|
32
|
+
* xml-simple
|
33
|
+
|
34
|
+
== INSTALL:
|
35
|
+
* gem install solusvm
|
4
36
|
|
5
37
|
== Note on Patches/Pull Requests
|
6
38
|
|
@@ -14,4 +46,4 @@ Description goes here.
|
|
14
46
|
|
15
47
|
== Copyright
|
16
48
|
|
17
|
-
Copyright (c) 2010
|
49
|
+
Copyright (c) 2010 Site5. See LICENSE for details.
|
data/Rakefile
CHANGED
@@ -11,8 +11,13 @@ begin
|
|
11
11
|
gem.homepage = "http://github.com/site5/solusvm"
|
12
12
|
gem.authors = ["Justin Mazzi"]
|
13
13
|
gem.add_dependency 'xml-simple'
|
14
|
+
gem.rubyforge_project = 'solusvm'
|
14
15
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
15
16
|
end
|
17
|
+
|
18
|
+
Jeweler::RubyforgeTasks.new do |rubyforge|
|
19
|
+
rubyforge.doc_task = "rdoc"
|
20
|
+
end
|
16
21
|
Jeweler::GemcutterTasks.new
|
17
22
|
rescue LoadError
|
18
23
|
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
data/VERSION.yml
CHANGED
data/bin/solusvm
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "optparse"
|
4
|
+
require "pp"
|
5
|
+
require "yaml"
|
6
|
+
|
7
|
+
$:.unshift(File.join(File.dirname(__FILE__), "/../lib"))
|
8
|
+
require "solusvm"
|
9
|
+
|
10
|
+
opts = {}
|
11
|
+
shell_methods = {}
|
12
|
+
shell_methods['server-create'] = "<hostname> <password> -t myimag -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
|
+
|
23
|
+
OptionParser.new do |o|
|
24
|
+
o.banner = "USAGE: #{$0} <command> [options]"
|
25
|
+
o.on("-I", "--api-login [id]", "API ID: ") do |opt|
|
26
|
+
opts[:api_id] = opt
|
27
|
+
end
|
28
|
+
|
29
|
+
o.on("-K", "--api-key [key]", "API KEY: ") do |opt|
|
30
|
+
opts[:api_key] = opt
|
31
|
+
end
|
32
|
+
|
33
|
+
o.on("-N", "--node [node]", "Node to provision on: ") do |opt|
|
34
|
+
opts[:node] = opt
|
35
|
+
end
|
36
|
+
|
37
|
+
o.on("-U", "--api-url [URL]", "URL to the API: ") do |opt|
|
38
|
+
opts[:api_url] = opt
|
39
|
+
end
|
40
|
+
|
41
|
+
o.on("-u", "--username [username]", "The client to put the VPS under: ") do |opt|
|
42
|
+
opts[:username] = opt
|
43
|
+
end
|
44
|
+
|
45
|
+
o.on("-k", "--kind [kind]", "Type of VPS (#{Solusvm::Server::VALID_SERVER_TYPES.join(',')}): ") do |opt|
|
46
|
+
opts[:kind] = opt
|
47
|
+
end
|
48
|
+
|
49
|
+
o.on("-t", "--template [template]", "VPS template to boot from: ") do |opt|
|
50
|
+
opts[:template] = opt
|
51
|
+
end
|
52
|
+
|
53
|
+
o.on("-p", "--plan [plan]", "Plan to use: ") do |opt|
|
54
|
+
opts[:plan] = opt
|
55
|
+
end
|
56
|
+
|
57
|
+
o.on("-i", "--ips [number]", "Number of ips to add to the VPS: ") do |opt|
|
58
|
+
opts[:ips] = opt.to_i
|
59
|
+
end
|
60
|
+
|
61
|
+
o.on("-h", "--help", "Show help documentation") do |h|
|
62
|
+
puts o
|
63
|
+
puts "Commands:"
|
64
|
+
puts shell_methods.collect { |k,v| " #{k} #{v}"}.join("\n")
|
65
|
+
|
66
|
+
exit
|
67
|
+
end
|
68
|
+
end.parse!
|
69
|
+
|
70
|
+
config_file = File.join(File.expand_path(ENV['HOME']), '.soulsvm.yml')
|
71
|
+
server = Solusvm::Server.new
|
72
|
+
if ARGV.empty?
|
73
|
+
STDERR.puts "USAGE: #{$0} [function] [options]"
|
74
|
+
else
|
75
|
+
if File.exists?(config_file)
|
76
|
+
config = YAML::load(File.open(config_file))
|
77
|
+
Solusvm.config(config['id'], config['key'], :url => config['url'])
|
78
|
+
opts[:username] = config['username'] unless opts[:username]
|
79
|
+
elsif opts[:api_url] && opts[:api_id] && opts[:api_key]
|
80
|
+
Solusvm.config(opts[:api_id], opts[:api_key], :url => opts[:api_url])
|
81
|
+
else
|
82
|
+
puts "Must supply the api id/key and URL"
|
83
|
+
exit
|
84
|
+
end
|
85
|
+
meth = ARGV[0].chomp
|
86
|
+
if shell_methods.include?(meth)
|
87
|
+
ARGV.shift
|
88
|
+
if ARGV.empty?
|
89
|
+
p shell_methods[meth]
|
90
|
+
exit
|
91
|
+
else
|
92
|
+
case meth
|
93
|
+
when 'server-create'
|
94
|
+
unless ARGV.size == 2
|
95
|
+
p shell_methods[meth]
|
96
|
+
exit
|
97
|
+
end
|
98
|
+
p server.create(ARGV[0], ARGV[1], :plan => opts[:plan], :ips => opts[:ips], :type => opts[:kind],
|
99
|
+
:username => opts[:username], :template => opts[:template], :node => opts[:node])
|
100
|
+
when 'server-status'
|
101
|
+
p server.status(ARGV[0])
|
102
|
+
when 'server-boot'
|
103
|
+
p server.boot(ARGV[0])
|
104
|
+
when 'server-reboot'
|
105
|
+
p server.reboot(ARGV[0])
|
106
|
+
when 'server-suspend'
|
107
|
+
p server.suspend(ARGV[0])
|
108
|
+
when 'server-resume'
|
109
|
+
p server.resume(ARGV[0])
|
110
|
+
when 'server-check-exists'
|
111
|
+
p server.exists?(ARGV[0])
|
112
|
+
when 'server-terminate'
|
113
|
+
p server.terminate(ARGV[0])
|
114
|
+
end
|
115
|
+
end
|
116
|
+
else
|
117
|
+
puts "#{meth} is not a valid function"
|
118
|
+
end
|
119
|
+
end
|
data/solusvm.gemspec
CHANGED
@@ -5,13 +5,15 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{solusvm}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.4.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Justin Mazzi"]
|
12
|
-
s.date = %q{2010-06-
|
12
|
+
s.date = %q{2010-06-22}
|
13
|
+
s.default_executable = %q{solusvm}
|
13
14
|
s.description = %q{Solusvm allows for easy interaction with the SolusVM Admin::API.}
|
14
15
|
s.email = %q{jmazzi@gmail.com}
|
16
|
+
s.executables = ["solusvm"]
|
15
17
|
s.extra_rdoc_files = [
|
16
18
|
"LICENSE",
|
17
19
|
"README.rdoc"
|
@@ -23,6 +25,7 @@ Gem::Specification.new do |s|
|
|
23
25
|
"README.rdoc",
|
24
26
|
"Rakefile",
|
25
27
|
"VERSION.yml",
|
28
|
+
"bin/solusvm",
|
26
29
|
"lib/solusvm.rb",
|
27
30
|
"lib/solusvm/base.rb",
|
28
31
|
"lib/solusvm/client.rb",
|
@@ -58,6 +61,7 @@ Gem::Specification.new do |s|
|
|
58
61
|
s.homepage = %q{http://github.com/site5/solusvm}
|
59
62
|
s.rdoc_options = ["--charset=UTF-8"]
|
60
63
|
s.require_paths = ["lib"]
|
64
|
+
s.rubyforge_project = %q{solusvm}
|
61
65
|
s.rubygems_version = %q{1.3.7}
|
62
66
|
s.summary = %q{Wrapper for the SolusVM Admin::API}
|
63
67
|
s.test_files = [
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: solusvm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 4
|
9
|
+
- 0
|
10
|
+
version: 0.4.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Justin Mazzi
|
@@ -15,8 +15,8 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-06-
|
19
|
-
default_executable:
|
18
|
+
date: 2010-06-22 00:00:00 -04:00
|
19
|
+
default_executable: solusvm
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
22
|
name: xml-simple
|
@@ -34,8 +34,8 @@ dependencies:
|
|
34
34
|
version_requirements: *id001
|
35
35
|
description: Solusvm allows for easy interaction with the SolusVM Admin::API.
|
36
36
|
email: jmazzi@gmail.com
|
37
|
-
executables:
|
38
|
-
|
37
|
+
executables:
|
38
|
+
- solusvm
|
39
39
|
extensions: []
|
40
40
|
|
41
41
|
extra_rdoc_files:
|
@@ -48,6 +48,7 @@ files:
|
|
48
48
|
- README.rdoc
|
49
49
|
- Rakefile
|
50
50
|
- VERSION.yml
|
51
|
+
- bin/solusvm
|
51
52
|
- lib/solusvm.rb
|
52
53
|
- lib/solusvm/base.rb
|
53
54
|
- lib/solusvm/client.rb
|
@@ -108,7 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
108
109
|
version: "0"
|
109
110
|
requirements: []
|
110
111
|
|
111
|
-
rubyforge_project:
|
112
|
+
rubyforge_project: solusvm
|
112
113
|
rubygems_version: 1.3.7
|
113
114
|
signing_key:
|
114
115
|
specification_version: 3
|