geoengineer 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/README.md +1 -0
  5. data/lib/geoengineer/cli/geo_cli.rb +1 -0
  6. data/lib/geoengineer/cli/terraform_commands.rb +35 -0
  7. data/lib/geoengineer/environment.rb +1 -0
  8. data/lib/geoengineer/resource.rb +31 -0
  9. data/lib/geoengineer/resources/aws_alb.rb +2 -0
  10. data/lib/geoengineer/resources/aws_alb_listener.rb +16 -6
  11. data/lib/geoengineer/resources/aws_alb_target_group.rb +19 -7
  12. data/lib/geoengineer/resources/aws_customer_gateway.rb +4 -0
  13. data/lib/geoengineer/resources/aws_emr_cluster.rb +20 -0
  14. data/lib/geoengineer/resources/aws_iam_role.rb +1 -0
  15. data/lib/geoengineer/resources/aws_kinesis_stream.rb +10 -7
  16. data/lib/geoengineer/resources/aws_lambda_function.rb +4 -5
  17. data/lib/geoengineer/resources/aws_nat_gateway.rb +6 -7
  18. data/lib/geoengineer/resources/aws_network_interface.rb +22 -0
  19. data/lib/geoengineer/resources/aws_placement_group.rb +25 -0
  20. data/lib/geoengineer/resources/aws_route53_record.rb +45 -4
  21. data/lib/geoengineer/resources/aws_route53_zone.rb +34 -7
  22. data/lib/geoengineer/resources/aws_route_table.rb +1 -1
  23. data/lib/geoengineer/resources/aws_s3_bucket_object.rb +24 -0
  24. data/lib/geoengineer/resources/aws_vpn_connection.rb +17 -9
  25. data/lib/geoengineer/resources/aws_vpn_connection_route.rb +50 -14
  26. data/lib/geoengineer/resources/aws_waf_ipset.rb +35 -0
  27. data/lib/geoengineer/resources/aws_waf_rule.rb +26 -0
  28. data/lib/geoengineer/resources/aws_waf_web_acl.rb +26 -0
  29. data/lib/geoengineer/utils/aws_clients.rb +15 -0
  30. data/lib/geoengineer/utils/has_validations.rb +1 -0
  31. data/lib/geoengineer/version.rb +1 -1
  32. data/spec/resource_spec.rb +56 -0
  33. data/spec/resources/aws_alb_listener_spec.rb +6 -1
  34. data/spec/resources/aws_alb_spec.rb +7 -0
  35. data/spec/resources/aws_alb_target_group_spec.rb +22 -0
  36. data/spec/resources/aws_emr_cluster_spec.rb +23 -0
  37. data/spec/resources/aws_kinesis_stream_spec.rb +26 -11
  38. data/spec/resources/aws_network_interface_spec.rb +32 -0
  39. data/spec/resources/aws_placement_group_spec.rb +29 -0
  40. data/spec/resources/aws_route53_zone_spec.rb +19 -3
  41. data/spec/resources/aws_s3_bucket_object_spec.rb +4 -0
  42. data/spec/resources/aws_waf_ipset_spec.rb +65 -0
  43. data/spec/resources/aws_waf_rule_spec.rb +36 -0
  44. data/spec/resources/aws_waf_web_acl_spec.rb +36 -0
  45. data/spec/spec_helper.rb +1 -1
  46. metadata +23 -2
  47. metadata.gz.sig +0 -0
