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 +4 -4
- data/CHANGELOG.markdown +5 -0
- data/lib/sport_ngin_aws_auditor/audit_data.rb +64 -0
- data/lib/sport_ngin_aws_auditor/instance_helper.rb +19 -2
- data/lib/sport_ngin_aws_auditor/recently_retired_tag.rb +12 -0
- data/lib/sport_ngin_aws_auditor/scripts/audit.rb +56 -51
- data/lib/sport_ngin_aws_auditor/version.rb +1 -1
- data/spec/sport_ngin_aws_auditor/audit_data_spec.rb +141 -0
- data/spec/sport_ngin_aws_auditor/recently_retired_tag_spec.rb +15 -0
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9420e3fde54aac536e36c97eef5a8a1fdf33eac7
|
4
|
+
data.tar.gz: 5768c1734e3db6feaa33176526f4ec5f91b5528c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 56209e4afd417d46fab66f048092912c384f4a24fa27c5c6e36b60583ad29caa52e69b0aa89e55935b2fa34410879ee100b3d5a640af3c6e040a334f8cbfb919
|
7
|
+
data.tar.gz: 46ba9993be65f4367016122e32988c69bf34850f799f26e69a4ac1d7aea4b7ceb6f690655198d8bcf31cc8d5e6ebd31e6d1017481cf35fb3090cd175eddbfd30
|
data/CHANGELOG.markdown
CHANGED
@@ -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(
|
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
|
-
|
38
|
-
|
39
|
-
|
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.
|
45
|
-
|
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(
|
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
|
-
|
80
|
-
|
81
|
-
|
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(
|
81
|
+
def self.print_to_slack(audit_results, class_type, environment)
|
94
82
|
discrepancy_array = []
|
95
83
|
|
96
|
-
|
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,
|
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,
|
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
|
-
|
123
|
-
|
110
|
+
retired_ris = audit_results.retired_ris
|
111
|
+
retired_tags = audit_results.retired_tags
|
124
112
|
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
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
|
-
|
133
|
-
|
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)
|
@@ -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.
|
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-
|
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
|