geoengineer 0.1.1 → 0.1.2

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 (53) 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 +18 -8
  5. data/lib/geoengineer/cli/geo_cli.rb +4 -1
  6. data/lib/geoengineer/environment.rb +1 -1
  7. data/lib/geoengineer/resources/aws_cloudtrail.rb +20 -0
  8. data/lib/geoengineer/resources/aws_cloudwatch_event_rule.rb +26 -0
  9. data/lib/geoengineer/resources/aws_cloudwatch_event_target.rb +50 -0
  10. data/lib/geoengineer/resources/aws_db_instance.rb +5 -1
  11. data/lib/geoengineer/resources/aws_dynamodb_table.rb +24 -0
  12. data/lib/geoengineer/resources/aws_elasticache_cluster.rb +22 -9
  13. data/lib/geoengineer/resources/aws_iam_policy.rb +1 -0
  14. data/lib/geoengineer/resources/aws_iam_role_policy.rb +63 -0
  15. data/lib/geoengineer/resources/aws_kinesis_stream.rb +40 -0
  16. data/lib/geoengineer/resources/aws_lambda_alias.rb +18 -3
  17. data/lib/geoengineer/resources/aws_lambda_function.rb +11 -0
  18. data/lib/geoengineer/resources/aws_lambda_permission.rb +9 -0
  19. data/lib/geoengineer/resources/aws_load_balancer_backend_server_policy.rb +48 -0
  20. data/lib/geoengineer/resources/aws_load_balancer_policy.rb +43 -0
  21. data/lib/geoengineer/resources/aws_network_acl_rule.rb +27 -2
  22. data/lib/geoengineer/resources/aws_redshift_cluster.rb +10 -4
  23. data/lib/geoengineer/resources/aws_route.rb +2 -0
  24. data/lib/geoengineer/resources/aws_vpn_gateway_attachment.rb +8 -0
  25. data/lib/geoengineer/sub_resource.rb +13 -3
  26. data/lib/geoengineer/utils/aws_clients.rb +18 -2
  27. data/lib/geoengineer/utils/has_projects.rb +3 -1
  28. data/lib/geoengineer/utils/has_validations.rb +7 -0
  29. data/lib/geoengineer/version.rb +1 -1
  30. data/spec/resource_spec.rb +14 -0
  31. data/spec/resources/aws_cloudtrail_spec.rb +35 -0
  32. data/spec/resources/aws_cloudwatch_event_rule_spec.rb +33 -0
  33. data/spec/resources/aws_cloudwatch_event_target_spec.rb +54 -0
  34. data/spec/resources/aws_dynamodb_table_spec.rb +24 -0
  35. data/spec/resources/aws_iam_role_spec.rb +21 -18
  36. data/spec/resources/aws_iam_rule_policy_spec.rb +49 -0
  37. data/spec/resources/{aws_iam_user.rb → aws_iam_user_spec.rb} +9 -6
  38. data/spec/resources/aws_kinesis_stream_spec.rb +52 -0
  39. data/spec/resources/aws_lambda_alias_spec.rb +22 -3
  40. data/spec/resources/aws_load_balancer_backend_server_policy_spec.rb +42 -0
  41. data/spec/resources/aws_load_balancer_policy_spec.rb +44 -0
  42. data/spec/resources/aws_network_acl_rule_spec.rb +29 -1
  43. data/spec/resources/{aws_ses_receipt_rule_set.rb → aws_ses_receipt_rule_set_spec.rb} +13 -6
  44. data/spec/resources/{aws_ses_receipt_rule.rb → aws_ses_receipt_rule_spec.rb} +6 -5
  45. data/spec/resources/{aws_sns_topic_subscription.rb → aws_sns_topic_subscription_spec.rb} +0 -0
  46. data/spec/resources/aws_subnet_spec.rb +2 -2
  47. data/spec/resources/aws_vpc_dhcp_options_association_spec.rb +2 -2
  48. data/spec/resources/aws_vpc_spec.rb +2 -2
  49. data/spec/sub_resource_spec.rb +12 -0
  50. data/spec/utils/has_subresources_spec.rb +9 -0
  51. data/spec/utils/has_validations_spec.rb +23 -3
  52. metadata +34 -10
  53. metadata.gz.sig +0 -0
