geoengineer 0.1.4 → 0.1.5

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.
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