Skip to content

Commit e58d2c9

Browse files
committed
separate docker autoscaler variables from docker machine
1 parent 6845876 commit e58d2c9

File tree

4 files changed

+147
-51
lines changed

4 files changed

+147
-51
lines changed

Diff for: data.tf

+17-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ data "aws_ami" "runner" {
2727
}
2828

2929
data "aws_ami" "docker-machine" {
30-
count = contains(["docker+machine", "docker-autoscaler"], var.runner_worker.type) ? 1 : 0
30+
count = var.runner_worker.type == "docker+machine" ? 1 : 0
3131

3232
most_recent = "true"
3333

@@ -41,3 +41,19 @@ data "aws_ami" "docker-machine" {
4141

4242
owners = var.runner_worker_docker_machine_ami_owners
4343
}
44+
45+
data "aws_ami" "docker-autoscaler" {
46+
count = var.runner_worker.type == "docker-autoscaler" ? 1 : 0
47+
48+
most_recent = "true"
49+
50+
dynamic "filter" {
51+
for_each = var.runner_worker_docker_autoscaler_ami_filter
52+
content {
53+
name = filter.key
54+
values = filter.value
55+
}
56+
}
57+
58+
owners = var.runner_worker_docker_autoscaler_ami_owners
59+
}

Diff for: docker_autoscaler.tf

+26-16
Original file line numberDiff line numberDiff line change
@@ -61,33 +61,33 @@ resource "aws_launch_template" "this" {
6161
count = var.runner_worker.type == "docker-autoscaler" ? 1 : 0
6262

6363
name = "${local.name_runner_agent_instance}-worker-launch-template"
64-
user_data = base64gzip(var.runner_worker_docker_machine_instance.start_script)
65-
image_id = data.aws_ami.docker-machine[0].id
66-
instance_type = var.runner_worker_docker_machine_instance.types[0]
64+
user_data = base64gzip(var.runner_worker_docker_autoscaler_asg.start_script)
65+
image_id = data.aws_ami.docker-autoscaler[0].id
66+
instance_type = var.runner_worker_docker_autoscaler_asg.types[0]
6767
key_name = aws_key_pair.autoscaler[0].key_name
68-
ebs_optimized = var.runner_worker_docker_machine_instance.ebs_optimized
68+
ebs_optimized = var.runner_worker_docker_autoscaler_asg.ebs_optimized
6969

7070
monitoring {
71-
enabled = var.runner_worker_docker_machine_instance.monitoring
71+
enabled = var.runner_worker_docker_autoscaler_asg.monitoring
7272
}
7373

7474
iam_instance_profile {
75-
name = aws_iam_instance_profile.docker_machine[0].name
75+
name = aws_iam_instance_profile.docker_autoscaler[0].name
7676
}
7777

7878
network_interfaces {
7979
security_groups = [aws_security_group.docker_autoscaler[0].id]
80-
associate_public_ip_address = !var.runner_worker_docker_machine_instance.private_address_only
80+
associate_public_ip_address = !var.runner_worker_docker_autoscaler_asg.private_address_only
8181
}
8282

8383
block_device_mappings {
8484
device_name = "/dev/sda1"
8585

8686
ebs {
87-
volume_size = var.runner_worker_docker_machine_instance.root_size
88-
volume_type = var.runner_worker_docker_machine_instance.volume_type
89-
iops = contains(["gp3", "io1", "io2"], var.runner_worker_docker_machine_instance.volume_type) ? var.runner_worker_docker_machine_instance.volume_iops : null
90-
throughput = var.runner_worker_docker_machine_instance.volume_type == "gp3" ? var.runner_worker_docker_machine_instance.volume_throughput : null
87+
volume_size = var.runner_worker_docker_autoscaler_asg.root_size
88+
volume_type = var.runner_worker_docker_autoscaler_asg.volume_type
89+
iops = contains(["gp3", "io1", "io2"], var.runner_worker_docker_autoscaler_asg.volume_type) ? var.runner_worker_docker_autoscaler_asg.volume_iops : null
90+
throughput = var.runner_worker_docker_autoscaler_asg.volume_type == "gp3" ? var.runner_worker_docker_autoscaler_asg.volume_throughput : null
9191
}
9292
}
9393

@@ -104,8 +104,8 @@ resource "aws_launch_template" "this" {
104104
tags = local.tags
105105

106106
metadata_options {
107-
http_tokens = var.runner_worker_docker_machine_ec2_metadata_options.http_tokens
108-
http_put_response_hop_limit = var.runner_worker_docker_machine_ec2_metadata_options.http_put_response_hop_limit
107+
http_tokens = var.runner_worker_docker_autoscaler_asg.http_tokens
108+
http_put_response_hop_limit = var.runner_worker_docker_autoscaler_asg.http_put_response_hop_limit
109109
instance_metadata_tags = "enabled"
110110
}
111111

@@ -147,7 +147,7 @@ resource "aws_autoscaling_group" "autoscaler" {
147147
version = aws_launch_template.this[0].latest_version
148148
}
149149
dynamic "override" {
150-
for_each = var.runner_worker_docker_machine_instance.types
150+
for_each = var.runner_worker_docker_autoscaler_asg.types
151151
content {
152152
instance_type = override.value
153153
}
@@ -156,11 +156,21 @@ resource "aws_autoscaling_group" "autoscaler" {
156156
}
157157
}
158158

159+
dynamic "instance_refresh" {
160+
for_each = var.runner_worker_docker_autoscaler_asg.upgrade_strategy == "rolling" ? [1] : []
161+
content {
162+
strategy = "Rolling"
163+
preferences {
164+
min_healthy_percentage = var.runner_worker_docker_autoscaler_asg.instance_refresh_min_healthy_percentage
165+
}
166+
triggers = var.runner_worker_docker_autoscaler_asg.instance_refresh_triggers
167+
}
168+
}
159169

160-
vpc_zone_identifier = var.runner_worker_docker_machine_instance.subnet_ids
170+
vpc_zone_identifier = var.runner_worker_docker_autoscaler_asg.subnet_ids
161171
max_size = var.runner_worker.max_jobs
162172
min_size = 0 # Will be overwrite by runner idle count
163-
desired_capacity = var.runner_worker_docker_machine_instance.idle_count
173+
desired_capacity = var.runner_worker_docker_autoscaler_asg.idle_count
164174
health_check_grace_period = var.runner_worker_docker_autoscaler_asg.health_check_grace_period
165175
health_check_type = var.runner_worker_docker_autoscaler_asg.health_check_type
166176
force_delete = true

Diff for: main.tf

+33-34
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,8 @@ locals {
127127
runners_capacity_per_instance = 1
128128
runners_max_use_count = var.runner_worker_docker_autoscaler.max_use_count
129129
runners_max_instances = var.runner_worker.max_jobs
130-
runners_idle_count = var.runner_worker_docker_machine_instance.idle_count
131-
runners_idle_time = format("%dm%ds", floor(var.runner_worker_docker_machine_instance.idle_time / 60), var.runner_worker_docker_machine_instance.idle_time % 60)
130+
runners_idle_count = var.runner_worker_docker_autoscaler_asg.idle_count
131+
runners_idle_time = format("%dm%ds", floor(var.runner_worker_docker_autoscaler_asg.idle_time / 60), var.runner_worker_docker_machine_instance.idle_time % 60)
132132
})
133133

134134
template_runner_config = templatefile("${path.module}/template/runner-config.tftpl",
@@ -141,37 +141,12 @@ locals {
141141
for key, value in config :
142142
# Convert key from snake_case to PascalCase which is the casing for this section.
143143
join("", [for subkey in split("_", key) : title(subkey)]) => jsonencode(value) if value != null
144-
}]
145-
runners_vpc_id = var.vpc_id
146-
runners_subnet_id = var.subnet_id
147-
runners_subnet_ids = length(var.runner_worker_docker_machine_instance.subnet_ids) > 0 ? var.runner_worker_docker_machine_instance.subnet_ids : [var.subnet_id]
148-
runners_aws_zone = data.aws_availability_zone.runners.name_suffix
149-
runners_instance_types = var.runner_worker_docker_machine_instance.types
150-
runners_spot_price_bid = var.runner_worker_docker_machine_instance_spot.max_price == "on-demand-price" || var.runner_worker_docker_machine_instance_spot.max_price == null ? "" : var.runner_worker_docker_machine_instance_spot.max_price
151-
runners_ami = var.runner_worker.type == "docker+machine" ? data.aws_ami.docker-machine[0].id : ""
152-
runners_security_group_name = var.runner_worker.type == "docker+machine" ? aws_security_group.docker_machine[0].name : ""
153-
runners_max_growth_rate = var.runner_worker_docker_machine_instance.max_growth_rate
154-
runners_monitoring = var.runner_worker_docker_machine_instance.monitoring
155-
runners_ebs_optimized = var.runner_worker_docker_machine_instance.ebs_optimized
156-
runners_instance_profile = var.runner_worker.type == "docker+machine" ? aws_iam_instance_profile.docker_machine[0].name : ""
157-
docker_machine_options = length(local.docker_machine_options_string) == 1 ? "" : local.docker_machine_options_string
158-
docker_machine_name = format("%s-%s", local.runner_tags_merged["Name"], "%s") # %s is always needed
144+
}]
159145
runners_name = var.runner_instance.name
160-
runners_tags = replace(replace(local.runner_tags_string, ",,", ","), "/,$/", "")
161146
runners_token = var.runner_gitlab.registration_token
162-
runners_userdata = var.runner_worker_docker_machine_instance.start_script
163147
runners_executor = var.runner_worker.type
164148
runners_limit = var.runner_worker.max_jobs
165149
runners_concurrent = var.runner_manager.maximum_concurrent_jobs
166-
runners_idle_count = var.runner_worker_docker_machine_instance.idle_count
167-
runners_idle_time = var.runner_worker_docker_machine_instance.idle_time
168-
runners_max_builds = local.runners_max_builds_string
169-
runners_root_size = var.runner_worker_docker_machine_instance.root_size
170-
runners_volume_type = var.runner_worker_docker_machine_instance.volume_type
171-
runners_iam_instance_profile_name = var.runner_worker_docker_machine_role.profile_name
172-
runners_use_private_address_only = var.runner_worker_docker_machine_instance.private_address_only
173-
runners_use_private_address = !var.runner_worker_docker_machine_instance.private_address_only
174-
runners_request_spot_instance = var.runner_worker_docker_machine_instance_spot.enable
175150
runners_environment_vars = jsonencode(var.runner_worker.environment_variables)
176151
runners_pre_build_script = var.runner_worker_gitlab_pipeline.pre_build_script
177152
runners_post_build_script = var.runner_worker_gitlab_pipeline.post_build_script
@@ -188,8 +163,6 @@ locals {
188163
sentry_dsn = var.runner_manager.sentry_dsn
189164
prometheus_listen_address = var.runner_manager.prometheus_listen_address
190165
auth_type = var.runner_worker_cache.authentication_type
191-
use_fleet = var.runner_worker_docker_machine_fleet.enable
192-
launch_template = var.runner_worker_docker_machine_fleet.enable == true ? aws_launch_template.fleet_gitlab_runner[0].name : ""
193166
runners_docker_autoscaler = var.runner_worker.type == "docker-autoscaler" ? local.template_runner_docker_autoscaler : ""
194167
runners_docker_machine = var.runner_worker.type == "docker+machine" ? local.template_runner_docker_machine : ""
195168
}
@@ -623,23 +596,37 @@ resource "aws_iam_role_policy_attachment" "docker_machine_cache_instance" {
623596
### docker machine instance policy
624597
################################################################################
625598
resource "aws_iam_role" "docker_machine" {
626-
count = contains(["docker+machine", "docker-autoscaler"], var.runner_worker.type) ? 1 : 0
599+
count = var.runner_worker.type == "docker+machine" ? 1 : 0
627600
name = "${local.name_iam_objects}-docker-machine"
628601
assume_role_policy = length(var.runner_worker_docker_machine_role.assume_role_policy_json) > 0 ? var.runner_worker_docker_machine_role.assume_role_policy_json : templatefile("${path.module}/policies/instance-role-trust-policy.json", {})
629602
permissions_boundary = var.iam_permissions_boundary == "" ? null : "arn:${data.aws_partition.current.partition}:iam::${data.aws_caller_identity.current.account_id}:policy/${var.iam_permissions_boundary}"
630603

631604
tags = local.tags
632605
}
633606

634-
635-
636607
resource "aws_iam_instance_profile" "docker_machine" {
637-
count = contains(["docker+machine", "docker-autoscaler"], var.runner_worker.type) ? 1 : 0
608+
count = var.runner_worker.type == "docker+machine" ? 1 : 0
638609
name = "${local.name_iam_objects}-docker-machine"
639610
role = aws_iam_role.docker_machine[0].name
640611
tags = local.tags
641612
}
642613

614+
resource "aws_iam_role" "docker_autoscaler" {
615+
count = var.runner_worker.type == "docker-autoscaler" ? 1 : 0
616+
name = "${local.name_iam_objects}-docker-autoscaler"
617+
assume_role_policy = length(var.runner_worker_docker_autoscaler_role.assume_role_policy_json) > 0 ? var.runner_worker_docker_autoscaler_role.assume_role_policy_json : templatefile("${path.module}/policies/instance-role-trust-policy.json", {})
618+
permissions_boundary = var.iam_permissions_boundary == "" ? null : "arn:${data.aws_partition.current.partition}:iam::${data.aws_caller_identity.current.account_id}:policy/${var.iam_permissions_boundary}"
619+
620+
tags = local.tags
621+
}
622+
623+
resource "aws_iam_instance_profile" "docker_autoscaler" {
624+
count = var.runner_worker.type == "docker-autoscaler" ? 1 : 0
625+
name = "${local.name_iam_objects}-docker-autoscaler"
626+
role = aws_iam_role.docker_autoscaler[0].name
627+
tags = local.tags
628+
}
629+
643630
################################################################################
644631
### Add user defined policies
645632
################################################################################
@@ -650,6 +637,13 @@ resource "aws_iam_role_policy_attachment" "docker_machine_user_defined_policies"
650637
policy_arn = var.runner_worker_docker_machine_role.policy_arns[count.index]
651638
}
652639

