fog-bouncer 0.2.4 → 0.2.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.
@@ -15,7 +15,7 @@ Gem::Specification.new do |gem|
15
15
  gem.require_paths = ["lib"]
16
16
  gem.version = Fog::Bouncer::VERSION
17
17
 
18
- gem.add_dependency "clamp", "~> 0.3.0"
18
+ gem.add_dependency "clamp", "~> 0.3"
19
19
  gem.add_dependency "clarence", "1987.0.0"
20
20
  gem.add_dependency "fog", "~> 1.2"
21
21
  gem.add_dependency "ipaddress", "~> 0.8.0"
@@ -24,26 +24,6 @@ module Fog
24
24
  end
25
25
  end
26
26
 
27
- def extra_remote_sources
28
- sources.select { |source| !source.local? && source.remote? }
29
- end
30
-
31
- def local?
32
- !!local
33
- end
34
-
35
- def missing_remote_sources
36
- sources.select { |source| source.local? && !source.remote? }
37
- end
38
-
39
- def remote?
40
- !remote.nil?
41
- end
42
-
43
- def sources
44
- @sources ||= []
45
- end
46
-
47
27
  def add_source(source, &block)
48
28
  if existing = sources.find { |s| s.match(source) }
49
29
  existing.instance_eval(&block)
@@ -52,17 +32,6 @@ module Fog
52
32
  end
53
33
  end
54
34
 
55
- def sync
56
- log(sync: true) do
57
- create_missing_remote
58
- synchronize_sources
59
- end
60
- end
61
-
62
- def use(name)
63
- @using << security.definitions(name)
64
- end
65
-
66
35
  def create_missing_remote
67
36
  unless remote?
68
37
  log(create_missing_remote: true) do
@@ -74,12 +43,6 @@ module Fog
74
43
  end
75
44
  end
76
45
 
77
- def synchronize_sources
78
- log(synchronize_sources: true) do
79
- SourceManager.new(self).synchronize
80
- end
81
- end
82
-
83
46
  def destroy
84
47
  revoke
85
48
  if remote?
@@ -96,6 +59,35 @@ module Fog
96
59
  end
97
60
  end
98
61
 
62
+ # Public: Check if it has exceeded the 100 rules limit per group on AWS,
63
+ # http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/using-network-security.html.
64
+ #
65
+ # Examples
66
+ #
67
+ # exceeded?
68
+ # # => false
69
+ #
70
+ # Returns a Boolean
71
+ def exceeded?
72
+ local_permissions.size > 100
73
+ end
74
+
75
+ def extra_remote_sources
76
+ sources.select { |source| !source.local? && source.remote? }
77
+ end
78
+
79
+ def local?
80
+ !!local
81
+ end
82
+
83
+ def missing_remote_sources
84
+ sources.select { |source| source.local? && !source.remote? }
85
+ end
86
+
87
+ def remote?
88
+ !remote.nil?
89
+ end
90
+
99
91
  def revoke
100
92
  permissions = sources.map do |source|
101
93
  source.protocols.select { |p| p.remote? }
@@ -112,6 +104,21 @@ module Fog
112
104
  end
113
105
  end
114
106
 
107
+ def sources
108
+ @sources ||= []
109
+ end
110
+
111
+ def sync
112
+ log(sync: true) do
113
+ create_missing_remote
114
+ synchronize_sources
115
+ end
116
+ end
117
+
118
+ def use(name)
119
+ @using << security.definitions(name)
120
+ end
121
+
115
122
  def ==(other)
116
123
  name == other.name &&
117
124
  description == other.description
@@ -133,9 +140,23 @@ module Fog
133
140
  end
134
141
  end
135
142
 
143
+ def local_permissions
144
+ permissions = sources.map do |source|
145
+ source.protocols.select { |p| p.local? }
146
+ end.flatten.compact
147
+ end
148
+
136
149
  def source(source, &block)
137
150
  add_source(source, &block)
138
151
  end
152
+
153
+ def synchronize_sources
154
+ log(synchronize_sources: true) do
155
+ log(rules_limit: 100, rules: local_permissions.size)
156
+ log(exceeded_aws_limit: true) if exceeded?
157
+ SourceManager.new(self).synchronize
158
+ end
159
+ end
139
160
  end
140
161
  end
141
162
  end
@@ -49,6 +49,7 @@ module Fog
49
49
  end
50
50
 
51
51
  def sync
52
+ log(group_limit: 500, groups: groups.size)
52
53
  GroupManager.new(self).synchronize
53
54
  end
54
55
 
@@ -1,5 +1,5 @@
1
1
  module Fog
2
2
  module Bouncer
3
- VERSION = "0.2.4"
3
+ VERSION = "0.2.5"
4
4
  end
5
5
  end
@@ -29,6 +29,15 @@ describe Fog::Bouncer do
29
29
  end
30
30
  end
31
31
 
32
+ describe "#exceeded?" do
33
+ it "should check if the group exceeds the AWS rules limit" do
34
+ @group.exceeded?.must_equal false
35
+ source = @group.sources.first
36
+ 0.upto(100) { |i| p = source.add_protocol(:tcp, i + 1000); p.local = true }
37
+ @group.exceeded?.must_equal true
38
+ end
39
+ end
40
+
32
41
  describe "#extras" do
33
42
  before do
34
43
  Fog::Bouncer::IPPermissions.to(@group, [{ "ipProtocol" => "tcp", "fromPort" => 20, "toPort" => 20, "ipRanges" => [{ "cidrIp" => "2.2.2.2/2" }], "groups" => [] }])
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fog-bouncer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.2.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-07 00:00:00.000000000 Z
12
+ date: 2012-10-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: clamp
@@ -18,7 +18,7 @@ dependencies:
18
18
  requirements:
19
19
  - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: 0.3.0
21
+ version: '0.3'
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ~>
28
28
  - !ruby/object:Gem::Version
29
- version: 0.3.0
29
+ version: '0.3'
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: clarence
32
32
  requirement: !ruby/object:Gem::Requirement