sport_ngin_aws_auditor 3.6.0 → 3.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 073cee3003356deb0134ca9da9b30f840114e29d
4
- data.tar.gz: 9bf761c1afd8c271c1d99bafcbdf8aa26d01d49c
3
+ metadata.gz: 9420e3fde54aac536e36c97eef5a8a1fdf33eac7
4
+ data.tar.gz: 5768c1734e3db6feaa33176526f4ec5f91b5528c
5
5
  SHA512:
6
- metadata.gz: 53e5ece55ea759b443d8bd965a22bc0413ba3934051bd1eb14d075e22945a31a6a6239a194d0617d078336640ae369f7f8f5555eee67506cf121cfe6483e796e
7
- data.tar.gz: a97b0d51779933df9e489164d81ed85eeed70b0b29dae2bc2d522270cb29a9b071d650eec86bea943f5062930a17f437e256a5809bbb9905e7057174cd3a9ee6
6
+ metadata.gz: 56209e4afd417d46fab66f048092912c384f4a24fa27c5c6e36b60583ad29caa52e69b0aa89e55935b2fa34410879ee100b3d5a640af3c6e040a334f8cbfb919
7
+ data.tar.gz: 46ba9993be65f4367016122e32988c69bf34850f799f26e69a4ac1d7aea4b7ceb6f690655198d8bcf31cc8d5e6ebd31e6d1017481cf35fb3090cd175eddbfd30
data/CHANGELOG.markdown CHANGED
@@ -1,3 +1,8 @@
1
+ #### v3.7.0
2
+ * Print retired tags into slack/terminal on audit
3
+
4
+ > Emma Sax: Brian Bergstrom: https://github.com/sportngin/sport_ngin_aws_auditor/pull/17
5
+
1
6
  #### v3.6.0
2
7
  * Print reserved instances that have retired in past week
3
8
 
@@ -0,0 +1,64 @@
1
+ require_relative './instance_helper'
2
+
3
+ module SportNginAwsAuditor
4
+ class AuditData
5
+
6
+ attr_accessor :data, :retired_tags, :retired_ris, :selected_audit_type, :klass, :tag_name
7
+ def initialize(instances, reserved, class_type, tag_name)
8
+ self.selected_audit_type = (!instances && !reserved) ? "all" : (instances ? "instances" : "reserved")
9
+ self.klass = SportNginAwsAuditor.const_get(class_type)
10
+ self.tag_name = tag_name
11
+ end
12
+
13
+ def instances?
14
+ self.selected_audit_type == "instances"
15
+ end
16
+
17
+ def reserved?
18
+ self.selected_audit_type == "reserved"
19
+ end
20
+
21
+ def all?
22
+ self.selected_audit_type == "all"
23
+ end
24
+
25
+ def gather_data
26
+ if instances?
27
+ instance_hash, retired_tags = gather_instances_data
28
+ elsif reserved?
29
+ instance_hash = self.klass.instance_count_hash(self.klass.get_reserved_instances)
30
+ elsif all?
31
+ instance_hash, retired_tags, retired_ris = gather_all_data
32
+ end
33
+
34
+ compared_array = []
35
+ instance_hash.each do |key, value|
36
+ compared_array.push(Instance.new(key, value))
37
+ end
38
+
39
+ self.data = compared_array
40
+ self.retired_ris = retired_ris
41
+ self.retired_tags = retired_tags
42
+ end
43
+
44
+ def gather_instances_data
45
+ instances = self.klass.get_instances(tag_name)
46
+ retired_tags = self.klass.get_retired_tags(instances)
47
+ instances_with_tag = self.klass.filter_instances_with_tags(instances)
48
+ instances_without_tag = self.klass.filter_instance_without_tags(instances)
49
+ instance_hash = self.klass.instance_count_hash(instances_without_tag)
50
+ self.klass.add_instances_with_tag_to_hash(instances_with_tag, instance_hash)
51
+
52
+ return instance_hash, retired_tags
53
+ end
54
+
55
+ def gather_all_data
56
+ instances = self.klass.get_instances(tag_name)
57
+ retired_tags = self.klass.get_retired_tags(instances)
58
+ instance_hash = self.klass.compare(instances)
59
+ retired_ris = self.klass.get_recent_retired_reserved_instances
60
+
61
+ return instance_hash, retired_tags, retired_ris
62
+ end
63
+ end
64
+ end
@@ -1,3 +1,6 @@
1
+ require_relative './recently_retired_tag'
2
+ require_relative './audit_data'
3
+
1
4
  module SportNginAwsAuditor