@@ -0,0 +1,54 @@
1
+ require_relative '../spec_helper'
2
+
3
+ describe("GeoEngineer::Resources::AwsCloudwatchEventTarget") do
4
+ let(:aws_client) { AwsClients.cloudwatchevents }
5
+
6
+ before do
7
+ aws_client.setup_stubbing
8
+ end
9
+
10
+ common_resource_tests(
11
+ GeoEngineer::Resources::AwsCloudwatchEventTarget,
12
+ 'aws_cloudwatch_event_target'
13
+ )
14
+
15
+ describe "#_fetch_remote_resources" do
16
+ before do
17
+ aws_client.stub_responses(
18
+ :list_rules,
19
+ {
20
+ rules:
21
+ [
22
+ {
23
+ name: "test",
24
+ arn: "arn:aws:cloudwatchevents:us-east-1:1234567890:test",
25
+ state: "ENABLED",
26
+ schedule_expression: "rate(5 minutes)"
27
+ }
28
+ ]
29
+ }
30
+ )
31
+ end
32
+ before do
33
+ aws_client.stub_responses(
34
+ :list_targets_by_rule,
35
+ {
36
+ targets:
37
+ [
38
+ {
39
+ id: "test",
40
+ arn: "arn:aws:cloudwatchevents:us-east-1:1234567890:test",
41
+ input: nil,
42
+ input_path: nil
43
+ }
44
+ ]
45
+ }
46
+ )
47
+ end
48
+
49
+ it 'should create list of hashes from returned AWS SDK' do
50
+ remote_resources = GeoEngineer::Resources::AwsCloudwatchEventTarget._fetch_remote_resources
51
+ expect(remote_resources.length).to eq 1
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,24 @@
1
+ require_relative '../spec_helper'
2
+
3
+ describe "GeoEngineer::Resources::AwsDynamodbTable" do
4
+ let(:aws_client) { AwsClients.dynamo }
5
+
6
+ common_resource_tests(GeoEngineer::Resources::AwsDynamodbTable, 'aws_dynamodb_table')
7
+
8
+ describe '#_fetch_remote_resources' do
9
+ before do
10
+ aws_client.stub_responses(
11
+ :list_tables, { table_names: ["dynamo_name1", "dynamo_name2"] }
12
+ )
13
+ end
14
+
15
+ it 'should create an array of hashes from the AWS response' do
16
+ resources = GeoEngineer::Resources::AwsDynamodbTable._fetch_remote_resources
17
+ expect(resources.count).to eql 2
18
+
19
+ test_dynamot = resources.first
20
+ expect(test_dynamot[:_terraform_id]).to eql "dynamo_name1"
21
+ expect(test_dynamot[:_geo_id]).to eql "dynamo_name1"
22
+ end
23
+ end
24
+ end
@@ -10,24 +10,27 @@ describe "GeoEngineer::Resources::AwsIamRole" do
10
10
  describe "#_fetch_remote_resources" do
11
11
  before do
12
12
  aws_client.stub_responses(
13
- :list_roles, { roles: [
14
- {
15
- role_name: 'Some-IAM-role',
16
- arn: "arn:aws:iam::123456789123:role/some-iam-role",
17
- path: "/",
18
- role_id: "XXXXXXXXXXXXXXXXXXXXY",
19
- create_date: Time.parse("2016-12-13 01:00:06 UTC"),
20
- assume_role_policy_document: ""
21
- },
22
- {
23
- role_name: 'Another-IAM-role',
24
- arn: "arn:aws:iam::123456789123:role/another-iam-role",
25
- path: "/",
26
- role_id: "XXXXXXXXXXXXXXXXXXXXY",
27
- create_date: Time.parse("2016-12-13 01:00:06 UTC"),
28
- assume_role_policy_document: ""
29
- }
30
- ] }
13
+ :list_roles,
14
+ {
15
+ roles: [
16
+ {
17
+ role_name: 'Some-IAM-role',
18
+ arn: "arn:aws:iam::123456789123:role/some-iam-role",
19
+ path: "/",
20
+ role_id: "XXXXXXXXXXXXXXXXXXXXY",
21
+ create_date: Time.parse("2016-12-13 01:00:06 UTC"),
22
+ assume_role_policy_document: ""
23
+ },
24
+ {
25
+ role_name: 'Another-IAM-role',
26
+ arn: "arn:aws:iam::123456789123:role/another-iam-role",
27
+ path: "/",
28
+ role_id: "XXXXXXXXXXXXXXXXXXXXY",
29
+ create_date: Time.parse("2016-12-13 01:00:06 UTC"),
30
+ assume_role_policy_document: ""
31
+ }
32
+ ]
33
+ }
31
34
  )
