sport_ngin_aws_auditor 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +20 -0
  3. data/.octopolo.yml +4 -0
  4. data/.rspec +2 -0
  5. data/.ruby-gemset +1 -0
  6. data/.ruby-version +1 -0
  7. data/.soyuz.yml +13 -0
  8. data/.travis.yml +13 -0
  9. data/CHANGELOG.markdown +30 -0
  10. data/Gemfile +4 -0
  11. data/LICENSE.txt +22 -0
  12. data/README.md +103 -0
  13. data/Rakefile +2 -0
  14. data/bin/sport-ngin-aws-auditor +27 -0
  15. data/lib/sport_ngin_aws_auditor/aws.rb +44 -0
  16. data/lib/sport_ngin_aws_auditor/cache_instance.rb +69 -0
  17. data/lib/sport_ngin_aws_auditor/commands/audit.rb +17 -0
  18. data/lib/sport_ngin_aws_auditor/commands/export.rb +11 -0
  19. data/lib/sport_ngin_aws_auditor/commands/inspect.rb +12 -0
  20. data/lib/sport_ngin_aws_auditor/config.rb +51 -0
  21. data/lib/sport_ngin_aws_auditor/convenience_wrappers.rb +59 -0
  22. data/lib/sport_ngin_aws_auditor/ec2_instance.rb +119 -0
  23. data/lib/sport_ngin_aws_auditor/google.rb +62 -0
  24. data/lib/sport_ngin_aws_auditor/google_sheet.rb +80 -0
  25. data/lib/sport_ngin_aws_auditor/instance_helper.rb +71 -0
  26. data/lib/sport_ngin_aws_auditor/notify_slack.rb +31 -0
  27. data/lib/sport_ngin_aws_auditor/output.rb +13 -0
  28. data/lib/sport_ngin_aws_auditor/rds_instance.rb +78 -0
  29. data/lib/sport_ngin_aws_auditor/scripts/audit.rb +124 -0
  30. data/lib/sport_ngin_aws_auditor/scripts/export.rb +146 -0
  31. data/lib/sport_ngin_aws_auditor/scripts/inspect.rb +44 -0
  32. data/lib/sport_ngin_aws_auditor/stack.rb +63 -0
  33. data/lib/sport_ngin_aws_auditor/version.rb +3 -0
  34. data/lib/sport_ngin_aws_auditor.rb +14 -0
  35. data/spec/spec_helper.rb +45 -0
  36. data/spec/sport_ngin_aws_auditor/aws_spec.rb +48 -0
  37. data/spec/sport_ngin_aws_auditor/cache_instance_spec.rb +125 -0
  38. data/spec/sport_ngin_aws_auditor/config_spec.rb +44 -0
  39. data/spec/sport_ngin_aws_auditor/ec2_instance_spec.rb +181 -0
  40. data/spec/sport_ngin_aws_auditor/notify_slack_spec.rb +33 -0
  41. data/spec/sport_ngin_aws_auditor/rds_instance_spec.rb +140 -0
  42. data/sport_ngin_aws_auditor.gemspec +33 -0
  43. metadata +251 -0
