sport_ngin_aws_auditor 4.2.1 → 4.3.0
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.
- checksums.yaml +5 -5
- data/.ruby-version +1 -1
- data/CHANGELOG.markdown +9 -0
- data/lib/sport_ngin_aws_auditor/audit_data.rb +1 -1
- data/lib/sport_ngin_aws_auditor/instance_helper.rb +29 -6
- data/lib/sport_ngin_aws_auditor/rds_instance.rb +14 -14
- data/lib/sport_ngin_aws_auditor/scripts/audit.rb +11 -12
- data/lib/sport_ngin_aws_auditor/version.rb +1 -1
- data/spec/sport_ngin_aws_auditor/instance_helper_spec.rb +2 -2
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 77f4a4a6712086ccf4206ba4477e49aa2723b099031b33f94b3f9b7e4e043575
|
4
|
+
data.tar.gz: 52c30f9db578a364389d5f7890a8733e9f813f96db844cec0ce6f354bee43dcd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0e9b82ba9bde5c9d3c4accb58016ad85903e0cca91fb746f17db2edf5b21aeeb9f4ce7776c70ee49f5b3a201f8626266e9a51506cf1b45e8c0ca97687dc4a103
|
7
|
+
data.tar.gz: 54371f74e22edb4e546df3b79cb886b625a5fd18e7aafcff0741f0192621f9c1c59532f26badb99150c56d2bfdb9695242e6991990a257f25cdde5a3926bc884
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
ruby-2.2.
|
1
|
+
ruby-2.2.7
|
data/CHANGELOG.markdown
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
#### v4.3.0
|
2
|
+
* Compare platforms of RDS and EC2 instances correctly
|
3
|
+
|
4
|
+
> Emma Sax: Unknown User: https://github.com/sportngin/sport_ngin_aws_auditor/pull/43
|
5
|
+
|
6
|
+
* Have auditor check all regions, not just U.S. regions
|
7
|
+
|
8
|
+
> Emma Sax: Unknown User: https://github.com/sportngin/sport_ngin_aws_auditor/pull/42
|
9
|
+
|
1
10
|
#### v4.2.1
|
2
11
|
* Only give the name 'VPC' to an instance if the account supports EC2 Classic
|
3
12
|
|
@@ -65,7 +65,7 @@ module SportNginAwsAuditor
|
|
65
65
|
def gather_all_data
|
66
66
|
instances = self.klass.get_instances(self.client, tag_name)
|
67
67
|
retired_tags = self.klass.get_retired_tags(instances)
|
68
|
-
instance_hash = self.klass.compare(instances, ignore_instances_regexes, self.client)
|
68
|
+
instance_hash = self.klass.compare(instances, ignore_instances_regexes, self.client, self.klass)
|
69
69
|
retired_ris = self.klass.get_recent_retired_reserved_instances(self.client)
|
70
70
|
|
71
71
|
return instance_hash, retired_tags, retired_ris
|
@@ -24,7 +24,7 @@ module SportNginAwsAuditor
|
|
24
24
|
instance_hash
|
25
25
|
end
|
26
26
|
|
27
|
-
def add_region_ris_to_hash(ris_region, differences)
|
27
|
+
def add_region_ris_to_hash(ris_region, differences, klass)
|
28
28
|
ris_region.each do |ri|
|
29
29
|
differences.each do |key, value|
|
30
30
|
# if key = 'Linux VPC us-east-1a t2.medium'...
|
@@ -38,7 +38,9 @@ module SportNginAwsAuditor
|
|
38
38
|
size = my_match[2] if my_match
|
39
39
|
size[0] = ''
|
40
40
|
|
41
|
-
if (platform
|
41
|
+
if compare_platforms_based_on_klass(klass, platform, ri.platform) &&
|
42
|
+
(size == ri.instance_type) &&
|
43
|
+
(value[:count] < 0)
|
42
44
|
until (ri.count == 0) || (value[:count] == 0)
|
43
45
|
value[:count] = value[:count] + 1
|
44
46
|
ri.count = ri.count - 1
|
@@ -117,18 +119,18 @@ module SportNginAwsAuditor
|
|
117
119
|
differences
|
118
120
|
end
|
119
121
|
|
120
|
-
def add_additional_data(ris_region, instances_with_tag, ignored_instances, differences)
|
121
|
-
add_region_ris_to_hash(ris_region, differences)
|
122
|
+
def add_additional_data(ris_region, instances_with_tag, ignored_instances, differences, klass)
|
123
|
+
add_region_ris_to_hash(ris_region, differences, klass)
|
122
124
|
add_additional_instances_to_hash(instances_with_tag, differences, " with tag (")
|
123
125
|
add_additional_instances_to_hash(ignored_instances, differences, " ignored (")
|
124
126
|
return differences
|
125
127
|
end
|
126
128
|
|
127
|
-
def compare(instances, ignore_instances_regexes, client)
|
129
|
+
def compare(instances, ignore_instances_regexes, client, klass)
|
128
130
|
ignored_instances, instances_with_tag, instance_hash = sort_through_instances(instances, ignore_instances_regexes)
|
129
131
|
ris_region, ris_hash = sort_through_RIs(client)
|
130
132
|
differences = measure_differences(instance_hash, ris_hash)
|
131
|
-
add_additional_data(ris_region, instances_with_tag, ignored_instances, differences)
|
133
|
+
add_additional_data(ris_region, instances_with_tag, ignored_instances, differences, klass)
|
132
134
|
differences
|
133
135
|
end
|
134
136
|
|
@@ -203,5 +205,26 @@ module SportNginAwsAuditor
|
|
203
205
|
end
|
204
206
|
value
|
205
207
|
end
|
208
|
+
|
209
|
+
#################### HELPER METHODS ####################
|
210
|
+
|
211
|
+
# If the klass is EC2, then just make sure the instance platform includes the RI platform because
|
212
|
+
# classic RIs (non-VPC) are used on any instance.
|
213
|
+
#
|
214
|
+
# Instance | RI | Used?
|
215
|
+
# ----------|-----------|------
|
216
|
+
# Linux | Linux | Yes
|
217
|
+
# Linux | Linux VPC | No
|
218
|
+
# Linux VPC | Linux | Yes
|
219
|
+
# Linux VPC | Linux VPC | Yes
|
220
|
+
#
|
221
|
+
# If the klass is not EC2, then the platforms must match as normal.
|
222
|
+
def compare_platforms_based_on_klass(klass, platform, ri_platform)
|
223
|
+
if klass =~ /EC2/
|
224
|
+
platform.include?(ri_platform)
|
225
|
+
else
|
226
|
+
platform == ri_platform
|
227
|
+
end
|
228
|
+
end
|
206
229
|
end
|
207
230
|
end
|
@@ -74,30 +74,30 @@ module SportNginAwsAuditor
|
|
74
74
|
|
75
75
|
# Generates a name based on the RDS engine or product description
|
76
76
|
def engine_helper(engine)
|
77
|
-
case
|
78
|
-
when 'aurora'
|
77
|
+
case
|
78
|
+
when engine.downcase.include?('aurora')
|
79
79
|
'Aurora'
|
80
|
-
when 'mariadb'
|
80
|
+
when engine.downcase.include?('mariadb')
|
81
81
|
'MariaDB'
|
82
|
-
when 'mysql'
|
82
|
+
when engine.downcase.include?('mysql')
|
83
83
|
'MySQL'
|
84
|
-
when 'oracle-ee'
|
84
|
+
when engine.downcase.include?('oracle-ee')
|
85
85
|
'Oracle EE'
|
86
|
-
when 'oracle-
|
87
|
-
'Oracle SE'
|
88
|
-
when 'oracle-se1', 'oracle-se1(li)'
|
86
|
+
when engine.downcase.include?('oracle-se1')
|
89
87
|
'Oracle SE One'
|
90
|
-
when 'oracle-se2'
|
88
|
+
when engine.downcase.include?('oracle-se2')
|
91
89
|
'Oracle SE Two'
|
92
|
-
when '
|
90
|
+
when engine.downcase.include?('oracle-se')
|
91
|
+
'Oracle SE'
|
92
|
+
when engine.downcase.include?('postgres')
|
93
93
|
'PostgreSQL'
|
94
|
-
when 'sqlserver-ee'
|
94
|
+
when engine.downcase.include?('sqlserver-ee')
|
95
95
|
'SQL Server EE'
|
96
|
-
when 'sqlserver-ex'
|
96
|
+
when engine.downcase.include?('sqlserver-ex')
|
97
97
|
'SQL Server EX'
|
98
|
-
when 'sqlserver-se'
|
98
|
+
when engine.downcase.include?('sqlserver-se')
|
99
99
|
'SQL Server SE'
|
100
|
-
when 'sqlserver-web'
|
100
|
+
when engine.downcase.include?('sqlserver-web')
|
101
101
|
'SQL Server Web'
|
102
102
|
else
|
103
103
|
'Unknown DB Engine'
|
@@ -78,20 +78,20 @@ module SportNginAwsAuditor
|
|
78
78
|
|
79
79
|
def self.say_instances
|
80
80
|
@audit_results.data.each do |instance|
|
81
|
-
|
81
|
+
name_type = instance.type
|
82
82
|
count = instance.count
|
83
83
|
color, rgb, prefix = color_chooser({:instance => instance, :retired_ri => false, :retired_tag => false})
|
84
84
|
|
85
85
|
if instance.tagged?
|
86
86
|
if instance.reason
|
87
|
-
description = "#{prefix} #{
|
87
|
+
description = "#{prefix} #{name_type}: (expiring on #{instance.tag_value} because #{instance.reason})\n"
|
88
88
|
else
|
89
|
-
description = "#{prefix} #{
|
89
|
+
description = "#{prefix} #{name_type}: (expiring on #{instance.tag_value})\n"
|
90
90
|
end
|
91
91
|
elsif instance.ignored?
|
92
|
-
description = "#{prefix} #{
|
92
|
+
description = "#{prefix} #{name_type}\n"
|
93
93
|
else
|
94
|
-
description = "#{prefix} #{
|
94
|
+
description = "#{prefix} #{name_type}: #{count}\n"
|
95
95
|
end
|
96
96
|
|
97
97
|
@message << description.colorize(:color => color)
|
@@ -159,20 +159,20 @@ module SportNginAwsAuditor
|
|
159
159
|
@slack_message.attachments.push({"color" => "#32CD32", "text" => "All RIs are properly matched here!", "mrkdwn_in" => ["text"]})
|
160
160
|
else
|
161
161
|
data_array.each do |instance|
|
162
|
-
|
162
|
+
name_type = instance.type
|
163
163
|
count = instance.count
|
164
164
|
color, rgb, prefix = color_chooser({:instance => instance, :retired_ri => false, :retired_tag => false})
|
165
165
|
|
166
166
|
if instance.tagged?
|
167
167
|
if instance.reason
|
168
|
-
text = "#{prefix} #{
|
168
|
+
text = "#{prefix} #{name_type}: (expiring on #{instance.tag_value} because #{instance.reason})"
|
169
169
|
else
|
170
|
-
text = "#{prefix} #{
|
170
|
+
text = "#{prefix} #{name_type}: (expiring on #{instance.tag_value})"
|
171
171
|
end
|
172
172
|
elsif instance.ignored?
|
173
|
-
text = "#{prefix} #{
|
173
|
+
text = "#{prefix} #{name_type}"
|
174
174
|
else
|
175
|
-
text = "#{prefix} #{
|
175
|
+
text = "#{prefix} #{name_type}: #{count}"
|
176
176
|
end
|
177
177
|
|
178
178
|
@slack_message.attachments.push({"color" => rgb, "text" => text, "mrkdwn_in" => ["text"]})
|
@@ -228,8 +228,7 @@ module SportNginAwsAuditor
|
|
228
228
|
|
229
229
|
def self.gather_regions
|
230
230
|
regions = AWS.ec2.describe_regions[:regions]
|
231
|
-
|
232
|
-
us_regions.collect { |r| r.region_name }
|
231
|
+
regions.collect { |r| r.region_name }
|
233
232
|
end
|
234
233
|
|
235
234
|
def self.collect_options(environment, options, global_options)
|
@@ -135,7 +135,7 @@ module SportNginAwsAuditor
|
|
135
135
|
ris_count = ris.has_key?(key) ? ris[key][:count] : 0
|
136
136
|
differences[key] = {count: ris_count - instance_count, region_based: false}
|
137
137
|
end
|
138
|
-
result = klass.add_region_ris_to_hash(@region_reserved_instances, differences)
|
138
|
+
result = klass.add_region_ris_to_hash(@region_reserved_instances, differences, "EC2")
|
139
139
|
expect(differences).to eq({"Linux VPC us-east-1b t2.small"=>{count: 0, region_based: false}, "Windows us-east-1b t2.medium"=>{count: 0, region_based: false},
|
140
140
|
"Linux VPC t2.small" => {count: 2, region_based: true}, "Windows t2.medium" => {count: 4, region_based: true}})
|
141
141
|
end
|
@@ -147,7 +147,7 @@ module SportNginAwsAuditor
|
|
147
147
|
allow(@region_reserved_ec2_instance1).to receive(:count=)
|
148
148
|
allow(@region_reserved_ec2_instance2).to receive(:count=)
|
149
149
|
instance_hash = klass.instance_count_hash(@ec2_instances)
|
150
|
-
result = klass.add_region_ris_to_hash(@region_reserved_instances, instance_hash)
|
150
|
+
result = klass.add_region_ris_to_hash(@region_reserved_instances, instance_hash, "EC2")
|
151
151
|
expect(instance_hash).to eq({"Linux VPC us-east-1b t2.small"=>{count: 0, region_based: false}, "Windows us-east-1b t2.medium"=>{count: 5, region_based: false},
|
152
152
|
"Linux VPC t2.small" => {count: 2, region_based: true}, "Windows t2.medium" => {count: 4, region_based: true}})
|
153
153
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sport_ngin_aws_auditor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elliot Hursh
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2018-06-12 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: aws-sdk
|
@@ -271,7 +271,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
271
271
|
version: '0'
|
272
272
|
requirements: []
|
273
273
|
rubyforge_project:
|
274
|
-
rubygems_version: 2.
|
274
|
+
rubygems_version: 2.7.5
|
275
275
|
signing_key:
|
276
276
|
specification_version: 4
|
277
277
|
summary: AWS configuration as code
|