blimpy 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,31 @@
1
+ Feature: Run provisioning against running VMs
2
+ In order to update the currently running VMs with new code/etc
3
+ As a blimpy user
4
+ I should be able to incrementally send updates to VMs and have the
5
+ provisioning code run again
6
+
7
+ Background: Ensure a simple Blimpfile
8
+ Given I have the Blimpfile:
9
+ """
10
+ Blimpy.fleet do |fleet|
11
+ fleet.add(:aws) do |blimp|
12
+ blimp.name = 'provision-blimp'
13
+ end
14
+ end
15
+ """
16
+
17
+ Scenario: No arguments and no VMs
18
+ When I run `blimpy provision`
19
+ Then the exit status should be 1
20
+ And the output should contain:
21
+ """
22
+ No Blimps running!
23
+ """
24
+
25
+ Scenario: Naming a blimp without running Blimps
26
+ When I run `blimpy provision provision-blimp`
27
+ Then the exit status should be 1
28
+ And the output should contain:
29
+ """
30
+ Could not find a blimp named "provision-blimp"
31
+ """
@@ -1,11 +1,11 @@
1
- Feature: List running VMs
1
+ Feature: Show running VMs
2
2
 
3
3
  Scenario: With no running VMs
4
4
  Given I have the Blimpfile:
5
5
  """
6
6
  # Empty!
7
7
  """
8
- When I run `blimpy list`
8
+ When I run `blimpy status`
9
9
  Then the exit status should be 0
10
10
  And the output should contain:
11
11
  """
@@ -14,6 +14,6 @@ Feature: List running VMs
14
14
 
15
15
  Scenario: With a running VM
16
16
  Given I have a single VM running
17
- When I run `blimpy list`
17
+ When I run `blimpy status`
18
18
  Then the exit status should be 0
19
19
  And the output should list the VM
@@ -153,12 +153,15 @@ module Blimpy
153
153
  def bootstrap_livery
154
154
  tarball = nil
155
155
  if livery == :cwd
156
- tarball = Blimpy::Livery.tarball_directory(Dir.pwd)
157
- scp_file(tarball)
158
- # HAXX
159
- basename = File.basename(tarball)
156
+ dir_name = File.basename(Dir.pwd)
157
+ run_command('rsync', '-av',
158
+ '--exclude=.git',
159
+ '--exclude=.svn',
160
+ '--exclude=.blimpy.d',
161
+ '.',
162
+ "#{username}@#{dns_name}:#{dir_name}/")
160
163
  puts 'Bootstrapping the livery'
161
- ssh_into("tar -zxf #{basename} && cd #{File.basename(tarball, '.tar.gz')} && sudo ./bootstrap.sh")
164
+ ssh_into("cd #{dir_name} && sudo ./bootstrap.sh")
162
165
  end
163
166
  end
164
167
 
@@ -170,7 +173,6 @@ module Blimpy
170
173
  # after sshd(8) comes online
171
174
  @exec_commands = false
172
175
 
173
- print "..waiting for sshd on #{@name} to come online"
174
176
  until @ssh_connected
175
177
  # Run the `true` command and exit
176
178
  @ssh_connected = ssh_into('-q', 'true')
@@ -22,7 +22,6 @@ module Blimpy
22
22
  engine
23
23
  end
24
24
 
25
-
26
25
  def box_by_name(name)
27
26
  engine = load_engine
28
27
  box = nil
@@ -41,11 +40,22 @@ module Blimpy
41
40
 
42
41
  engine.fleet.ships.each do |ship|
43
42
  next unless ship.name == name
44
- ship.server = Blimpy::Box.fog_server_for_instance(id, data)
43
+ ship.server = ship.class.fog_server_for_instance(id, data)
45
44
  box = ship
46
45
  end
47
46
  box
48
47
  end
48
+
49
+ def current_blimps
50
+ blimps = Dir["#{Dir.pwd}/.blimpy.d/*.blimp"]
51
+ return false if blimps.empty?
52
+
53
+ data = []
54
+ blimps.each do |blimp|
55
+ data << [blimp, YAML.load_file(blimp)]
56
+ end
57
+ data
58
+ end
49
59
  end
50
60
 
51
61
  desc 'start', 'Start up a fleet of blimps'
@@ -63,17 +73,16 @@ module Blimpy
63
73
  engine.fleet.start
64
74
  end
65
75
 
66
- desc 'list', 'List running blimps'
67
- def list
76
+ desc 'status', 'Show running blimps'
77
+ def status
68
78
  ensure_blimpfile
69
- blimps = Dir["#{Dir.pwd}/.blimpy.d/*.blimp"]
70
- if blimps.empty?
79
+ blimps = current_blimps
80
+ unless blimps
71
81
  puts 'No currently running VMs'
72
82
  exit 0
73
83
  end
74
84
 
75
- blimps.each do |blimp|
76
- data = YAML.load_file(blimp)
85
+ blimps.each do |blimp, data|
77
86
  instance_id = File.basename(blimp)
78
87
  instance_id = instance_id.split('.blimp').first
79
88
  puts "#{data['name']} (#{instance_id}) is: online at #{data['dns']}"
@@ -138,12 +147,26 @@ end
138
147
  desc 'provision BLIMP_NAME', 'Run the livery again'
139
148
  def provision(name=nil)
140
149
  ensure_blimpfile
141
- box = box_by_name(name)
142
- if box.nil?
143
- puts "Could not find a blimp named \"#{name}\""
144
- exit 1
150
+ unless name.nil?
151
+ box = box_by_name(name)
152
+ if box.nil?
153
+ puts "Could not find a blimp named \"#{name}\""
154
+ exit 1
155
+ end
156
+ box.bootstrap
157
+ else
158
+ blimps = current_blimps
159
+ unless blimps
160
+ puts "No Blimps running!"
161
+ exit 1
162
+ end
163
+
164
+ blimps.each do |blimp, data|
165
+ next unless data['name']
166
+ box = box_by_name(data['name'])
167
+ box.bootstrap
168
+ end
145
169
  end
146
- box.bootstrap
147
170
  end
148
171
  end
149
172
  end
@@ -1,3 +1,3 @@
1
1
  module Blimpy
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.1"
3
3
  end
@@ -110,8 +110,9 @@ describe Blimpy::Box do
110
110
 
111
111
  it 'should tarball up the current directory' do
112
112
  Dir.should_receive(:pwd).and_return('mock-pwd')
113
- Blimpy::Livery.should_receive(:tarball_directory).with('mock-pwd').and_return('mock-pwd.tar.gz')
114
- subject.should_receive(:scp_file).with('mock-pwd.tar.gz')
113
+ subject.should_receive(:run_command) do |*args|
114
+ args.first.should == 'rsync'
115
+ end
115
116
  subject.should_receive(:ssh_into)
116
117
  subject.bootstrap_livery
117
118
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blimpy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-05-19 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fog
16
- requirement: &20178020 !ruby/object:Gem::Requirement
16
+ requirement: &9308320 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *20178020
24
+ version_requirements: *9308320
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: thor
27
- requirement: &20177600 !ruby/object:Gem::Requirement
27
+ requirement: &9307780 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *20177600
35
+ version_requirements: *9307780
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: minitar
38
- requirement: &20177180 !ruby/object:Gem::Requirement
38
+ requirement: &9307240 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *20177180
46
+ version_requirements: *9307240
47
47
  description: Blimpy is a tool for managing a fleet of machines in the CLOUD!
48
48
  email:
49
49
  - tyler@monkeypox.org
@@ -60,10 +60,11 @@ files:
60
60
  - bin/blimpy
61
61
  - blimpy.gemspec
62
62
  - features/cli/init.feature
63
- - features/cli/list.feature
63
+ - features/cli/provision.feature
64
64
  - features/cli/scp.feature
65
65
  - features/cli/ssh.feature
66
66
  - features/cli/start.feature
67
+ - features/cli/status.feature
67
68
  - features/step_definitions/cli_steps.rb
68
69
  - features/support/env.rb
69
70
  - features/support/hooks.rb
@@ -115,10 +116,11 @@ specification_version: 3
115
116
  summary: Ruby + CLOUD = Blimpy
116
117
  test_files:
117
118
  - features/cli/init.feature
118
- - features/cli/list.feature
119
+ - features/cli/provision.feature
119
120
  - features/cli/scp.feature
120
121
  - features/cli/ssh.feature
121
122
  - features/cli/start.feature
123
+ - features/cli/status.feature
122
124
  - features/step_definitions/cli_steps.rb
123
125
  - features/support/env.rb
124
126
  - features/support/hooks.rb