2
5
  module InstanceHelper
3
6
 
@@ -27,9 +30,8 @@ module SportNginAwsAuditor
27
30
  instance_hash
28
31
  end
29
32
 
30
- def compare(tag_name)
33
+ def compare(instances)
31
34
  differences = Hash.new()
32
- instances = get_instances(tag_name)
33
35
  instances_with_tag = filter_instances_with_tags(instances)
34
36
  instances_without_tag = filter_instance_without_tags(instances)
35
37
  instance_hash = instance_count_hash(instances_without_tag)
@@ -69,6 +71,21 @@ module SportNginAwsAuditor
69
71
  end
70
72
  end
71
73
 
74
+ # this returns a hash of all instances that have retired between 1 week ago and today
75
+ def get_retired_tags(instances)
76
+ return_array = []
77
+
78
+ instances.select do |instance|
79
+ value = gather_instance_tag_date(instance)
80
+ one_week_ago = (Date.today - 7).to_s
81
+ if (value && (one_week_ago < value.to_s) && (value.to_s < Date.today.to_s))
82
+ return_array << RecentlyRetiredTag.new(value.to_s, instance.to_s)
83
+ end
84
+ end
85
+
86
+ return_array
87
+ end
88
+
72
89
  def gather_instance_tag_date(instance)
73
90
  value = instance.no_reserved_instance_tag_value
74
91
  unless value.nil?
@@ -0,0 +1,12 @@
1
+ require_relative './instance_helper'
2
+
3
+ module SportNginAwsAuditor
4
+ class RecentlyRetiredTag
5
+
6
+ attr_accessor :value, :instance_name
7
+ def initialize(tag_value, instance_name)
8
+ self.value = tag_value
9
+ self.instance_name = instance_name
10
+ end
11
+ end
12
+ end
@@ -1,6 +1,7 @@
1
1
  require 'highline/import'
2
2
  require_relative "../notify_slack"
3
3
  require_relative "../instance"
4
+ require_relative "../audit_data"
4
5
 
5
6
  module SportNginAwsAuditor
6
7
  module Scripts
@@ -34,55 +35,42 @@ module SportNginAwsAuditor
34
35
  end
35
36
 
36
37
  cycle.each do |c|
37
- all_data = gather_data(c.first, tag_name) if (c.last || no_selection)
38
- data = all_data.first unless all_data.nil?
39
- retired_reserved_instances = all_data.last if (all_data.length == 2 && !all_data.nil?)
40
- print_data(slack, environment, data, retired_reserved_instances, c.first) if (c.last || no_selection)
38
+ audit_results = AuditData.new(options[:instances], options[:reserved], c.first, tag_name)
39
+ audit_results.gather_data
40
+ print_data(slack, audit_results, c.first, environment) if (c.last || no_selection)
41
41
  end
42
42
  end
43
43
 
44
- def self.gather_data(class_type, tag_name)
45
- klass = SportNginAwsAuditor.const_get(class_type)
46
-
47
- if options[:instances]
48
- instances = klass.get_instances(tag_name)
49
- instances_with_tag = klass.filter_instances_with_tags(instances)
50
- instances_without_tag = klass.filter_instance_without_tags(instances)
51
- instance_hash = klass.instance_count_hash(instances_without_tag)
52
- klass.add_instances_with_tag_to_hash(instances_with_tag, instance_hash)
53
- elsif options[:reserved]
54
- instance_hash = klass.instance_count_hash(klass.get_reserved_instances)
55
- else
56
- instance_hash = klass.compare(tag_name)
57
- retired_reserved_instances = klass.get_recent_retired_reserved_instances
58
- end
59
-
60
- compared_array = []
61
- instance_hash.each do |key, value|
62
- compared_array.push(Instance.new(key, value))
63
- end
64
-
65
- [compared_array, retired_reserved_instances]
66
- end
67
-
68
- def self.print_data(slack, environment, data, retired_reserved_instances, class_type)
69
- data.sort_by! { |instance| [instance.type, instance.name] }
44
+ def self.print_data(slack, audit_results, class_type, environment)
45
+ audit_results.data.sort_by! { |instance| [instance.type, instance.name] }
70
46
 