32
35
  end
33
36
 
@@ -0,0 +1,49 @@
1
+ require_relative '../spec_helper'
2
+
3
+ describe GeoEngineer::Resources::AwsIamRolePolicy do
4
+ let(:iam_client) { AwsClients.iam }
5
+
6
+ common_resource_tests(
7
+ GeoEngineer::Resources::AwsIamRolePolicy,
8
+ 'aws_iam_role_policy'
9
+ )
10
+
11
+ before { iam_client.setup_stubbing }
12
+
13
+ describe "#_fetch_remote_resources" do
14
+ it 'should create list of hashes from returned AWS SDK' do
15
+ iam_client.stub_responses(
16
+ :list_roles,
17
+ {
18
+ roles: [
19
+ {
20
+ role_name: 'Some-IAM-role',
21
+ arn: "arn:aws:iam::123456789123:role/some-iam-role",
22
+ path: "/",
23
+ role_id: "XXXXXXXXXXXXXXXXXXXXY",
24
+ create_date: Time.parse("2016-12-13 01:00:06 UTC"),
25
+ assume_role_policy_document: ""
26
+ }
27
+ ]
28
+ }
29
+ )
30
+ iam_client.stub_responses(
31
+ :list_role_policies,
32
+ {
33
+ policy_names: ["Some-Policy-Name"],
34
+ is_truncated: false
35
+ }
36
+ )
37
+ iam_client.stub_responses(
38
+ :get_role_policy,
39
+ {
40
+ role_name: 'Some-IAM-role',
41
+ policy_name: 'Some-Policy-Name',
42
+ policy_document: "{ Some Policy Here... }"
43
+ }
44
+ )
45
+ remote_resources = GeoEngineer::Resources::AwsIamRolePolicy._fetch_remote_resources
46
+ expect(remote_resources.length).to eq 1
47
+ end
48
+ end
49
+ end
@@ -1,14 +1,16 @@
1
1
  require_relative '../spec_helper'
2
2
 
3
3
  describe("GeoEngineer::Resources::AwsIamUser") do
4
+ let(:iam_client) { AwsClients.iam }
5
+
4
6
  common_resource_tests(GeoEngineer::Resources::AwsIamUser,
5
7
  'aws_iam_user')
6
8
 
9
+ before { iam_client.setup_stubbing }
10
+
7
11
  describe "#_fetch_remote_resources" do
8
12
  it 'should create list of hashes from returned AWS SDK' do
9
- iam = AwsClients.iam
10
- # iam.list_policies.policies
11
- stub = iam.stub_data(
13
+ iam_client.stub_responses(
12
14
  :list_users,
13
15
  {
14
16
  users: [
@@ -16,18 +18,19 @@ describe("GeoEngineer::Resources::AwsIamUser") do
16
18
  user_name: 'FakeUser',
17
19
  user_id: 'ANTIPASTAAC2ZFSLA',
18
20
  arn: 'arn:aws:iam::123456789012:user/FakeUser',
19
- path: '/'
21
+ path: '/',
22
+ create_date: Time.parse('2016-03-23 16:33:32 UTC')
20
23
  },
21
24
  {
22
25
  user_name: 'FakeUser',
23
26
  user_id: 'ANTIPASTAAC2ZFSLA',
24
27
  arn: 'arn:aws:iam::123456789012:user/FakeUser',
25
- path: '/'
28
+ path: '/',
29
+ create_date: Time.parse('2016-03-23 16:33:32 UTC')
26
30
  }
27
31
  ]
28
32
  }
29
33
  )
