novawhiz 0.0.0 → 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/novawhiz.rb +56 -7
  2. 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
- :ip => 'xxx',
31
- :user => 'xxx',
32
- :key => 'xxx'
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.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: []