blimpy 0.3.0 → 0.3.1

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.
@@ -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