30
- sns.stub_responses(:list_users, stub)
31
34
  remote_resources = GeoEngineer::Resources::AwsIamUser._fetch_remote_resources
32
35
  expect(remote_resources.length).to eq 2
33
36
  end
@@ -0,0 +1,52 @@
1
+ require_relative '../spec_helper'
2
+
3
+ describe("GeoEngineer::Resources::AwsKinesisStream") do
4
+ let(:aws_client) { AwsClients.kinesis }
5
+
6
+ before do
7
+ aws_client.setup_stubbing
8
+ aws_client.stub_responses(
9
+ :list_streams,
10
+ {
11
+ stream_names: [],
12
+ has_more_streams: false
13
+ }
14
+ )
15
+ end
16
+
17
+ common_resource_tests(GeoEngineer::Resources::AwsKinesisStream, 'aws_kinesis_stream')
18
+
19
+ describe "#_fetch_remote_resources" do
20
+ before do
21
+ aws_client.stub_responses(
22
+ :list_streams,
23
+ {
24
+ stream_names: ["test"],
25
+ has_more_streams: false
26
+ }
27
+ )
28
+ end
29
+ before do
30
+ aws_client.stub_responses(
31
+ :describe_stream,
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
+ shards: [],
39
+ has_more_shards: false,
40
+ retention_period_hours: 24,
41
+ enhanced_monitoring: []
42
+ }
43
+ }
44
+ )
45
+ end
46
+
47
+ it 'should create list of hashes from returned AWS SDK' do
48
+ remote_resources = GeoEngineer::Resources::AwsKinesisStream._fetch_remote_resources
49
+ expect(remote_resources.length).to eq 1
50
+ end
51
+ end
52
+ end
@@ -1,6 +1,6 @@
1
1
  require_relative '../spec_helper'
2
2
 
3
- describe("GeoEngineer::Resources::AwsLambdaAlias") do
3
+ describe GeoEngineer::Resources::AwsLambdaAlias do
4
4
  let(:aws_client) { AwsClients.lambda }
5
5
 
6
6
  before { aws_client.setup_stubbing }
@@ -12,8 +12,18 @@ describe("GeoEngineer::Resources::AwsLambdaAlias") do
12
12
  aws_client.stub_responses(
13
13
  :list_functions, {
14
14
  functions: [
15
- { function_name: "foo", role: "arn:aws:iam:one", handler: "export.foo" },
16
- { function_name: "bar", role: "arn:aws:iam:two", handler: "export.bar" }
15
+ {
16
+ function_name: "foo",
17
+ function_arn: "arn:aws:lambda:us-east-1:123:function:foo",
18
+ role: "arn:aws:iam:one",
19
+ handler: "export.foo"
20
+ },
21
+ {
22
+ function_name: "bar",
23
+ function_arn: "arn:aws:lambda:us-east-1:123:function:bar",
24
+ role: "arn:aws:iam:two",
25
+ handler: "export.bar"
26
+ }
17
27
  ]
18
28
  }
19
29
  )
@@ -35,5 +45,14 @@ describe("GeoEngineer::Resources::AwsLambdaAlias") do
35
45
  remote_resources = GeoEngineer::Resources::AwsLambdaAlias._fetch_remote_resources
36
46
  expect(remote_resources.length).to eq(2)
37
47
  end
48
+
49
+ it 'should match a local resource to the remote resource' do
50
+ subject = described_class.new('aws_lambda_alias', 'foo') {
51
+ name "foonew"
52
+ function_name "arn:aws:lambda:us-east-1:123:function:foo"
53
+ function_version 1
54
+ }
55
+ expect(subject.remote_resource).to_not be_nil
56
+ end
38
57
  end
39
58
  end
