Skip to content

Commit 5fc06d7

Browse files
committed
[#323] Move locals out of main file and create dedicated locals and data files
1 parent 4de2822 commit 5fc06d7

File tree

9 files changed

+83
-98
lines changed

9 files changed

+83
-98
lines changed

src/commands/generate/index.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,9 @@ describe('Generator command', () => {
6565
expect(postProcess).toHaveBeenCalledTimes(1);
6666
});
6767

68-
it('contains processed project name in main files', () => {
69-
const mainFiles = ['shared/main.tf', 'core/main.tf'];
70-
mainFiles.forEach((fileName) => {
68+
it('contains processed project name in locals files', () => {
69+
const localsFiles = ['shared/locals.tf', 'core/locals.tf'];
70+
localsFiles.forEach((fileName) => {
7171
expect(processedDirectoryName).toHaveContentInFile(
7272
fileName,
7373
`project_name = "${processedDirectoryName}"`,

src/generators/addons/aws/index.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import {
1010
applyAwsRegion,
1111
applyAwsSecurityGroup,
1212
applyAwsVpc,
13-
applyTerraformAwsData,
1413
} from './modules';
1514

1615
const awsChoices = [
@@ -67,7 +66,6 @@ const generateAwsTemplate = async (
6766

6867
case 'advanced':
6968
await applyProviderAndRegion(awsOptions);
70-
await applyTerraformAwsData(awsOptions);
7169
await applyAwsVpc(awsOptions);
7270
await applyAwsSecurityGroup(awsOptions);
7371
await applyAwsIamUserAndGroup(awsOptions);

src/generators/addons/aws/modules/alb.ts

Lines changed: 52 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,64 @@ import {
66
requireAwsModules,
77
} from '@/generators/addons/aws/dependencies';
88
import {
9+
INFRA_CORE_DATA_PATH,
10+
INFRA_CORE_LOCALS_PATH,
911
INFRA_CORE_MAIN_PATH,
1012
INFRA_CORE_OUTPUTS_PATH,
1113
INFRA_CORE_VARIABLES_PATH,
14+
MODULES_LOCALS_INDICATOR,
1215
} from '@/generators/terraform/constants';
13-
import { appendToFile, copy } from '@/helpers/file';
16+
import { appendToFile, copy, injectToFile } from '@/helpers/file';
1417

1518
import {
1619
AWS_SECURITY_GROUP_MAIN_PATH,
1720
AWS_SECURITY_GROUP_OUTPUTS_PATH,
1821
AWS_TEMPLATE_PATH,
1922
} from '../constants';
2023

24+
const albLocalesContent = dedent`
25+
###ALB Locals###
26+
alb_s3_bucket_policy = {
27+
Version = "2012-10-17"
28+
Statement = [
29+
{
30+
Effect = "Allow"
31+
Principal = {
32+
AWS = [
33+
"\${data.aws_elb_service_account.elb_service_account.arn}"
34+
]
35+
}
36+
Action = "s3:PutObject"
37+
Resource = "arn:aws:s3:::\${module.s3_alb_access_log.aws_s3_bucket_name}/AWSLogs/*"
38+
},
39+
{
40+
Effect = "Allow",
41+
Principal = {
42+
Service = "delivery.logs.amazonaws.com"
43+
}
44+
Action = "s3:PutObject"
45+
Resource = "arn:aws:s3:::\${module.s3_alb_access_log.aws_s3_bucket_name}/AWSLogs/*",
46+
Condition = {
47+
StringEquals = {
48+
"s3:x-amz-acl" = "bucket-owner-full-control"
49+
}
50+
}
51+
},
52+
{
53+
Effect = "Allow",
54+
Principal = {
55+
Service = "delivery.logs.amazonaws.com"
56+
}
57+
Action = "s3:GetBucketAcl"
58+
Resource = "arn:aws:s3:::\${module.s3_alb_access_log.aws_s3_bucket_name}"
59+
}
60+
]
61+
}`;
62+
63+
const albDataContent = dedent`
64+
###ALB Locals###
65+
data "aws_elb_service_account" "elb_service_account" {}`;
66+
2167
const albVariablesContent = dedent`
2268
variable "health_check_path" {
2369
description = "Application health check path"
@@ -54,42 +100,7 @@ const albModuleContent = dedent`
54100
source = "../modules/s3/bucket_policy"
55101
56102
s3_bucket_name = module.s3_alb_access_log.aws_s3_bucket_name
57-
s3_bucket_policy = {
58-
Version = "2012-10-17"
59-
Statement = [
60-
{
61-
Effect = "Allow"
62-
Principal = {
63-
AWS = [
64-
"\${data.aws_elb_service_account.elb_service_account.arn}"
65-
]
66-
}
67-
Action = "s3:PutObject"
68-
Resource = "arn:aws:s3:::\${module.s3_alb_access_log.aws_s3_bucket_name}/AWSLogs/*"
69-
},
70-
{
71-
Effect = "Allow",
72-
Principal = {
73-
Service = "delivery.logs.amazonaws.com"
74-
}
75-
Action = "s3:PutObject"
76-
Resource = "arn:aws:s3:::\${module.s3_alb_access_log.aws_s3_bucket_name}/AWSLogs/*",
77-
Condition = {
78-
StringEquals = {
79-
"s3:x-amz-acl" = "bucket-owner-full-control"
80-
}
81-
}
82-
},
83-
{
84-
Effect = "Allow",
85-
Principal = {
86-
Service = "delivery.logs.amazonaws.com"
87-
}
88-
Action = "s3:GetBucketAcl"
89-
Resource = "arn:aws:s3:::\${module.s3_alb_access_log.aws_s3_bucket_name}"
90-
}
91-
]
92-
}
103+
s3_bucket_policy = local.alb_s3_bucket_policy
93104
}`;
94105

95106
const albOutputsContent = dedent`
@@ -155,6 +166,10 @@ const applyAwsAlb = async (options: AwsOptions) => {
155166
await requireAwsModules('alb', 'securityGroup', options);
156167

157168
copy(`${AWS_TEMPLATE_PATH}/modules/alb`, 'modules/alb', options.projectName);
169+
injectToFile(INFRA_CORE_LOCALS_PATH, albLocalesContent, options.projectName, {
170+
insertAfter: MODULES_LOCALS_INDICATOR,
171+
});
172+
appendToFile(INFRA_CORE_DATA_PATH, albDataContent, options.projectName);
158173
appendToFile(INFRA_CORE_MAIN_PATH, albModuleContent, options.projectName);
159174
appendToFile(
160175
INFRA_CORE_VARIABLES_PATH,

src/generators/addons/aws/modules/core/data.test.ts

Lines changed: 0 additions & 29 deletions
This file was deleted.

src/generators/addons/aws/modules/core/data.ts

Lines changed: 0 additions & 14 deletions
This file was deleted.

src/generators/addons/aws/modules/index.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import applyAwsAlb from './alb';
22
import applyAwsBastion from './bastion';
33
import applyAwsCloudwatch from './cloudwatch';
4-
import applyTerraformAwsData from './core/data';
54
import applyAwsIamUserAndGroup from './core/iamUserAndGroup';
65
import applyTerraformAwsProvider from './core/provider';
76
import applyAwsRegion from './core/region';
@@ -17,7 +16,6 @@ export {
1716
applyAwsAlb,
1817
applyAwsBastion,
1918
applyTerraformAwsProvider,
20-
applyTerraformAwsData,
2119
applyAwsCloudwatch,
2220
applyAwsEcr,
2321
applyAwsEcs,

src/generators/terraform/constants.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,30 @@ const INFRA_CORE_PATH = 'core/';
22
const INFRA_CORE_MAIN_PATH = `${INFRA_CORE_PATH}/main.tf`;
33
const INFRA_CORE_OUTPUTS_PATH = `${INFRA_CORE_PATH}/outputs.tf`;
44
const INFRA_CORE_VARIABLES_PATH = `${INFRA_CORE_PATH}/variables.tf`;
5+
const INFRA_CORE_LOCALS_PATH = `${INFRA_CORE_PATH}/locals.tf`;
6+
const INFRA_CORE_DATA_PATH = `${INFRA_CORE_PATH}/data.tf`;
57

68
const INFRA_SHARED_PATH = 'shared';
79
const INFRA_SHARED_MAIN_PATH = `${INFRA_SHARED_PATH}/main.tf`;
810
const INFRA_SHARED_OUTPUTS_PATH = `${INFRA_SHARED_PATH}/outputs.tf`;
911
const INFRA_SHARED_VARIABLES_PATH = `${INFRA_SHARED_PATH}/variables.tf`;
12+
const INFRA_SHARED_LOCALS_PATH = `${INFRA_SHARED_PATH}/locals.tf`;
13+
const INFRA_SHARED_DATA_PATH = `${INFRA_SHARED_PATH}/data.tf`;
14+
15+
const MODULES_LOCALS_INDICATOR = `### Modules Locals ###`;
1016

1117
export {
1218
INFRA_CORE_PATH,
1319
INFRA_CORE_MAIN_PATH,
1420
INFRA_CORE_OUTPUTS_PATH,
1521
INFRA_CORE_VARIABLES_PATH,
22+
INFRA_CORE_LOCALS_PATH,
23+
INFRA_CORE_DATA_PATH,
1624
INFRA_SHARED_PATH,
1725
INFRA_SHARED_MAIN_PATH,
1826
INFRA_SHARED_OUTPUTS_PATH,
1927
INFRA_SHARED_VARIABLES_PATH,
28+
INFRA_SHARED_LOCALS_PATH,
29+
INFRA_SHARED_DATA_PATH,
30+
MODULES_LOCALS_INDICATOR,
2031
};

src/generators/terraform/index.ts

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@ import { dedent } from 'ts-dedent';
22

33
import { GeneralOptions } from '@/commands/generate';
44
import {
5-
INFRA_CORE_MAIN_PATH,
6-
INFRA_SHARED_MAIN_PATH,
5+
INFRA_CORE_LOCALS_PATH,
6+
INFRA_SHARED_LOCALS_PATH,
7+
INFRA_CORE_DATA_PATH,
8+
MODULES_LOCALS_INDICATOR,
79
} from '@/generators/terraform/constants';
810
import { copy, rename, appendToFile } from '@/helpers/file';
911

@@ -13,13 +15,20 @@ const applyTerraformCore = async (generalOptions: GeneralOptions) => {
1315
copy('terraform/', '.', projectName);
1416

1517
const coreLocalsContent = dedent`
16-
locals {
17-
project_name = "${projectName}"
18-
env_namespace = "\${local.project_name}-\${var.environment}"
19-
}`;
18+
locals {
19+
project_name = "${projectName}"
20+
env_namespace = "\${local.project_name}-\${var.environment}"
2021
21-
appendToFile(INFRA_CORE_MAIN_PATH, coreLocalsContent, projectName);
22-
appendToFile(INFRA_SHARED_MAIN_PATH, coreLocalsContent, projectName);
22+
${MODULES_LOCALS_INDICATOR}
23+
}`;
24+
25+
const coreDatContent = dedent`
26+
data "aws_caller_identity" "current" {}
27+
data "aws_partition" "current" {}`;
28+
29+
appendToFile(INFRA_CORE_LOCALS_PATH, coreLocalsContent, projectName);
30+
appendToFile(INFRA_SHARED_LOCALS_PATH, coreLocalsContent, projectName);
31+
appendToFile(INFRA_CORE_DATA_PATH, coreDatContent, projectName);
2332

2433
// Need to rename .gitignore to gitignore because NPN package doesn't include .gitignore
2534
// https://github.com/npm/npm/issues/3763

templates/addons/aws/data.tf

Lines changed: 0 additions & 3 deletions
This file was deleted.

0 commit comments

Comments
 (0)