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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/README.md +18 -8
- data/lib/geoengineer/cli/geo_cli.rb +4 -1
- data/lib/geoengineer/environment.rb +1 -1
- data/lib/geoengineer/resources/aws_cloudtrail.rb +20 -0
- data/lib/geoengineer/resources/aws_cloudwatch_event_rule.rb +26 -0
- data/lib/geoengineer/resources/aws_cloudwatch_event_target.rb +50 -0
- data/lib/geoengineer/resources/aws_db_instance.rb +5 -1
- data/lib/geoengineer/resources/aws_dynamodb_table.rb +24 -0
- data/lib/geoengineer/resources/aws_elasticache_cluster.rb +22 -9
- data/lib/geoengineer/resources/aws_iam_policy.rb +1 -0
- data/lib/geoengineer/resources/aws_iam_role_policy.rb +63 -0
- data/lib/geoengineer/resources/aws_kinesis_stream.rb +40 -0
- data/lib/geoengineer/resources/aws_lambda_alias.rb +18 -3
- data/lib/geoengineer/resources/aws_lambda_function.rb +11 -0
- data/lib/geoengineer/resources/aws_lambda_permission.rb +9 -0
- data/lib/geoengineer/resources/aws_load_balancer_backend_server_policy.rb +48 -0
- data/lib/geoengineer/resources/aws_load_balancer_policy.rb +43 -0
- data/lib/geoengineer/resources/aws_network_acl_rule.rb +27 -2
- data/lib/geoengineer/resources/aws_redshift_cluster.rb +10 -4
- data/lib/geoengineer/resources/aws_route.rb +2 -0
- data/lib/geoengineer/resources/aws_vpn_gateway_attachment.rb +8 -0
- data/lib/geoengineer/sub_resource.rb +13 -3
- data/lib/geoengineer/utils/aws_clients.rb +18 -2
- data/lib/geoengineer/utils/has_projects.rb +3 -1
- data/lib/geoengineer/utils/has_validations.rb +7 -0
- data/lib/geoengineer/version.rb +1 -1
- data/spec/resource_spec.rb +14 -0
- data/spec/resources/aws_cloudtrail_spec.rb +35 -0
- data/spec/resources/aws_cloudwatch_event_rule_spec.rb +33 -0
- data/spec/resources/aws_cloudwatch_event_target_spec.rb +54 -0
- data/spec/resources/aws_dynamodb_table_spec.rb +24 -0
- data/spec/resources/aws_iam_role_spec.rb +21 -18
- data/spec/resources/aws_iam_rule_policy_spec.rb +49 -0
- data/spec/resources/{aws_iam_user.rb → aws_iam_user_spec.rb} +9 -6
- data/spec/resources/aws_kinesis_stream_spec.rb +52 -0
- data/spec/resources/aws_lambda_alias_spec.rb +22 -3
- data/spec/resources/aws_load_balancer_backend_server_policy_spec.rb +42 -0
- data/spec/resources/aws_load_balancer_policy_spec.rb +44 -0
- data/spec/resources/aws_network_acl_rule_spec.rb +29 -1
- data/spec/resources/{aws_ses_receipt_rule_set.rb → aws_ses_receipt_rule_set_spec.rb} +13 -6
- data/spec/resources/{aws_ses_receipt_rule.rb → aws_ses_receipt_rule_spec.rb} +6 -5
- data/spec/resources/{aws_sns_topic_subscription.rb → aws_sns_topic_subscription_spec.rb} +0 -0
- data/spec/resources/aws_subnet_spec.rb +2 -2
- data/spec/resources/aws_vpc_dhcp_options_association_spec.rb +2 -2
- data/spec/resources/aws_vpc_spec.rb +2 -2
- data/spec/sub_resource_spec.rb +12 -0
- data/spec/utils/has_subresources_spec.rb +9 -0
- data/spec/utils/has_validations_spec.rb +23 -3
- metadata +34 -10
- 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,
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
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
|
-
|
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
|
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
|
-
{
|
16
|
-
|
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
|
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
|