1
1
data "aws_subnet" "subnet" {
2
- id = " ${ var . aws_subnet_id } "
2
+ id = var. aws_subnet_id
3
3
}
4
4
5
5
data "template_file" "services_user_data" {
6
- template = " ${ file (" templates/services_user_data.tpl" )} "
7
-
8
- vars {
9
- circle_secret_passphrase = " ${ var . circle_secret_passphrase } "
10
- sqs_queue_url = " ${ module . shutdown_sqs . sqs_id } "
11
- s3_bucket = " ${ aws_s3_bucket . circleci_bucket . id } "
12
- aws_region = " ${ var . aws_region } "
13
- subnet_id = " ${ var . aws_subnet_id } "
14
- vm_sg_id = " ${ aws_security_group . circleci_vm_sg . id } "
15
- http_proxy = " ${ var . http_proxy } "
16
- https_proxy = " ${ var . https_proxy } "
17
- no_proxy = " ${ var . no_proxy } "
6
+ template = file (" templates/services_user_data.tpl" )
7
+
8
+ vars = {
9
+ circle_secret_passphrase = var.circle_secret_passphrase
10
+ sqs_queue_url = module.shutdown_sqs.sqs_id
11
+ s3_bucket = aws_s3_bucket.circleci_bucket.id
12
+ aws_region = var.aws_region
13
+ subnet_id = var.aws_subnet_id
14
+ vm_sg_id = aws_security_group.circleci_vm_sg.id
15
+ http_proxy = var.http_proxy
16
+ https_proxy = var.https_proxy
17
+ no_proxy = var.no_proxy
18
18
}
19
19
}
20
20
21
21
data "template_file" "circleci_policy" {
22
- template = " ${ file (" templates/circleci_policy.tpl" )} "
22
+ template = file (" templates/circleci_policy.tpl" )
23
23
24
- vars {
25
- bucket_arn = " ${ aws_s3_bucket . circleci_bucket . arn } "
26
- sqs_queue_arn = " ${ module . shutdown_sqs . sqs_arn } "
27
- role_name = " ${ aws_iam_role . circleci_role . name } "
28
- aws_region = " ${ var . aws_region } "
24
+ vars = {
25
+ bucket_arn = aws_s3_bucket.circleci_bucket.arn
26
+ sqs_queue_arn = module.shutdown_sqs.sqs_arn
27
+ role_name = aws_iam_role.circleci_role.name
28
+ aws_region = var.aws_region
29
29
}
30
30
}
31
31
32
32
data "template_file" "output" {
33
- template = " ${ file (" templates/output.tpl" )} "
33
+ template = file (" templates/output.tpl" )
34
34
35
- vars {
36
- services_public_ip = " ${ aws_instance . services . public_ip } "
37
- ssh_key = " ${ var . aws_ssh_key_name } "
35
+ vars = {
36
+ services_public_ip = aws_instance.services.public_ip
37
+ ssh_key = var.aws_ssh_key_name
38
38
}
39
39
}
40
40
41
+ # Access Secret Key and ID should be set using envvars
42
+ # AWS_ACCESS_KEY_ID
43
+ # AWS_SECRET_ACCESS_KEY
41
44
provider "aws" {
42
- access_key = " ${ var . aws_access_key } "
43
- secret_key = " ${ var . aws_secret_key } "
44
- region = " ${ var . aws_region } "
45
+ access_key = var. aws_access_key
46
+ secret_key = var. aws_secret_key
47
+ region = var. aws_region
45
48
}
46
49
47
50
module "shutdown_sqs" {
48
51
source = " ./modules/aws_sqs"
49
52
name = " shutdown"
50
- prefix = " ${ var . prefix } "
53
+ prefix = var. prefix
51
54
}
52
55
53
56
# Single general-purpose bucket
@@ -63,34 +66,34 @@ resource "aws_s3_bucket" "circleci_bucket" {
63
66
max_age_seconds = 3600
64
67
}
65
68
66
- force_destroy = " ${ var . force_destroy_s3_bucket } "
69
+ force_destroy = var. force_destroy_s3_bucket
67
70
}
68
71
69
72
# # IAM for instances
70
73
71
74
resource "aws_iam_role" "circleci_role" {
72
75
name = " ${ var . prefix } _role"
73
76
path = " /"
74
- assume_role_policy = " ${ file (" files/circleci_role.json" )} "
77
+ assume_role_policy = file (" files/circleci_role.json" )
75
78
}
76
79
77
80
resource "aws_iam_role_policy" "circleci_policy" {
78
81
name = " ${ var . prefix } _policy"
79
- role = " ${ aws_iam_role . circleci_role . id } "
80
- policy = " ${ data . template_file . circleci_policy . rendered } "
82
+ role = aws_iam_role. circleci_role . id
83
+ policy = data. template_file . circleci_policy . rendered
81
84
}
82
85
83
86
resource "aws_iam_instance_profile" "circleci_profile" {
84
87
name = " ${ var . prefix } _profile"
85
- role = " ${ aws_iam_role . circleci_role . name } "
88
+ role = aws_iam_role. circleci_role . name
86
89
}
87
90
88
91
# # Configure the services machine
89
92
90
93
resource "aws_security_group" "circleci_builders_sg" {
91
94
name = " ${ var . prefix } _builders_sg"
92
95
description = " SG for CircleCI Builder instances"
93
- vpc_id = " ${ var . aws_vpc_id } "
96
+ vpc_id = var. aws_vpc_id
94
97
95
98
ingress {
96
99
self = true
@@ -110,10 +113,10 @@ resource "aws_security_group" "circleci_builders_sg" {
110
113
resource "aws_security_group" "circleci_services_sg" {
111
114
name = " ${ var . prefix } _services_sg"
112
115
description = " SG for CircleCI services/database instances"
113
- vpc_id = " ${ var . aws_vpc_id } "
116
+ vpc_id = var. aws_vpc_id
114
117
115
118
ingress {
116
- security_groups = [" ${ aws_security_group . circleci_builders_sg . id } " ]
119
+ security_groups = [aws_security_group . circleci_builders_sg . id ]
117
120
protocol = " -1"
118
121
from_port = 0
119
122
to_port = 0
@@ -125,7 +128,6 @@ resource "aws_security_group" "circleci_services_sg" {
125
128
protocol = " -1"
126
129
cidr_blocks = [" 0.0.0.0/0" ]
127
130
}
128
-
129
131
# If using github.com (not GitHub Enterprise) whitelist GitHub cidr block
130
132
# https://help.github.com/articles/what-ip-addresses-does-github-use-that-i-should-whitelist/
131
133
#
@@ -146,10 +148,10 @@ resource "aws_security_group" "circleci_services_sg" {
146
148
resource "aws_security_group" "circleci_builders_admin_sg" {
147
149
name = " ${ var . prefix } _builders_admin_sg"
148
150
description = " SG for services to masters communication - avoids circular dependency"
149
- vpc_id = " ${ var . aws_vpc_id } "
151
+ vpc_id = var. aws_vpc_id
150
152
151
153
ingress {
152
- security_groups = [" ${ aws_security_group . circleci_services_sg . id } " ]
154
+ security_groups = [aws_security_group . circleci_services_sg . id ]
153
155
protocol = " tcp"
154
156
from_port = 443
155
157
to_port = 443
@@ -164,7 +166,7 @@ resource "aws_security_group" "circleci_users_sg" {
164
166
name = " ${ var . prefix } _users_sg"
165
167
description = " SG representing users of CircleCI Enterprise"
166
168
167
- vpc_id = " ${ var . aws_vpc_id } "
169
+ vpc_id = var. aws_vpc_id
168
170
169
171
ingress {
170
172
cidr_blocks = [" 0.0.0.0/0" ]
@@ -197,31 +199,31 @@ resource "aws_security_group" "circleci_users_sg" {
197
199
198
200
# For Nomad server in 2.0 clustered installation
199
201
ingress {
200
- cidr_blocks = [" ${ data . aws_subnet . subnet . cidr_block } " ]
202
+ cidr_blocks = [data . aws_subnet . subnet . cidr_block ]
201
203
protocol = " tcp"
202
204
from_port = 4647
203
205
to_port = 4647
204
206
}
205
207
206
208
# For output-processor in 2.0 clustered installation
207
209
ingress {
208
- cidr_blocks = [" ${ data . aws_subnet . subnet . cidr_block } " ]
210
+ cidr_blocks = [data . aws_subnet . subnet . cidr_block ]
209
211
protocol = " tcp"
210
212
from_port = 8585
211
213
to_port = 8585
212
214
}
213
215
214
216
# For embedded storage in 2.0 clustered installation
215
217
ingress {
216
- cidr_blocks = [" ${ data . aws_subnet . subnet . cidr_block } " ]
218
+ cidr_blocks = [data . aws_subnet . subnet . cidr_block ]
217
219
protocol = " tcp"
218
220
from_port = 7171
219
221
to_port = 7171
220
222
}
221
223
222
224
# For build-agent to talk to vm-service
223
225
ingress {
224
- cidr_blocks = [" ${ data . aws_subnet . subnet . cidr_block } " ]
226
+ cidr_blocks = [data . aws_subnet . subnet . cidr_block ]
225
227
protocol = " tcp"
226
228
from_port = 3001
227
229
to_port = 3001
@@ -241,7 +243,7 @@ resource "aws_security_group" "circleci_vm_sg" {
241
243
name = " ${ var . prefix } _vm_sg"
242
244
description = " SG for VMs allocated by CircleCI for Remote Docker and machine executor"
243
245
244
- vpc_id = " ${ var . aws_vpc_id } "
246
+ vpc_id = var. aws_vpc_id
245
247
246
248
ingress {
247
249
cidr_blocks = [" 0.0.0.0/0" ]
@@ -275,103 +277,103 @@ resource "aws_security_group" "circleci_vm_sg" {
275
277
}
276
278
277
279
resource "aws_instance" "services" {
278
- instance_type = " ${ var . services_instance_type } "
279
- ami = " ${ var . services_ami != " " ? var . services_ami : lookup ( var. ubuntu_ami , var. aws_region ) } "
280
- key_name = " ${ var . aws_ssh_key_name } "
281
- subnet_id = " ${ var . aws_subnet_id } "
280
+ instance_type = var. services_instance_type
281
+ ami = var. services_ami != " " ? var. services_ami : var. ubuntu_ami [ var . aws_region ]
282
+ key_name = var. aws_ssh_key_name
283
+ subnet_id = var. aws_subnet_id
282
284
associate_public_ip_address = true
283
- disable_api_termination = " ${ var . services_disable_api_termination } "
284
- iam_instance_profile = " ${ aws_iam_instance_profile . circleci_profile . name } "
285
+ disable_api_termination = var. services_disable_api_termination
286
+ iam_instance_profile = aws_iam_instance_profile. circleci_profile . name
285
287
286
288
vpc_security_group_ids = [
287
- " ${ aws_security_group . circleci_services_sg . id } " ,
288
- " ${ aws_security_group . circleci_users_sg . id } " ,
289
+ aws_security_group . circleci_services_sg . id ,
290
+ aws_security_group . circleci_users_sg . id ,
289
291
]
290
292
291
- tags {
293
+ tags = {
292
294
Name = " ${ var . prefix } _services"
293
295
}
294
296
295
297
root_block_device {
296
298
volume_type = " gp2"
297
299
volume_size = " 150"
298
- delete_on_termination = " ${ var . services_delete_on_termination } "
300
+ delete_on_termination = var. services_delete_on_termination
299
301
}
300
302
301
- user_data = " ${ var . services_user_data_enabled ? data . template_file . services_user_data . rendered : " " } "
303
+ user_data = var. services_user_data_enabled ? data. template_file . services_user_data . rendered : " "
302
304
303
305
lifecycle {
304
306
prevent_destroy = false
305
307
}
306
308
}
307
309
308
310
resource "aws_route53_record" "services_route" {
309
- count = " ${ var . enable_route } "
310
- zone_id = " ${ var . route_zone_id } "
311
- name = " ${ var . route_name } "
311
+ count = var. enable_route
312
+ zone_id = var. route_zone_id
313
+ name = var. route_name
312
314
type = " A"
313
315
ttl = " 300"
314
- records = [" ${ aws_instance . services . public_ip } " ]
316
+ records = [aws_instance . services . public_ip ]
315
317
}
316
318
317
319
# # Builders ASG
318
320
module "legacy_builder_user_data" {
319
321
source = " ./modules/legacy-builder-cloudinit-ubuntu-docker-v1"
320
322
321
- services_private_ip = " ${ aws_instance . services . private_ip } "
323
+ services_private_ip = aws_instance. services . private_ip
322
324
323
- circle_secret_passphrase = " ${ var . circle_secret_passphrase } "
324
- https_proxy = " ${ var . https_proxy } "
325
- http_proxy = " ${ var . http_proxy } "
326
- no_proxy = " ${ var . no_proxy } "
325
+ circle_secret_passphrase = var. circle_secret_passphrase
326
+ https_proxy = var. https_proxy
327
+ http_proxy = var. http_proxy
328
+ no_proxy = var. no_proxy
327
329
}
328
330
329
331
module "legacy_builder" {
330
332
source = " ./modules/legacy-builder"
331
333
332
- prefix = " ${ var . prefix } "
334
+ prefix = var. prefix
333
335
name = " builders"
334
- aws_subnet_id = " ${ var . aws_subnet_id } "
335
- aws_ssh_key_name = " ${ var . aws_ssh_key_name } "
336
- aws_instance_profile_name = " ${ aws_iam_instance_profile . circleci_profile . name } "
336
+ aws_subnet_id = var. aws_subnet_id
337
+ aws_ssh_key_name = var. aws_ssh_key_name
338
+ aws_instance_profile_name = aws_iam_instance_profile. circleci_profile . name
337
339
338
340
builder_security_group_ids = [
339
- " ${ aws_security_group . circleci_builders_sg . id } " ,
340
- " ${ aws_security_group . circleci_builders_admin_sg . id } " ,
341
- " ${ aws_security_group . circleci_users_sg . id } " ,
341
+ aws_security_group . circleci_builders_sg . id ,
342
+ aws_security_group . circleci_builders_admin_sg . id ,
343
+ aws_security_group . circleci_users_sg . id ,
342
344
]
343
345
344
- asg_max_size = " ${ var . max_builders_count } "
346
+ asg_max_size = var. max_builders_count
345
347
asg_min_size = 0
346
- asg_desired_size = " ${ var . desired_builders_count } "
347
-
348
- user_data = " ${ module . legacy_builder_user_data . rendered } "
349
- delete_volume_on_termination = " ${ var . services_delete_on_termination } "
350
- image_id = " ${ lookup ( var. ubuntu_ami , var. aws_region ) } "
351
- instance_type = " ${ var . builder_instance_type } "
352
- spot_price = " ${ var . legacy_builder_spot_price } "
353
- shutdown_queue_target_sqs_arn = " ${ module . shutdown_sqs . sqs_arn } "
354
- shutdown_queue_role_arn = " ${ module . shutdown_sqs . queue_role_arn } "
348
+ asg_desired_size = var. desired_builders_count
349
+
350
+ user_data = module. legacy_builder_user_data . rendered
351
+ delete_volume_on_termination = var. services_delete_on_termination
352
+ image_id = var. ubuntu_ami [ var . aws_region ]
353
+ instance_type = var. builder_instance_type
354
+ spot_price = var. legacy_builder_spot_price
355
+ shutdown_queue_target_sqs_arn = module. shutdown_sqs . sqs_arn
356
+ shutdown_queue_role_arn = module. shutdown_sqs . queue_role_arn
355
357
}
356
358
357
359
module "nomad" {
358
360
source = " ./modules/nomad"
359
- enabled = " ${ var . enable_nomad } "
360
- prefix = " ${ var . prefix } "
361
- instance_type = " ${ var . nomad_client_instance_type } "
362
- aws_vpc_id = " ${ var . aws_vpc_id } "
363
- aws_subnet_id = " ${ var . aws_subnet_id } "
364
- aws_ssh_key_name = " ${ var . aws_ssh_key_name } "
365
- http_proxy = " ${ var . http_proxy } "
366
- https_proxy = " ${ var . https_proxy } "
367
- no_proxy = " ${ var . no_proxy } "
368
- ami_id = " ${ ( var. services_ami != " " ) ? var . services_ami : lookup ( var. ubuntu_ami , var. aws_region ) } "
369
- aws_subnet_cidr_block = " ${ data . aws_subnet . subnet . cidr_block } "
370
- services_private_ip = " ${ aws_instance . services . private_ip } "
361
+ enabled = var. enable_nomad
362
+ prefix = var. prefix
363
+ instance_type = var. nomad_client_instance_type
364
+ aws_vpc_id = var. aws_vpc_id
365
+ aws_subnet_id = var. aws_subnet_id
366
+ aws_ssh_key_name = var. aws_ssh_key_name
367
+ http_proxy = var. http_proxy
368
+ https_proxy = var. https_proxy
369
+ no_proxy = var. no_proxy
370
+ ami_id = var. services_ami != " " ? var. services_ami : var. ubuntu_ami [ var . aws_region ]
371
+ aws_subnet_cidr_block = data. aws_subnet . subnet . cidr_block
372
+ services_private_ip = aws_instance. services . private_ip
371
373
}
372
374
373
375
output "success_message" {
374
- value = " ${ data . template_file . output . rendered } "
376
+ value = data. template_file . output . rendered
375
377
}
376
378
377
379
output "install_url" {
@@ -381,3 +383,4 @@ output "install_url" {
381
383
output "ssh-services" {
382
384
value = " ssh ubuntu@${ aws_instance . services . public_ip } "
383
385
}
386
+
0 commit comments