@@ -0,0 +1,23 @@
1
+ require_relative '../spec_helper.rb'
2
+
3
+ describe GeoEngineer::Resources::AwsEmrCluster do
4
+ let(:aws_client) { AwsClients.emr }
5
+
6
+ common_resource_tests(described_class, described_class.type_from_class_name)
7
+
8
+ before { aws_client.setup_stubbing }
9
+
10
+ describe '#_fetch_remote_resources' do
11
+ it 'should create a list of hashes from AWS SDK' do
12
+ aws_client.stub_responses(
13
+ :list_clusters, { clusters: [{ id: 'some-id', name: 'some-name' }] }
14
+ )
15
+
16
+ remote_resources = GeoEngineer::Resources::AwsEmrCluster._fetch_remote_resources(nil)
17
+ expect(remote_resources.length).to eq 1
18
+ remote_resource = remote_resources.first
19
+ expect(remote_resource[:id]).to eq 'some-id'
20
+ expect(remote_resource[:name]).to eq 'some-name'
21
+ end
22
+ end
23
+ end
@@ -28,19 +28,34 @@ describe(GeoEngineer::Resources::AwsKinesisStream) do
28
28
  before do
29
29
  aws_client.stub_responses(
30
30
  :describe_stream,
31
- {
32
- stream_description:
31
+ [
32
+ {
33
+ stream_description:
34
+ {
35
+ stream_name: "test",
36
+ stream_arn: "arn:aws:kinesis:us-east-1:1234567890:stream/test",
37
+ stream_status: "ACTIVE",
38
+ stream_creation_timestamp: Time.now,
39
+ shards: [],
40
+ has_more_shards: true,
41
+ retention_period_hours: 24,
42
+ enhanced_monitoring: []
43
+ }
44
+ },
33
45
  {
34
- stream_name: "test",
35
- stream_arn: "arn:aws:kinesis:us-east-1:1234567890:stream/test",
36
- stream_status: "ACTIVE",
37
- stream_creation_timestamp: Time.now,
38
- shards: [],
39
- has_more_shards: false,
40
- retention_period_hours: 24,
41
- enhanced_monitoring: []
46
+ stream_description:
47
+ {
48
+ stream_name: "test",
49
+ stream_arn: "arn:aws:kinesis:us-east-1:1234567890:stream/test",
50
+ stream_status: "ACTIVE",
51
+ stream_creation_timestamp: Time.now,
52
+ shards: [],
53
+ has_more_shards: false,
54
+ retention_period_hours: 24,
55
+ enhanced_monitoring: []
56
+ }
42
57
  }
43
- }
58
+ ]
44
59
  )
45
60
  end
46
61
 
@@ -0,0 +1,32 @@
1
+ require_relative '../spec_helper'
2
+
3
+ describe GeoEngineer::Resources::AwsNetworkInterface do
4
+ let(:aws_client) { AwsClients.ec2 }
5
+
6
+ common_resource_tests(described_class, described_class.type_from_class_name)
7
+
8
+ describe '#_fetch_remote_resources' do
9
+ before do
10
+ aws_client.stub_responses(
11
+ :describe_network_interfaces, {
12
+ network_interfaces: [
13
+ { network_interface_id: "eni-xxxxxxxx", subnet_id: 'subnet-123456',
14
+ private_ip_addresses: [{ private_ip_address: '99.0.0.0' },
15
+ { private_ip_address: '99.0.0.1' }] },
16
+ { network_interface_id: "eni-xxxxxxxy", subnet_id: 'subnet-123456',
17
+ private_ip_addresses: [{ private_ip_address: '99.0.0.2' }] }
18
+ ]
19
+ }
20
+ )
21
+ end
22
+
23
+ it 'should create an array of hashes from the AWS response' do
24
+ resources = GeoEngineer::Resources::AwsNetworkInterface._fetch_remote_resources(nil)
25
+ expect(resources.count).to eql 2
26
+
27
+ test_interface = resources.first
28
+ expect(test_interface[:_terraform_id]).to eql "eni-xxxxxxxx"
29
+ expect(test_interface[:_geo_id]).to eql "99.0.0.0,99.0.0.1"
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,29 @@
1
+ require_relative '../spec_helper'
2
+
3
+ describe GeoEngineer::Resources::AwsPlacementGroup do
4
+ let(:aws_client) { AwsClients.ec2 }
5
+
6
+ common_resource_tests(described_class, described_class.type_from_class_name)
7
+
8
+ describe '#_fetch_remote_resources' do
9
+ before do
10
+ aws_client.stub_responses(
11
+ :describe_placement_groups, {
12
+ placement_groups: [
13
+ { group_name: 'some-placement-group', state: 'available', strategy: 'cluster' },
14
+ { group_name: 'other-placement-group', state: 'available', strategy: 'cluster' }
15
+ ]
16
+ }
17
+ )
18
+ end
19
+
20
+ it 'creates an array of hashes from the AWS response' do
21
+ resources = described_class._fetch_remote_resources(nil)
22
+ expect(resources.count).to eql 2
23
+
24
+ test_eip = resources.first
25
+ expect(test_eip[:_terraform_id]).to eql 'some-placement-group'
26
+ expect(test_eip[:_geo_id]).to eql 'some-placement-group'
27
+ end
28
+ end
29
+ end
@@ -11,7 +11,10 @@ describe(GeoEngineer::Resources::AwsRoute53Zone) do
11
11
  aws_client.stub_responses(
12
12
  :list_hosted_zones, {
13
13
  hosted_zones: [
14
- { id: '123', name: "testzone", caller_reference: "test" },
14
+ { id: '123', name: "testzone", caller_reference: "test",
15
+ config: { private_zone: false } },
16
+ { id: '124', name: "testzone", caller_reference: "test",
17
+ config: { private_zone: true } },
15
18
  { id: '1234', name: "anothertestzone", caller_reference: "test" }
16
19
  ],
17
20
  is_truncated: false,
@@ -19,15 +22,28 @@ describe(GeoEngineer::Resources::AwsRoute53Zone) do
19
22
  marker: "foo"
20
23
  }
21
24
  )