640+
resource "aws_iam_role_policy_attachment" "docker_autoscaler_user_defined_policies" {
641+
count = var.runner_worker.type == "docker-autoscaler" ? length(var.runner_worker_docker_autoscaler_role.policy_arns) : 0
642+
643+
role = aws_iam_role.docker_autoscaler[0].name
644+
policy_arn = var.runner_worker_docker_autoscaler_role.policy_arns[count.index]
645+
}
646+
653647
################################################################################
654648
resource "aws_iam_role_policy_attachment" "docker_machine_session_manager_aws_managed" {
655649
count = (var.runner_worker.type == "docker+machine" && var.runner_worker.ssm_access) ? 1 : 0
@@ -658,7 +652,12 @@ resource "aws_iam_role_policy_attachment" "docker_machine_session_manager_aws_ma
658652
policy_arn = "arn:${data.aws_partition.current.partition}:iam::aws:policy/AmazonSSMManagedInstanceCore"
659653
}
660654

655+
resource "aws_iam_role_policy_attachment" "docker_autoscaler_session_manager_aws_managed" {
656+
count = (var.runner_worker.type == "docker-autoscaler" && var.runner_worker.ssm_access) ? 1 : 0
661657

658+
role = aws_iam_role.docker_autoscaler[0].name
659+
policy_arn = "arn:${data.aws_partition.current.partition}:iam::aws:policy/AmazonSSMManagedInstanceCore"
660+
}
662661

663662
################################################################################
664663
### Service linked policy, optional

0 commit comments

Comments
 (0)