@@ -0,0 +1,42 @@
1
+ require_relative '../spec_helper'
2
+
3
+ describe GeoEngineer::Resources::AwsLoadBalancerBackendServerPolicy do
4
+ let(:elb_client) { AwsClients.elb }
5
+
6
+ common_resource_tests(GeoEngineer::Resources::AwsLoadBalancerBackendServerPolicy,
7
+ 'aws_load_balancer_backend_server_policy')
8
+
9
+ before { elb_client.setup_stubbing }
10
+
11
+ describe "#_fetch_remote_resources" do
12
+ it 'should create list of hashes from returned AWS SDK' do
13
+ elb_client.stub_responses(
14
+ :describe_load_balancers,
15
+ {
16
+ load_balancer_descriptions: [
17
+ {
18
+ load_balancer_name: "test",
19
+ backend_server_descriptions: [
20
+ {
21
+ instance_port: 5000,
22
+ policy_names: ["test"]
23
+ }
24
+ ]
25
+ },
26
+ {
27
+ load_balancer_name: "test",
28
+ backend_server_descriptions: [
29
+ {
30
+ instance_port: 5000,
31
+ policy_names: ["test"]
32
+ }
33
+ ]
34
+ }
35
+ ]
36
+ }
37
+ )
38
+ remote_resources = described_class._fetch_remote_resources
39
+ expect(remote_resources.length).to eq 2
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,44 @@
1
+ require_relative '../spec_helper'
2
+
3
+ describe("GeoEngineer::Resources::AwsLoadBalancerPolicy") do
4
+ let(:elb_client) { AwsClients.elb }
5
+
6
+ common_resource_tests(GeoEngineer::Resources::AwsLoadBalancerPolicy,
7
+ 'aws_load_balancer_policy')
8
+
9
+ before { elb_client.setup_stubbing }
10
+
11
+ describe "#_fetch_remote_resources" do
12
+ it 'should create list of hashes from returned AWS SDK' do
13
+ elb_client.stub_responses(
14
+ :describe_load_balancer_policies,
15
+ {
16
+ policy_descriptions: [
17
+ {
18
+ policy_name: "ELBSecurityPolicy-2015-05",
19
+ policy_type_name: "SSLNegotiationPolicyType"
20
+ }
21
+ ]
22
+ }
23
+ )
24
+ elb_client.stub_responses(
25
+ :describe_load_balancers,
26
+ {
27
+ load_balancer_descriptions: [
28
+ {
29
+ load_balancer_name: "test",
30
+ backend_server_descriptions: [
31
+ {
32
+ instance_port: 5000,
33
+ policy_names: ["test"]
34
+ }
35
+ ]
36
+ }
37
+ ]
38
+ }
39
+ )
40
+ remote_resources = GeoEngineer::Resources::AwsLoadBalancerPolicy._fetch_remote_resources
41
+ expect(remote_resources.length).to eq 1
42
+ end
43
+ end
44
+ end
@@ -1,6 +1,6 @@
1
1
  require_relative '../spec_helper'
2
2
 
3
- describe("GeoEngineer::Resources::AwsNetworkAclRule") do
3
+ describe GeoEngineer::Resources::AwsNetworkAclRule do
4
4
  common_resource_tests(GeoEngineer::Resources::AwsNetworkAclRule, 'aws_network_acl_rule')
5
5
 
6
6
  describe "#_fetch_remote_resources" do
@@ -70,4 +70,32 @@ describe("GeoEngineer::Resources::AwsNetworkAclRule") do
70
70
  expect(subject._terraform_id).to eq("nacl-883681663")
71
71
  end
72
72
  end
73
+
74
+ describe '::_number_for_protocol' do
75
+ context "when protocol is nil" do
76
+ it "returns nil" do
77
+ expect(described_class._number_for_protocol(nil)).to eq(nil)
78
+ end
79
+ end
80
+
81
+ context "when protocol is already a integer" do
82
+ it "returns that integer if it is a valid protocol number" do
83
+ expect(described_class._number_for_protocol(-1)).to eq(-1)
84
+ end
85
+
86
+ it "returns nil if it is not a valid protocol number" do
87
+ expect(described_class._number_for_protocol(-2)).to eq(nil)
88
+ end
89
+ end
90
+
91
+ context "when protocol is string" do
92
+ it "returns the corresponding number for valid protocols" do
93
+ expect(described_class._number_for_protocol("all")).to eq(-1)
94
+ end
95
+
96
+ it "returns nil for unrecognized protocols" do
97
+ expect(described_class._number_for_protocol(-2)).to eq(nil)
98
+ end
99
+ end
100
+ end
73
101
  end