25
+
26
+ aws_client.stub_responses(
27
+ :get_hosted_zone, {
28
+ hosted_zone: {
29
+ id: '124', name: "testzone", caller_reference: "test"
30
+ },
31
+ vp_cs: [{ vpc_id: "myvpc" }]
32
+ }
33
+ )
22
34
  end
23
35
 
24
36
  it 'should create an array of hashes from the AWS response' do
25
37
  resources = GeoEngineer::Resources::AwsRoute53Zone._fetch_remote_resources(nil)
26
- expect(resources.count).to eql(2)
38
+ expect(resources.count).to eql(3)
27
39
 
28
40
  testzone = resources.first
29
41
  expect(testzone[:_terraform_id]).to eql('123')
30
- expect(testzone[:_geo_id]).to eql('testzone')
42
+ expect(testzone[:_geo_id]).to eql('public-testzone')
43
+
44
+ testzone = resources[1]
45
+ expect(testzone[:_terraform_id]).to eql('124')
46
+ expect(testzone[:_geo_id]).to eql('myvpc-testzone')
31
47
  end
32
48
  end
33
49
  end
@@ -0,0 +1,4 @@
1
+ require_relative '../spec_helper'
2
+
3
+ describe(GeoEngineer::Resources::AwsS3BucketObject) do
4
+ end
@@ -0,0 +1,65 @@
1
+ require_relative '../spec_helper'
2
+
3
+ describe(GeoEngineer::Resources::AwsWafIpset) do
4
+ common_resource_tests(described_class, described_class.type_from_class_name)
5
+
6
+ describe "#_fetch_remote_resources" do
7
+ let(:waf) { AwsClients.waf }
8
+ before do
9
+ stub = waf.stub_data(
10
+ :list_ip_sets,
11
+ {
12
+ ip_sets: [
13
+ {
14
+ ip_set_id: 'some_id',
15
+ name: 'some_name'
16
+ },
17
+ {
18
+ ip_set_id: 'some_id2',
19
+ name: 'some_name2'
20
+ }
21
+ ]
22
+ }
23
+ )
24
+ waf.stub_responses(:list_ip_sets, stub)
25
+ end
26
+
27
+ after do
28
+ waf.stub_responses(:list_ip_sets, {})
29
+ end
30
+
31
+ it 'should create list of hashes from returned AWS SDK' do
32
+ remote_resources = GeoEngineer::Resources::AwsWafIpset._fetch_remote_resources(nil)
33
+ expect(remote_resources.length).to eq(2)
34
+ end
35
+
36
+ it 'should validate_correct_cidr_blocks' do
37
+ good_cidr1 = GeoEngineer::Resources::AwsWafIpset.new('name', 'id') {
38
+ ip_set_descriptors {
39
+ value "0.0.0.0/32"
40
+ }
41
+ }
42
+ good_cidr2 = GeoEngineer::Resources::AwsWafIpset.new('name', 'id') {
43
+ ip_set_descriptors {
44
+ value "255.255.255.255/0"
45
+ }
46
+ }
47
+ expect(good_cidr1.validate_correct_cidr_blocks.length).to eq 0
48
+ expect(good_cidr2.validate_correct_cidr_blocks.length).to eq 0
49
+
50
+ bad_cidr1 = GeoEngineer::Resources::AwsWafIpset.new('name', 'id') {
51
+ ip_set_descriptors {
52
+ value "0.0.0.0/33"
53
+ }
54
+ }
55
+ bad_cidr2 = GeoEngineer::Resources::AwsWafIpset.new('name', 'id') {
56
+ ip_set_descriptors {
57
+ value "asdfasdf"
58
+ }
59
+ }
60
+
61
+ expect(bad_cidr1.validate_correct_cidr_blocks.length).to eq 1
62
+ expect(bad_cidr2.validate_correct_cidr_blocks.length).to eq 1
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,36 @@
1
+ require_relative '../spec_helper'
2
+
3
+ describe(GeoEngineer::Resources::AwsWafRule) do
4
+ common_resource_tests(described_class, described_class.type_from_class_name)
5
+
6
+ describe "#_fetch_remote_resources" do
7
+ let(:waf) { AwsClients.waf }
8
+ before do
9
+ stub = waf.stub_data(
10
+ :list_rules,
11
+ {
12
+ rules: [
13
+ {
14
+ rule_id: 'name1',
15
+ name: 'name1'
16
+ },
17
+ {
18
+ rule_id: 'name2',
19
+ name: 'name2'
20
+ }
21
+ ]
22
+ }
23
+ )
24
+ waf.stub_responses(:list_rules, stub)
25
+ end
26
+
27
+ after do
28
+ waf.stub_responses(:list_rules, [])
29
+ end
30
+
31
+ it 'should create list of hashes from returned AWS SDK' do
32
+ remote_resources = GeoEngineer::Resources::AwsWafRule._fetch_remote_resources(nil)
33
+ expect(remote_resources.length).to eq(2)
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,36 @@
1
+ require_relative '../spec_helper'
2
+
3
+ describe(GeoEngineer::Resources::AwsWafWebAcl) do
4
+ common_resource_tests(described_class, described_class.type_from_class_name)
5
+
6
+ describe "#_fetch_remote_resources" do
7
+ let(:waf) { AwsClients.waf }
8
+ before do
9
+ stub = waf.stub_data(
10
+ :list_web_acls,
11
+ {
12
+ web_acls: [
13
+ {
14
+ web_acl_id: 'name1',
15
+ name: 'name1'
16
+ },
17
+ {
18
+ web_acl_id: 'name2',
19
+ name: 'name2'
20
+ }
21
+ ]
22
+ }
23
+ )
24
+ waf.stub_responses(:list_web_acls, stub)
25
+ end
26
+
27
+ after do
28
+ waf.stub_responses(:list_web_acls, [])
29
+ end
30
+
31
+ it 'should create list of hashes from returned AWS SDK' do
32
+ remote_resources = GeoEngineer::Resources::AwsWafWebAcl._fetch_remote_resources(nil)
33
+ expect(remote_resources.length).to eq(2)
34
+ end
35
+ end
36
+ end
@@ -37,7 +37,7 @@ def mapping_tests(clazz, clazz_name)
37
37
  end