71
47
  if slack
72
- print_to_slack(data, retired_reserved_instances, class_type, environment)
48
+ print_to_slack(audit_results, class_type, environment)
73
49
  elsif options[:reserved] || options[:instances]
74
50
  puts header(class_type)
75
- data.each{ |instance| say "<%= color('#{instance.name}: #{instance.count}', :white) %>" }
51
+ audit_results.data.each{ |instance| say "<%= color('#{instance.name}: #{instance.count}', :white) %>" }
76
52
  else
53
+ retired_ris = audit_results.retired_ris
54
+ retired_tags = audit_results.retired_tags
55
+
77
56
  puts header(class_type)
78
- data.each{ |instance| colorize(instance) }
79
- unless retired_reserved_instances.empty?
80
- say "The following reserved #{class_type}Instance have recently expired in #{environment}:"
81
- retired_reserved_instances.each { |ri| say "#{ri.to_s} (#{ri.count}) on #{ri.expiration_date}"}
82
- end
57
+ audit_results.data.each{ |instance| colorize(instance) }
58
+
59
+ say_retired_ris(retired_ris, class_type, environment) unless retired_ris.empty?
60
+ say_retired_tags(retired_tags, class_type, environment) unless retired_tags.empty?
83
61
  end
84
62
  end
85
63
 
64
+ def self.say_retired_ris(retired_ris, class_type, environment)
65
+ say "The following reserved #{class_type}Instances have recently expired in #{environment}:"
66
+ retired_ris.each { |ri| say "#{ri.to_s} (#{ri.count}) on #{ri.expiration_date}" }
67
+ end
68
+
69
+ def self.say_retired_tags(retired_tags, class_type, environment)
70
+ say "The following #{class_type}Instance tags have recently expired in #{environment}:"
71
+ retired_tags.each { |tag| say "#{tag.instance_name} on #{tag.value}" }
72
+ end
73
+
86
74
  def self.colorize(instance)
87
75
  name = instance.name
88
76
  count = instance.count
@@ -90,10 +78,10 @@ module SportNginAwsAuditor
90
78
  say "<%= color('#{name}: #{count}', :#{color}) %>"
91
79
  end
92
80
 
93
- def self.print_to_slack(instances_array, retired_instances_array, class_type, environment)
81
+ def self.print_to_slack(audit_results, class_type, environment)
94
82
  discrepancy_array = []
95
83
 
96
- instances_array.each do |instance|
84
+ audit_results.data.each do |instance|
97
85
  unless instance.matched?
98
86
  discrepancy_array.push(instance)
99
87
  end
@@ -102,11 +90,11 @@ module SportNginAwsAuditor
102
90
  true_discrepancies = discrepancy_array.reject{ |instance| instance.tagged? }
103
91
 
104
92
  unless true_discrepancies.empty?
105
- print_discrepancies(discrepancy_array, retired_instances_array, class_type, environment)
93
+ print_discrepancies(discrepancy_array, audit_results, class_type, environment)
106
94
  end
107
95
  end
108
96
 
109
- def self.print_discrepancies(discrepancy_array, retired_instances_array, class_type, environment)
97
+ def self.print_discrepancies(discrepancy_array, audit_results, class_type, environment)
110
98
  title = "Some #{class_type} discrepancies for #{environment} exist:\n"
111
99
  slack_instances = NotifySlack.new(title)
112
100
 
@@ -119,19 +107,36 @@ module SportNginAwsAuditor
119
107
 
120
108
  slack_instances.perform
121
109
 
122
- unless retired_instances_array.empty?
123
- message = "The following reserved #{class_type} have recently expired in #{environment}:\n"
110
+ retired_ris = audit_results.retired_ris
111
+ retired_tags = audit_results.retired_tags
124
112
 
