blimpy 0.3.4 → 0.3.5
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/lib/blimpy/box.rb +3 -1
- data/lib/blimpy/boxes/aws.rb +3 -1
- data/lib/blimpy/cli.rb +1 -1
- data/lib/blimpy/securitygroups.rb +37 -0
- data/lib/blimpy/version.rb +1 -1
- data/spec/blimpy/securitygroups_spec.rb +55 -0
- metadata +10 -7
data/lib/blimpy/box.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'blimpy/helpers/state'
|
2
2
|
require 'blimpy/livery'
|
3
3
|
require 'blimpy/keys'
|
4
|
+
require 'blimpy/securitygroups'
|
4
5
|
require 'blimpy/boxes'
|
5
6
|
|
6
7
|
module Blimpy
|
@@ -8,7 +9,7 @@ module Blimpy
|
|
8
9
|
include Blimpy::Helpers::State
|
9
10
|
|
10
11
|
attr_reader :allowed_regions, :region
|
11
|
-
attr_accessor :image_id, :flavor, :group
|
12
|
+
attr_accessor :image_id, :flavor, :group, :ports
|
12
13
|
attr_accessor :name, :tags, :fleet_id, :username, :livery
|
13
14
|
|
14
15
|
|
@@ -33,6 +34,7 @@ module Blimpy
|
|
33
34
|
@group = nil
|
34
35
|
@name = 'Unnamed Box'
|
35
36
|
@tags = {}
|
37
|
+
@ports = []
|
36
38
|
@server = server
|
37
39
|
@fleet_id = 0
|
38
40
|
@ssh_connected = false
|
data/lib/blimpy/boxes/aws.rb
CHANGED
@@ -46,10 +46,12 @@ module Blimpy::Boxes
|
|
46
46
|
tags = @tags.merge({:Name => @name, :CreatedBy => 'Blimpy', :BlimpyFleetId => @fleet_id})
|
47
47
|
|
48
48
|
Blimpy::Keys.import_key(fog)
|
49
|
+
generated_group = Blimpy::SecurityGroups.ensure_group(fog, @ports + [22])
|
50
|
+
groups = [@group, generated_group].compact
|
49
51
|
fog.servers.create(:image_id => @image_id,
|
50
52
|
:flavor_id => @flavor,
|
51
53
|
:key_name => Blimpy::Keys.key_name,
|
52
|
-
:groups =>
|
54
|
+
:groups => groups,
|
53
55
|
:tags => tags)
|
54
56
|
end
|
55
57
|
end
|
data/lib/blimpy/cli.rb
CHANGED
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'set'
|
2
|
+
require 'zlib'
|
3
|
+
|
4
|
+
module Blimpy
|
5
|
+
module SecurityGroups
|
6
|
+
def self.group_id(ports)
|
7
|
+
if ports.nil? or ports.empty?
|
8
|
+
return nil
|
9
|
+
end
|
10
|
+
|
11
|
+
ports = Set.new(ports)
|
12
|
+
# Lolwut, #hash is inconsistent between ruby processes
|
13
|
+
"Blimpy-#{Zlib.crc32(ports.inspect)}"
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.ensure_group(fog, ports)
|
17
|
+
name = group_id(ports)
|
18
|
+
ports = Set.new(ports)
|
19
|
+
|
20
|
+
exists = fog.security_groups.get(name)
|
21
|
+
|
22
|
+
if exists.nil?
|
23
|
+
create_group(fog, ports)
|
24
|
+
end
|
25
|
+
name
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.create_group(fog, ports)
|
29
|
+
name = group_id(ports)
|
30
|
+
group = fog.security_groups.create(:name => name,
|
31
|
+
:description => "Custom Blimpy security group for #{ports.to_a}")
|
32
|
+
ports.each do |port|
|
33
|
+
group.authorize_port_range(port .. port)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/lib/blimpy/version.rb
CHANGED
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'blimpy/securitygroups'
|
3
|
+
|
4
|
+
describe Blimpy::SecurityGroups do
|
5
|
+
let(:fog) { mock('Fog object') }
|
6
|
+
let(:ports) { [22, 8080] }
|
7
|
+
|
8
|
+
describe '#group_id' do
|
9
|
+
it 'should return nil for an empty port Array' do
|
10
|
+
subject.group_id([]).should be_nil
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'with a known ID' do
|
14
|
+
let(:known_id) { 3548764514 }
|
15
|
+
|
16
|
+
it 'should generate the right string for [1, 2]' do
|
17
|
+
subject.group_id([1, 2]).should == "Blimpy-#{known_id}"
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should generate the identical string for [1, 2, 1]' do
|
21
|
+
subject.group_id([1, 2, 1]).should == "Blimpy-#{known_id}"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe '#ensure_group' do
|
27
|
+
context 'for a group that exists' do
|
28
|
+
it 'should bail and not try to create the group' do
|
29
|
+
fog.stub_chain(:security_groups, :get).and_return(true)
|
30
|
+
subject.should_receive(:create_group).never
|
31
|
+
subject.should_receive(:group_id).and_return('fake-id')
|
32
|
+
name = subject.ensure_group(fog, ports)
|
33
|
+
name.should == 'fake-id'
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context "for a group that doesn't exist" do
|
38
|
+
it 'should create the group' do
|
39
|
+
fog.stub_chain(:security_groups, :get).and_return(nil)
|
40
|
+
subject.should_receive(:create_group).once
|
41
|
+
subject.ensure_group(fog, ports)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe '#create_group' do
|
47
|
+
let(:group) { mock('Fog SecurityGroup') }
|
48
|
+
it 'should authorize the port ranges for every port' do
|
49
|
+
fog.stub_chain(:security_groups, :create).and_return(group)
|
50
|
+
group.should_receive(:authorize_port_range).with(22..22)
|
51
|
+
group.should_receive(:authorize_port_range).with(8080..8080)
|
52
|
+
subject.create_group(fog, ports)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
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.
|
4
|
+
version: 0.3.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-05-20 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: fog
|
16
|
-
requirement: &
|
16
|
+
requirement: &7711400 !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: *
|
24
|
+
version_requirements: *7711400
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: thor
|
27
|
-
requirement: &
|
27
|
+
requirement: &7710980 !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: *
|
35
|
+
version_requirements: *7710980
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: minitar
|
38
|
-
requirement: &
|
38
|
+
requirement: &7710540 !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: *
|
46
|
+
version_requirements: *7710540
|
47
47
|
description: Blimpy is a tool for managing a fleet of machines in the CLOUD!
|
48
48
|
email:
|
49
49
|
- tyler@monkeypox.org
|
@@ -79,6 +79,7 @@ files:
|
|
79
79
|
- lib/blimpy/helpers/state.rb
|
80
80
|
- lib/blimpy/keys.rb
|
81
81
|
- lib/blimpy/livery.rb
|
82
|
+
- lib/blimpy/securitygroups.rb
|
82
83
|
- lib/blimpy/version.rb
|
83
84
|
- spec/blimpy/box_spec.rb
|
84
85
|
- spec/blimpy/boxes/aws_spec.rb
|
@@ -88,6 +89,7 @@ files:
|
|
88
89
|
- spec/blimpy/helpers/state_spec.rb
|
89
90
|
- spec/blimpy/keys_spec.rb
|
90
91
|
- spec/blimpy/livery_spec.rb
|
92
|
+
- spec/blimpy/securitygroups_spec.rb
|
91
93
|
- spec/blimpy_spec.rb
|
92
94
|
- spec/spec_helper.rb
|
93
95
|
homepage: https://github.com/rtyler/blimpy
|
@@ -132,5 +134,6 @@ test_files:
|
|
132
134
|
- spec/blimpy/helpers/state_spec.rb
|
133
135
|
- spec/blimpy/keys_spec.rb
|
134
136
|
- spec/blimpy/livery_spec.rb
|
137
|
+
- spec/blimpy/securitygroups_spec.rb
|
135
138
|
- spec/blimpy_spec.rb
|
136
139
|
- spec/spec_helper.rb
|