@@ -0,0 +1,140 @@
1
+ require "sport_ngin_aws_auditor"
2
+
3
+ module SportNginAwsAuditor
4
+ describe RDSInstance do
5
+
6
+ before :each do
7
+ identity = double('identity', account: 123456789)
8
+ client = double('client', get_caller_identity: identity)
9
+ allow(Aws::STS::Client).to receive(:new).and_return(client)
10
+ end
11
+
12
+ after :each do
13
+ RDSInstance.instance_variable_set("@instances", nil)
14
+ RDSInstance.instance_variable_set("@reserved_instances", nil)
15
+ end
16
+
17
+ context "for normal rds_instances" do
18
+ before :each do
19
+ rds_instance1 = double('rds_instance', db_instance_identifier: "our-service",
20
+ multi_az: false,
21
+ db_instance_class: "db.t2.small",
22
+ db_instance_status: "available",
23
+ engine: "mysql",
24
+ availability_zone: "us-east-1a",
25
+ class: "Aws::RDS::Types::DBInstance")
26
+ rds_instance2 = double('rds_instance', db_instance_identifier: "our-service",
27
+ multi_az: false,
28
+ db_instance_class: "db.m3.large",
29
+ db_instance_status: "available",
30
+ engine: "mysql",
31
+ availability_zone: "us-east-1a",
32
+ class: "Aws::RDS::Types::DBInstance")
33
+ db_instances = double('db_instances', db_instances: [rds_instance1, rds_instance2])
34
+ tag1 = double('tag', key: "cookie", value: "chocolate chip")
35
+ tag2 = double('tag', key: "ice cream", value: "oreo")
36
+ tags = double('tags', tag_list: [tag1, tag2])
37
+ rds_client = double('rds_client', describe_db_instances: db_instances, list_tags_for_resource: tags)
38
+ allow(RDSInstance).to receive(:rds).and_return(rds_client)
39
+ end
40
+
41
+ it "should make a rds_instance for each instance" do
42
+ instances = RDSInstance::get_instances("tag_name")
43
+ expect(instances.first).to be_an_instance_of(RDSInstance)
44
+ expect(instances.last).to be_an_instance_of(RDSInstance)
45
+ end
46
+
47
+ it "should return an array of rds_instances" do
48
+ instances = RDSInstance::get_instances("tag_name")
49
+ expect(instances).not_to be_empty
50
+ expect(instances.length).to eq(2)
51
+ end
52
+
53
+ it "should have proper variables set" do
54
+ instances = RDSInstance::get_instances("tag_name")
55
+ instance = instances.first
56
+ expect(instance.id).to eq("our-service")
57
+ expect(instance.multi_az).to eq("Single-AZ")
58
+ expect(instance.instance_type).to eq("db.t2.small")
59
+ expect(instance.engine).to eq("mysql")
60
+ end
61
+ end
62
+
63
+ context "for reserved_rds_instances" do
64
+ before :each do
65
+ reserved_rds_instance1 = double('reserved_rds_instance', reserved_db_instances_offering_id: "555te4yy-1234-555c-5678-thisisafake!!",
66
+ multi_az: false,
67
+ db_instance_class: "db.t2.small",
68
+ state: "active",
69
+ product_description: "mysql",
70
+ class: "Aws::RDS::Types::ReservedDBInstance")
71
+ reserved_rds_instance2 = double('reserved_rds_instance', reserved_db_instances_offering_id: "555te4yy-1234-555c-5678-thisisafake!!",
72
+ multi_az: false,
73
+ db_instance_class: "db.m3.large",
74
+ state: "active",
75
+ product_description: "postgresql",
76
+ class: "Aws::RDS::Types::ReservedDBInstance")
77
+ reserved_db_instances = double('db_instances', reserved_db_instances: [reserved_rds_instance1, reserved_rds_instance2])
78
+ rds_client = double('rds_client', describe_reserved_db_instances: reserved_db_instances)
79
+ allow(RDSInstance).to receive(:rds).and_return(rds_client)
80
+ end
81
+
82
+ it "should make a reserved_rds_instance for each instance" do
83
+ reserved_instances = RDSInstance::get_reserved_instances
84
+ expect(reserved_instances.first).to be_an_instance_of(RDSInstance)
85
+ expect(reserved_instances.last).to be_an_instance_of(RDSInstance)
86
+ end
87
+
88
+ it "should return an array of reserved_rds_instances" do
89
+ reserved_instances = RDSInstance::get_reserved_instances
90
+ expect(reserved_instances).not_to be_empty
91
+ expect(reserved_instances.length).to eq(2)
92
+ end
93
+
94
+ it "should have proper variables set" do
95
+ reserved_instances = RDSInstance::get_reserved_instances
96
+ reserved_instance = reserved_instances.first
97
+ expect(reserved_instance.id).to eq("555te4yy-1234-555c-5678-thisisafake!!")
98
+ expect(reserved_instance.multi_az).to eq("Single-AZ")
99
+ expect(reserved_instance.instance_type).to eq("db.t2.small")
100
+ expect(reserved_instance.engine).to eq("mysql")
101
+ end
102
+ end
103
+
104
+ context "for returning pretty string formats" do
105
+ it "should return a string version of the name of the reserved_rds_instance" do
106
+ reserved_rds_instance = double('reserved_rds_instance', reserved_db_instances_offering_id: "555te4yy-1234-555c-5678-thisisafake!!",
107
+ multi_az: false,
108
+ db_instance_class: "db.t2.small",
109
+ state: "active",
110
+ product_description: "mysql",
111
+ class: "Aws::RDS::Types::ReservedDBInstance")
112
+ reserved_db_instances = double('db_instances', reserved_db_instances: [reserved_rds_instance])
113
+ rds_client = double('rds_client', describe_reserved_db_instances: reserved_db_instances)
114
+ allow(RDSInstance).to receive(:rds).and_return(rds_client)
115
+ reserved_instances = RDSInstance::get_reserved_instances
116
+ reserved_instance = reserved_instances.first
117
+ expect(reserved_instance.to_s).to eq("MySQL Single-AZ db.t2.small")
118
+ end
119
+
120
+ it "should return a string version of the name of the rds_instance" do
121
+ rds_instance = double('rds_instance', db_instance_identifier: "our-service",
122
+ multi_az: false,
123
+ db_instance_class: "db.t2.small",
124
+ db_instance_status: "available",
125
+ engine: "postgresql",
126
+ availability_zone: "us-east-1a",
127
+ class: "Aws::RDS::Types::DBInstance")
128
+ db_instances = double('db_instances', db_instances: [rds_instance])
129
+ tag1 = double('tag', key: "cookie", value: "chocolate chip")
130
+ tag2 = double('tag', key: "ice cream", value: "oreo")
131
+ tags = double('tags', tag_list: [tag1, tag2])
132
+ rds_client = double('rds_client', describe_db_instances: db_instances, list_tags_for_resource: tags)
133
+ allow(RDSInstance).to receive(:rds).and_return(rds_client)
134
+ instances = RDSInstance::get_instances("tag_name")
135
+ instance = instances.first
136
+ expect(instance.to_s).to eq("PostgreSQL Single-AZ db.t2.small")
137
+ end
138
+ end
139
+ end
140
+ end
@@ -0,0 +1,33 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'sport_ngin_aws_auditor/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "sport_ngin_aws_auditor"
8
+ spec.version = SportNginAwsAuditor::VERSION
9
+ spec.authors = ["Elliot Hursh", "Emma Sax", "Brian Bergstrom"]
10
+ spec.email = ["elliothursh@gmail.com", "emma.sax4@gmail.com", "brian.bergstrom@sportngin.com"]
11
+ spec.summary = %q{AWS configuration as code}
12
+ spec.description = %q{Helps with AWS configuration}
13
+ spec.homepage = "https://github.com/sportngin/sport_ngin_aws_auditor"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency 'aws-sdk', '~>2'
22
+ spec.add_dependency 'hashie', '~> 3.3'
23
+ spec.add_dependency 'gli', '~> 2.10'
24
+ spec.add_dependency 'highline', '~> 1.6'
25
+ spec.add_dependency 'google_drive', '~> 1.0.0.pre2'
26
+ spec.add_dependency 'slack-notifier', '~> 1.5.1'
27
+ spec.add_dependency 'rack', '1.3.0'
28
+ spec.add_dependency 'activesupport', '3.2'
29
+
30
+ spec.add_development_dependency "bundler", "~> 1.7"
31
+ spec.add_development_dependency "rake", "~> 10.0"
32
+ spec.add_development_dependency "rspec", "~> 3.4.0"
33
+ end
metadata ADDED
@@ -0,0 +1,251 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sport_ngin_aws_auditor
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ platform: ruby
6
+ authors:
7
+ - Elliot Hursh
8
+ - Emma Sax
9
+ - Brian Bergstrom
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2016-07-07 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: aws-sdk
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - "~>"
20
+ - !ruby/object:Gem::Version
21
+ version: '2'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - "~>"
27
+ - !ruby/object:Gem::Version
28
+ version: '2'
29
+ - !ruby/object:Gem::Dependency
30
+ name: hashie
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - "~>"
34
+ - !ruby/object:Gem::Version
35
+ version: '3.3'
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '3.3'
43
+ - !ruby/object:Gem::Dependency
44
+ name: gli
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '2.10'
50
+ type: :runtime
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - "~>"
55
+ - !ruby/object:Gem::Version
56
+ version: '2.10'
57
+ - !ruby/object:Gem::Dependency
58
+ name: highline
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - "~>"
62
+ - !ruby/object:Gem::Version
63
+ version: '1.6'
64
+ type: :runtime
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - "~>"
69
+ - !ruby/object:Gem::Version
70
+ version: '1.6'
71
+ - !ruby/object:Gem::Dependency
72
+ name: google_drive
73
+ requirement: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - "~>"
76
+ - !ruby/object:Gem::Version
77
+ version: 1.0.0.pre2
78
+ type: :runtime
79
+ prerelease: false
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - "~>"
83
+ - !ruby/object:Gem::Version
84
+ version: 1.0.0.pre2
85
+ - !ruby/object:Gem::Dependency
86
+ name: slack-notifier
87
+ requirement: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - "~>"
90
+ - !ruby/object:Gem::Version
91
+ version: 1.5.1
92
+ type: :runtime
93
+ prerelease: false
94
+ version_requirements: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - "~>"
97
+ - !ruby/object:Gem::Version
98
+ version: 1.5.1
99
+ - !ruby/object:Gem::Dependency
100
+ name: rack
101
+ requirement: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - '='
104
+ - !ruby/object:Gem::Version
105
+ version: 1.3.0
106
+ type: :runtime
107
+ prerelease: false
108
+ version_requirements: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - '='
111
+ - !ruby/object:Gem::Version
112
+ version: 1.3.0
113
+ - !ruby/object:Gem::Dependency
114
+ name: activesupport
115
+ requirement: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - '='
118
+ - !ruby/object:Gem::Version
119
+ version: '3.2'
120
+ type: :runtime
121
+ prerelease: false
122
+ version_requirements: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - '='
125
+ - !ruby/object:Gem::Version
126
+ version: '3.2'
127
+ - !ruby/object:Gem::Dependency
128
+ name: bundler
129
+ requirement: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - "~>"
132
+ - !ruby/object:Gem::Version
133
+ version: '1.7'
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - "~>"
139
+ - !ruby/object:Gem::Version
140
+ version: '1.7'
141
+ - !ruby/object:Gem::Dependency
142
+ name: rake
143
+ requirement: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - "~>"
146
+ - !ruby/object:Gem::Version
147
+ version: '10.0'
148
+ type: :development
149
+ prerelease: false
150
+ version_requirements: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - "~>"
153
+ - !ruby/object:Gem::Version
154
+ version: '10.0'
155
+ - !ruby/object:Gem::Dependency
156
+ name: rspec
157
+ requirement: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - "~>"
160
+ - !ruby/object:Gem::Version
161
+ version: 3.4.0
162
+ type: :development
163
+ prerelease: false
164
+ version_requirements: !ruby/object:Gem::Requirement
165
+ requirements:
166
+ - - "~>"
167
+ - !ruby/object:Gem::Version
168
+ version: 3.4.0
169
+ description: Helps with AWS configuration
170
+ email:
171
+ - elliothursh@gmail.com
172
+ - emma.sax4@gmail.com
173
+ - brian.bergstrom@sportngin.com
174
+ executables:
175
+ - sport-ngin-aws-auditor
176
+ extensions: []
177
+ extra_rdoc_files: []
178
+ files:
179
+ - ".gitignore"
180
+ - ".octopolo.yml"
181
+ - ".rspec"
182
+ - ".ruby-gemset"
183
+ - ".ruby-version"
184
+ - ".soyuz.yml"
185
+ - ".travis.yml"
186
+ - CHANGELOG.markdown
187
+ - Gemfile
188
+ - LICENSE.txt
189
+ - README.md
190
+ - Rakefile
191
+ - bin/sport-ngin-aws-auditor
192
+ - lib/sport_ngin_aws_auditor.rb
193
+ - lib/sport_ngin_aws_auditor/aws.rb
194
+ - lib/sport_ngin_aws_auditor/cache_instance.rb
195
+ - lib/sport_ngin_aws_auditor/commands/audit.rb
196
+ - lib/sport_ngin_aws_auditor/commands/export.rb
197
+ - lib/sport_ngin_aws_auditor/commands/inspect.rb
198
+ - lib/sport_ngin_aws_auditor/config.rb
199
+ - lib/sport_ngin_aws_auditor/convenience_wrappers.rb
200
+ - lib/sport_ngin_aws_auditor/ec2_instance.rb
201
+ - lib/sport_ngin_aws_auditor/google.rb
202
+ - lib/sport_ngin_aws_auditor/google_sheet.rb
203
+ - lib/sport_ngin_aws_auditor/instance_helper.rb
204
+ - lib/sport_ngin_aws_auditor/notify_slack.rb
205
+ - lib/sport_ngin_aws_auditor/output.rb
206
+ - lib/sport_ngin_aws_auditor/rds_instance.rb
207
+ - lib/sport_ngin_aws_auditor/scripts/audit.rb
208
+ - lib/sport_ngin_aws_auditor/scripts/export.rb
209
+ - lib/sport_ngin_aws_auditor/scripts/inspect.rb
210
+ - lib/sport_ngin_aws_auditor/stack.rb
211
+ - lib/sport_ngin_aws_auditor/version.rb
212
+ - spec/spec_helper.rb
213
+ - spec/sport_ngin_aws_auditor/aws_spec.rb
214
+ - spec/sport_ngin_aws_auditor/cache_instance_spec.rb
215
+ - spec/sport_ngin_aws_auditor/config_spec.rb
216
+ - spec/sport_ngin_aws_auditor/ec2_instance_spec.rb
217
+ - spec/sport_ngin_aws_auditor/notify_slack_spec.rb
218
+ - spec/sport_ngin_aws_auditor/rds_instance_spec.rb
219
+ - sport_ngin_aws_auditor.gemspec
220
+ homepage: https://github.com/sportngin/sport_ngin_aws_auditor
221
+ licenses:
222
+ - MIT
223
+ metadata: {}
224
+ post_install_message:
225
+ rdoc_options: []
226
+ require_paths:
227
+ - lib
228
+ required_ruby_version: !ruby/object:Gem::Requirement
229
+ requirements:
230
+ - - ">="
231
+ - !ruby/object:Gem::Version
232
+ version: '0'
233
+ required_rubygems_version: !ruby/object:Gem::Requirement
234
+ requirements:
235
+ - - ">="
236
+ - !ruby/object:Gem::Version
237
+ version: '0'
238
+ requirements: []
239
+ rubyforge_project:
240
+ rubygems_version: 2.4.8
241
+ signing_key:
242
+ specification_version: 4
243
+ summary: AWS configuration as code
244
+ test_files:
245
+ - spec/spec_helper.rb
246
+ - spec/sport_ngin_aws_auditor/aws_spec.rb
247
+ - spec/sport_ngin_aws_auditor/cache_instance_spec.rb
248
+ - spec/sport_ngin_aws_auditor/config_spec.rb
249
+ - spec/sport_ngin_aws_auditor/ec2_instance_spec.rb
250
+ - spec/sport_ngin_aws_auditor/notify_slack_spec.rb
251
+ - spec/sport_ngin_aws_auditor/rds_instance_spec.rb