125
- retired_instances_array.each do |ri|
126
- name = ri.to_s
127
- count = ri.count
128
- expiration_date = ri.expiration_date
129
- message << "*#{name}* (#{count}) on *#{expiration_date}*\n"
130
- end
113
+ print_retired_ris(retired_ris, class_type, environment) unless retired_ris.empty?
114
+ print_retired_tags(retired_tags, class_type, environment) unless retired_tags.empty?
115
+ end
116
+
117
+ def self.print_retired_ris(retired_ris, class_type, environment)
118
+ message = "The following reserved #{class_type}s have recently expired in #{environment}:\n"
119
+
120
+ retired_ris.each do |ri|
121
+ name = ri.to_s
122
+ count = ri.count
123
+ expiration_date = ri.expiration_date
124
+ message << "*#{name}* (#{count}) on *#{expiration_date}*\n"
125
+ end
131
126
 
132
- slack_retired_instances = NotifySlack.new(message)
133
- slack_retired_instances.perform
127
+ slack_retired_ris = NotifySlack.new(message)
128
+ slack_retired_ris.perform
129
+ end
130
+
131
+ def self.print_retired_tags(retired_tags, class_type, environment)
132
+ message = "The following #{class_type} tags have recently expired in #{environment}:\n"
133
+
134
+ retired_tags.each do |tag|
135
+ message << "*#{tag.instance_name}* on *#{tag.value}*\n"
134
136
  end
137
+
138
+ slack_retired_tags = NotifySlack.new(message)
139
+ slack_retired_tags.perform
135
140
  end
136
141
 
137
142
  def self.color_chooser(instance)
@@ -1,3 +1,3 @@
1
1
  module SportNginAwsAuditor
2
- VERSION = "3.6.0"
2
+ VERSION = "3.7.0"
3
3
  end