38
38
 
39
39
  def fetch_empty_should_work(clazz)
40
- it 'should work with emtpy response' do
40
+ it 'should work with empty response' do
41
41
  remote_resources = clazz._fetch_remote_resources(nil)
42
42
  expect(remote_resources.length).to eq 0
43
43
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geoengineer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - coinbase
@@ -31,7 +31,7 @@ cert_chain:
31
31
  /uh1ggoD3DEtJFiR1KLueTTmWbOrmhzKgyPiQUYOt8dakCJYED2VhgDLVs+/d4ar
32
32
  EWw3+Vet
33
33
  -----END CERTIFICATE-----
34
- date: 2017-05-18 00:00:00.000000000 Z
34
+ date: 2017-11-07 00:00:00.000000000 Z
35
35
  dependencies:
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec
@@ -231,6 +231,7 @@ files:
231
231
  - lib/geoengineer/resources/aws_elasticache_subnet_group.rb
232
232
  - lib/geoengineer/resources/aws_elasticsearch_domain.rb
233
233
  - lib/geoengineer/resources/aws_elb.rb
234
+ - lib/geoengineer/resources/aws_emr_cluster.rb
234
235
  - lib/geoengineer/resources/aws_iam_account_password_policy.rb
235
236
  - lib/geoengineer/resources/aws_iam_group.rb
