novawhiz 0.0.0 → 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/novawhiz.rb +56 -7
- metadata +17 -1
data/lib/novawhiz.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'openstack'
|
2
|
-
|
2
|
+
require 'net/ssh/simple'
|
3
3
|
class NovaWhiz
|
4
4
|
|
5
5
|
attr_accessor :os
|
@@ -25,17 +25,66 @@ class NovaWhiz
|
|
25
25
|
images.first[:id]
|
26
26
|
end
|
27
27
|
|
28
|
+
def new_key(name)
|
29
|
+
key = @os.create_keypair :name => name
|
30
|
+
key[:private_key]
|
31
|
+
end
|
32
|
+
|
33
|
+
def public_ip(server)
|
34
|
+
server.accessipv4
|
35
|
+
end
|
36
|
+
|
37
|
+
def wait(timeout, interval=10)
|
38
|
+
while timeout > 0 do
|
39
|
+
return if yield
|
40
|
+
sleep interval
|
41
|
+
timeout -= interval
|
42
|
+
end
|
43
|
+
end
|
28
44
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
45
|
+
def run_command(creds, cmd)
|
46
|
+
Net::SSH::Simple.sync do
|
47
|
+
r = ssh(
|
48
|
+
creds[:ip],
|
49
|
+
cmd,
|
50
|
+
:user => creds[:user],
|
51
|
+
:key_data => [ creds[:key] ])
|
52
|
+
if !r.success
|
53
|
+
"command failed on #{creds[:ip]} : #{cmd} : #{r.stdout} : #{r.stderr}"
|
54
|
+
end
|
55
|
+
puts r.stdout
|
56
|
+
puts r.stderr
|
57
|
+
end
|
58
|
+
end
|
34
59
|
|
60
|
+
# boot an instance and return creds
|
35
61
|
def boot(opts)
|
36
62
|
opts[:flavor] ||= 'standard.xsmall'
|
37
|
-
opts[:image] ||= /Precise/
|
63
|
+
opts[:image] ||= /Ubuntu Precise/
|
64
|
+
opts[:sec_groups] ||= ['default']
|
65
|
+
opts[:key_name] ||= 'default'
|
38
66
|
raise 'no name provided' if !opts[:name] or opts[:name].empty?
|
67
|
+
|
68
|
+
private_key = new_key opts[:name]
|
69
|
+
server = @os.create_server(
|
70
|
+
:imageRef => image_id(opts[:image]),
|
71
|
+
:flavorRef => flavor_id(opts[:flavor]),
|
72
|
+
:key_name => opts[:name],
|
73
|
+
:security_groups => opts[:sec_groups],
|
74
|
+
:name => opts[:name])
|
75
|
+
|
76
|
+
wait(300) do
|
77
|
+
server = @os.server(server.id)
|
78
|
+
raise 'error booting vm' if server.status == 'ERROR'
|
79
|
+
server.status == 'ACTIVE'
|
80
|
+
end
|
81
|
+
sleep 60
|
82
|
+
|
83
|
+
{
|
84
|
+
:ip => public_ip(server),
|
85
|
+
:user => 'ubuntu',
|
86
|
+
:key => private_key
|
87
|
+
}
|
39
88
|
end
|
40
89
|
|
41
90
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: novawhiz
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -27,6 +27,22 @@ dependencies:
|
|
27
27
|
- - ! '>='
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: net-ssh-simple
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
30
46
|
description: library and command line tool for simplifying openstack nova operations
|
31
47
|
email: none@example.com
|
32
48
|
executables: []
|