geoengineer 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
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