236
237
  - lib/geoengineer/resources/aws_iam_group_membership.rb
@@ -255,6 +256,8 @@ files:
255
256
  - lib/geoengineer/resources/aws_nat_gateway.rb
256
257
  - lib/geoengineer/resources/aws_network_acl.rb
257
258
  - lib/geoengineer/resources/aws_network_acl_rule.rb
259
+ - lib/geoengineer/resources/aws_network_interface.rb
260
+ - lib/geoengineer/resources/aws_placement_group.rb
258
261
  - lib/geoengineer/resources/aws_proxy_protocol_policy.rb
259
262
  - lib/geoengineer/resources/aws_redshift_cluster.rb
260
263
  - lib/geoengineer/resources/aws_route.rb
@@ -264,6 +267,7 @@ files:
264
267
  - lib/geoengineer/resources/aws_route_table_association.rb
265
268
  - lib/geoengineer/resources/aws_s3_bucket.rb
266
269
  - lib/geoengineer/resources/aws_s3_bucket_notification.rb
270
+ - lib/geoengineer/resources/aws_s3_bucket_object.rb
267
271
  - lib/geoengineer/resources/aws_security_group.rb
268
272
  - lib/geoengineer/resources/aws_ses_receipt_rule.rb
269
273
  - lib/geoengineer/resources/aws_ses_receipt_rule_set.rb
@@ -280,6 +284,9 @@ files:
280
284
  - lib/geoengineer/resources/aws_vpn_connection_route.rb
281
285
  - lib/geoengineer/resources/aws_vpn_gateway.rb
282
286
  - lib/geoengineer/resources/aws_vpn_gateway_attachment.rb
287
+ - lib/geoengineer/resources/aws_waf_ipset.rb
288
+ - lib/geoengineer/resources/aws_waf_rule.rb
289
+ - lib/geoengineer/resources/aws_waf_web_acl.rb
283
290
  - lib/geoengineer/resources/iam/statement.rb
284
291
  - lib/geoengineer/sub_resource.rb
285
292
  - lib/geoengineer/template.rb
@@ -333,6 +340,7 @@ files:
333
340
  - spec/resources/aws_elasticcache_parameter_group_spec.rb
334
341
  - spec/resources/aws_elasticsearch_domain_spec.rb
335
342
  - spec/resources/aws_elb_spec.rb
343
+ - spec/resources/aws_emr_cluster_spec.rb
336
344
  - spec/resources/aws_iam_account_password_policy_spec.rb
337
345
  - spec/resources/aws_iam_group_membership_spec.rb
338
346
  - spec/resources/aws_iam_group_spec.rb
@@ -357,6 +365,8 @@ files:
357
365
  - spec/resources/aws_nat_gateway_spec.rb