@@ -0,0 +1,141 @@
1
+ require "sport_ngin_aws_auditor"
2
+
3
+ module SportNginAwsAuditor
4
+ describe AuditData do
5
+ before :each do
6
+ @instance = double('instance')
7
+ @instance1 = double('ec2_instance1')
8
+ @instance2 = double('ec2_instance2')
9
+ @instance3 = double('ec2_instance3')
10
+ @instance4 = double('ec2_instance4')
11
+ @ec2_instances = [@instance1, @instance2]
12
+ @retired_ris = [@instance3, @instance4]
13
+ allow(SportNginAwsAuditor::EC2Instance).to receive(:get_instances).and_return(@ec2_instances)
14
+ allow(SportNginAwsAuditor::EC2Instance).to receive(:get_reserved_instances).and_return(@ec2_instances)
15
+ allow(SportNginAwsAuditor::EC2Instance).to receive(:get_retired_tags).and_return([])
16
+ allow(SportNginAwsAuditor::EC2Instance).to receive(:filter_instances_with_tags).and_return([])
17
+ allow(SportNginAwsAuditor::EC2Instance).to receive(:filter_instance_without_tags).and_return(@ec2_instances)
18
+ allow(SportNginAwsAuditor::EC2Instance).to receive(:instance_count_hash).and_return({'instance1' => 1,
19
+ 'instance2' => 1})
20
+ allow(SportNginAwsAuditor::EC2Instance).to receive(:add_instances_with_tag_to_hash).and_return({'instance1' => 1,
21
+ 'instance2' => 1})
22
+ allow(SportNginAwsAuditor::EC2Instance).to receive(:compare).and_return({'instance1' => 1,
23
+ 'instance2' => 1})
24
+ allow(SportNginAwsAuditor::EC2Instance).to receive(:get_recent_retired_reserved_instances).and_return(@retired_ris)
25
+ allow(Instance).to receive(:new).and_return(@instance)
26
+ end
27
+
28
+ context '#initialization' do
29
+ it 'should gather instance data' do
30
+ audit_results = AuditData.new(true, false, "EC2Instance", "no-reserved-instance")
31
+ expect(audit_results.selected_audit_type).to eq("instances")
32
+ end
33
+
34
+ it 'should gather reserved instance data' do
35
+ audit_results = AuditData.new(false, true, "EC2Instance", "no-reserved-instance")
36
+ expect(audit_results.selected_audit_type).to eq("reserved")
37
+ end
38
+
39
+ it 'should by default gather instance data' do
40
+ audit_results = AuditData.new(true, true, "EC2Instance", "no-reserved-instance")
41
+ expect(audit_results.selected_audit_type).to eq("instances")
42
+ end
43
+
44
+ it 'should gather all data to compare' do
45
+ audit_results = AuditData.new(false, false, "EC2Instance", "no-reserved-instance")
46
+ expect(audit_results.selected_audit_type).to eq("all")
47
+ end
48
+
49
+ it 'should use EC2Instance class' do
50
+ audit_results = AuditData.new(false, false, "EC2Instance", "no-reserved-instance")
51
+ expect(audit_results.klass).to eq(SportNginAwsAuditor::EC2Instance)
52
+ end
53
+
54
+ it 'should use EC2Instance class' do
55
+ audit_results = AuditData.new(false, false, "EC2Instance", "no-reserved-instance")
56
+ expect(audit_results.tag_name).to eq("no-reserved-instance")
57
+ end
58
+ end
59
+
60
+ context '#instances?' do
61
+ it 'should return true' do
62
+ audit_results = AuditData.new(true, false, "EC2Instance", "no-reserved-instance")
63
+ expect(audit_results.instances?).to eq(true)
64
+ end
65
+
66
+ it 'should return true' do
67
+ audit_results = AuditData.new(false, true, "EC2Instance", "no-reserved-instance")
68
+ expect(audit_results.instances?).to eq(false)
69
+ end
70
+ end
71
+
72
+ context '#reserved?' do
73
+ it 'should return true' do
74
+ audit_results = AuditData.new(true, false, "EC2Instance", "no-reserved-instance")
75
+ expect(audit_results.reserved?).to eq(false)
76
+ end
77
+
78
+ it 'should return true' do
79
+ audit_results = AuditData.new(false, true, "EC2Instance", "no-reserved-instance")
80
+ expect(audit_results.reserved?).to eq(true)
81
+ end
82
+ end
83
+
84
+ context '#all?' do
85
+ it 'should return true' do
86
+ audit_results = AuditData.new(true, false, "EC2Instance", "no-reserved-instance")
87
+ expect(audit_results.all?).to eq(false)
88
+ end
89
+
90
+ it 'should return true' do
91
+ audit_results = AuditData.new(false, false, "EC2Instance", "no-reserved-instance")
92
+ expect(audit_results.all?).to eq(true)
93
+ end
94
+ end
95
+
96
+ context '#gather_data' do
97
+ it 'should gather some empty results by comparison' do
98
+ audit_results = AuditData.new(false, false, "EC2Instance", "no-reserved-instance")
99
+ audit_results.gather_data
100
+ expect(audit_results.data).to eq([@instance, @instance])
101
+ expect(audit_results.retired_tags).to eq([])
102
+ expect(audit_results.retired_ris).to eq(@retired_ris)
103
+ end
104
+
105
+ it 'should gather some empty results from just instances' do
106
+ audit_results = AuditData.new(true, false, "EC2Instance", "no-reserved-instance")
107
+ audit_results.gather_data
108
+ expect(audit_results.data).to eq([@instance, @instance])
109
+ expect(audit_results.retired_tags).to eq([])
110
+ expect(audit_results.retired_ris).to eq(nil)
111
+ end
112
+
113
+ it 'should gather some empty results from just reserved' do
114
+ audit_results = AuditData.new(false, true, "EC2Instance", "no-reserved-instance")
115
+ audit_results.gather_data
116
+ expect(audit_results.data).to eq([@instance, @instance])
117
+ expect(audit_results.retired_tags).to eq(nil)
118
+ expect(audit_results.retired_ris).to eq(nil)
119
+ end
120
+ end
121
+
122
+ context '#gather_instances_data' do
123
+ it 'should gather some instances data but not convert' do
124
+ audit_results = AuditData.new(true, false, "EC2Instance", "no-reserved-instance")
125
+ result1, result2 = audit_results.gather_instances_data
126
+ expect(result1).to eq({'instance1' => 1, 'instance2' => 1})
127
+ expect(result2).to eq([])
128
+ end
129
+ end
130
+
131
+ context '#gather_all_data' do
132
+ it 'should gather some comparison data but not convert' do
133
+ audit_results = AuditData.new(false, false, "EC2Instance", "no-reserved-instance")
134
+ result1, result2, result3 = audit_results.gather_all_data
135
+ expect(result1).to eq({'instance1' => 1, 'instance2' => 1})
136
+ expect(result2).to eq([])
137
+ expect(result3).to eq(@retired_ris)
138
+ end
139
+ end
140
+ end
141
+ end
@@ -0,0 +1,15 @@
1
+ require "sport_ngin_aws_auditor"
2
+
3
+ module SportNginAwsAuditor
4
+ describe RecentlyRetiredTag do
5
+ it 'should have an instance name as an instance_name' do
6
+ tag = RecentlyRetiredTag.new('09/01/2000', 'Linux VPC us-east-1b t2.small')
7
+ expect(tag.instance_name).to eq('Linux VPC us-east-1b t2.small')
8
+ end
9
+
10
+ it 'should have a string date as a value' do
11
+ tag = RecentlyRetiredTag.new('09/01/2000', 'Linux VPC us-east-1b t2.small')
12
+ expect(tag.value).to eq('09/01/2000')
13
+ end
14
+ end
15
+ 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: 3.6.0
4
+ version: 3.7.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: 2016-08-26 00:00:00.000000000 Z
13
+ date: 2016-09-14 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: aws-sdk
@@ -204,6 +204,7 @@ files:
204
204
  - Rakefile