358
366
  - spec/resources/aws_network_acl_rule_spec.rb
359
367
  - spec/resources/aws_network_acl_spec.rb
368
+ - spec/resources/aws_network_interface_spec.rb
369
+ - spec/resources/aws_placement_group_spec.rb
360
370
  - spec/resources/aws_proxy_protocol_policy_spec.rb
361
371
  - spec/resources/aws_redshift_cluster_spec.rb
362
372
  - spec/resources/aws_route53_record_spec.rb
@@ -365,6 +375,7 @@ files:
365
375
  - spec/resources/aws_route_table_association_spec.rb
366
376
  - spec/resources/aws_route_table_spec.rb
367
377
  - spec/resources/aws_s3_bucket_notification_spec.rb
378
+ - spec/resources/aws_s3_bucket_object_spec.rb
368
379
  - spec/resources/aws_s3_bucket_spec.rb
369
380
  - spec/resources/aws_security_group_spec.rb
370
381
  - spec/resources/aws_ses_receipt_rule_set_spec.rb
@@ -382,6 +393,9 @@ files:
382
393
  - spec/resources/aws_vpn_connection_spec.rb
383
394
  - spec/resources/aws_vpn_gateway_attachment_spec.rb
384
395
  - spec/resources/aws_vpn_gateway_spec.rb
396
+ - spec/resources/aws_waf_ipset_spec.rb
397
+ - spec/resources/aws_waf_rule_spec.rb
398
+ - spec/resources/aws_waf_web_acl_spec.rb
385
399
  - spec/rubocop_spec.rb
386
400
  - spec/spec_helper.rb
387
401
  - spec/sub_resource_spec.rb
@@ -457,6 +471,7 @@ test_files:
457
471
  - spec/resources/aws_elasticcache_parameter_group_spec.rb
458
472
  - spec/resources/aws_elasticsearch_domain_spec.rb
459
473
  - spec/resources/aws_elb_spec.rb
474
+ - spec/resources/aws_emr_cluster_spec.rb
460
475
  - spec/resources/aws_iam_account_password_policy_spec.rb
461
476
  - spec/resources/aws_iam_group_membership_spec.rb
462
477
  - spec/resources/aws_iam_group_spec.rb
@@ -481,6 +496,8 @@ test_files:
481
496
  - spec/resources/aws_nat_gateway_spec.rb
482
497
  - spec/resources/aws_network_acl_rule_spec.rb
483
498
  - spec/resources/aws_network_acl_spec.rb
499
+ - spec/resources/aws_network_interface_spec.rb
500
+ - spec/resources/aws_placement_group_spec.rb
484
501
  - spec/resources/aws_proxy_protocol_policy_spec.rb
485
502
  - spec/resources/aws_redshift_cluster_spec.rb
486
503
  - spec/resources/aws_route53_record_spec.rb
@@ -489,6 +506,7 @@ test_files:
489
506
  - spec/resources/aws_route_table_association_spec.rb
490
507
  - spec/resources/aws_route_table_spec.rb
491
508
  - spec/resources/aws_s3_bucket_notification_spec.rb
509
+ - spec/resources/aws_s3_bucket_object_spec.rb
492
510
  - spec/resources/aws_s3_bucket_spec.rb
493
511
  - spec/resources/aws_security_group_spec.rb
494
512
  - spec/resources/aws_ses_receipt_rule_set_spec.rb
@@ -506,6 +524,9 @@ test_files:
506
524
  - spec/resources/aws_vpn_connection_spec.rb
507
525
  - spec/resources/aws_vpn_gateway_attachment_spec.rb
508
526
  - spec/resources/aws_vpn_gateway_spec.rb
527
+ - spec/resources/aws_waf_ipset_spec.rb
528
+ - spec/resources/aws_waf_rule_spec.rb
529
+ - spec/resources/aws_waf_web_acl_spec.rb
509
530
  - spec/rubocop_spec.rb
510
531
  - spec/spec_helper.rb
511
532
  - spec/sub_resource_spec.rb