205
205
  - bin/sport-ngin-aws-auditor
206
206
  - lib/sport_ngin_aws_auditor.rb
207
+ - lib/sport_ngin_aws_auditor/audit_data.rb
207
208
  - lib/sport_ngin_aws_auditor/aws.rb
208
209
  - lib/sport_ngin_aws_auditor/cache_instance.rb
209
210
  - lib/sport_ngin_aws_auditor/commands/audit.rb
@@ -219,12 +220,14 @@ files:
219
220
  - lib/sport_ngin_aws_auditor/notify_slack.rb
220
221
  - lib/sport_ngin_aws_auditor/output.rb
221
222
  - lib/sport_ngin_aws_auditor/rds_instance.rb
223
+ - lib/sport_ngin_aws_auditor/recently_retired_tag.rb
222
224
  - lib/sport_ngin_aws_auditor/scripts/audit.rb
223
225
  - lib/sport_ngin_aws_auditor/scripts/export.rb
224
226
  - lib/sport_ngin_aws_auditor/scripts/inspect.rb
225
227
  - lib/sport_ngin_aws_auditor/stack.rb
226
228
  - lib/sport_ngin_aws_auditor/version.rb
227
229
  - spec/spec_helper.rb
230
+ - spec/sport_ngin_aws_auditor/audit_data_spec.rb
228
231
  - spec/sport_ngin_aws_auditor/aws_spec.rb
229
232
  - spec/sport_ngin_aws_auditor/cache_instance_spec.rb
230
233
  - spec/sport_ngin_aws_auditor/config_spec.rb
@@ -232,6 +235,7 @@ files:
232
235
  - spec/sport_ngin_aws_auditor/instance_spec.rb
233
236
  - spec/sport_ngin_aws_auditor/notify_slack_spec.rb
234
237
  - spec/sport_ngin_aws_auditor/rds_instance_spec.rb
238
+ - spec/sport_ngin_aws_auditor/recently_retired_tag_spec.rb
235
239
  - sport_ngin_aws_auditor.gemspec
236
240
  homepage: https://github.com/sportngin/sport_ngin_aws_auditor
237
241
  licenses:
@@ -259,6 +263,7 @@ specification_version: 4
259
263
  summary: AWS configuration as code
260
264
  test_files:
261
265
  - spec/spec_helper.rb
266
+ - spec/sport_ngin_aws_auditor/audit_data_spec.rb
262
267
  - spec/sport_ngin_aws_auditor/aws_spec.rb
263
268
  - spec/sport_ngin_aws_auditor/cache_instance_spec.rb
264
269
  - spec/sport_ngin_aws_auditor/config_spec.rb
@@ -266,3 +271,4 @@ test_files:
266
271
  - spec/sport_ngin_aws_auditor/instance_spec.rb
267
272
  - spec/sport_ngin_aws_auditor/notify_slack_spec.rb
268
273
  - spec/sport_ngin_aws_auditor/rds_instance_spec.rb
274
+ - spec/sport_ngin_aws_auditor/recently_retired_tag_spec.rb