Skip to content

Commit 7f47bdb

Browse files
authoredDec 5, 2024··
feat: add variables to specify the AMI ids (#1214)
## Description At the moment the latest AMI is read at deploy time. But to get an immutable infrastructure we have to fix the AMI. This PR adds variables to set the AMI id.
1 parent a7cd57c commit 7f47bdb

File tree

4 files changed

+45
-25
lines changed

4 files changed

+45
-25
lines changed
 

‎data.tf

+13-11
Original file line numberDiff line numberDiff line change
@@ -12,48 +12,50 @@ data "aws_availability_zone" "runners" {
1212
name = data.aws_subnet.runners.availability_zone
1313
}
1414

15-
data "aws_ami" "runner" {
15+
data "aws_ami" "runner_by_filter" {
16+
count = length(var.runner_ami_id) > 0 ? 0 : 1
17+
18+
owners = var.runner_ami_owners
1619
most_recent = "true"
1720

1821
dynamic "filter" {
1922
for_each = var.runner_ami_filter
23+
2024
content {
2125
name = filter.key
2226
values = filter.value
2327
}
2428
}
25-
26-
owners = var.runner_ami_owners
2729
}
2830

29-
data "aws_ami" "docker-machine" {
30-
count = var.runner_worker.type == "docker+machine" ? 1 : 0
31+
data "aws_ami" "docker_machine_by_filter" {
32+
count = var.runner_worker.type == "docker+machine" && length(var.runner_worker_docker_machine_ami_id) == 0 ? 1 : 0
3133

34+
owners = var.runner_worker_docker_machine_ami_owners
3235
most_recent = "true"
3336

3437
dynamic "filter" {
3538
for_each = var.runner_worker_docker_machine_ami_filter
39+
3640
content {
3741
name = filter.key
3842
values = filter.value
3943
}
4044
}
41-
42-
owners = var.runner_worker_docker_machine_ami_owners
4345
}
4446

45-
data "aws_ami" "docker-autoscaler" {
46-
count = var.runner_worker.type == "docker-autoscaler" ? 1 : 0
47+
data "aws_ami" "docker_autoscaler_by_filter" {
48+
count = var.runner_worker.type == "docker-autoscaler" && length(var.runner_worker_docker_autoscaler_ami_id) == 0 ? 1 : 0
4749

50+
owners = var.runner_worker_docker_autoscaler_ami_owners
4851
most_recent = "true"
4952

5053
dynamic "filter" {
5154
for_each = var.runner_worker_docker_autoscaler_ami_filter
55+
5256
content {
5357
name = filter.key
5458
values = filter.value
5559
}
5660
}
57-
58-
owners = var.runner_worker_docker_autoscaler_ami_owners
5961
}

‎docker_autoscaler.tf

+1-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ resource "aws_launch_template" "this" {
6262

6363
name = "${local.name_runner_agent_instance}-worker-launch-template"
6464
user_data = base64gzip(var.runner_worker_docker_autoscaler_instance.start_script)
65-
image_id = data.aws_ami.docker-autoscaler[0].id
65+
image_id = length(var.runner_worker_docker_autoscaler_ami_id) > 0 ? var.runner_worker_docker_autoscaler_ami_id : data.aws_ami.docker_autoscaler_by_filter[0].id
6666
instance_type = var.runner_worker_docker_autoscaler_asg.types[0]
6767
key_name = aws_key_pair.autoscaler[0].key_name
6868
ebs_optimized = var.runner_worker_docker_autoscaler_instance.ebs_optimized

‎main.tf

+3-3
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ locals {
113113
runners_iam_instance_profile_name = var.runner_worker_docker_machine_role.profile_name
114114
runners_root_size = var.runner_worker_docker_machine_instance.root_size
115115
runners_volume_type = var.runner_worker_docker_machine_instance.volume_type
116-
runners_ami = var.runner_worker.type == "docker+machine" ? data.aws_ami.docker-machine[0].id : ""
116+
runners_ami = var.runner_worker.type == "docker+machine" ? (length(var.runner_worker_docker_machine_ami_id) > 0 ? var.runner_worker_docker_machine_ami_id : data.aws_ami.docker_machine_by_filter[0].id) : ""
117117
use_fleet = var.runner_worker_docker_machine_fleet.enable
118118
launch_template = var.runner_worker_docker_machine_fleet.enable == true ? aws_launch_template.fleet_gitlab_runner[0].name : ""
119119
docker_machine_options = length(local.docker_machine_options_string) == 1 ? "" : local.docker_machine_options_string
@@ -258,7 +258,7 @@ resource "aws_launch_template" "gitlab_runner_instance" {
258258
# checkov:skip=CKV_AWS_79:User can decide to enable Metadata service V2. V2 is the default.
259259
name_prefix = "${local.name_runner_agent_instance}-"
260260

261-
image_id = data.aws_ami.runner.id
261+
image_id = length(var.runner_ami_id) > 0 ? var.runner_ami_id : data.aws_ami.runner_by_filter[0].id
262262
user_data = base64gzip(local.template_user_data)
263263
instance_type = var.runner_instance.type
264264
update_default_version = true
@@ -376,7 +376,7 @@ resource "aws_launch_template" "fleet_gitlab_runner" {
376376
name_prefix = "${local.name_runner_agent_instance}-worker-"
377377

378378
key_name = aws_key_pair.fleet[0].key_name
379-
image_id = data.aws_ami.docker-machine[0].id
379+
image_id = length(var.runner_worker_docker_machine_ami_id) > 0 ? var.runner_worker_docker_machine_ami_id : data.aws_ami.docker_machine_by_filter[0].id
380380
user_data = base64gzip(var.runner_worker_docker_machine_instance.start_script)
381381
instance_type = var.runner_worker_docker_machine_instance.types[0] # it will be override by the fleet
382382
update_default_version = true

‎variables.tf

+28-10
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,12 @@ variable "runner_ami_owners" {
149149
default = ["amazon"]
150150
}
151151

152+
variable "runner_ami_id" {
153+
description = "The AMI ID of the Runner instance."
154+
type = string
155+
default = ""
156+
}
157+
152158
variable "runner_networking" {
153159
description = <<-EOT
154160
allow_incoming_ping = Allow ICMP Ping to the Runner. Specify `allow_incoming_ping_security_group_ids` too!
@@ -770,37 +776,49 @@ variable "runner_worker_docker_machine_security_group_description" {
770776
}
771777

772778
variable "runner_worker_docker_machine_ami_filter" {
773-
description = "List of maps used to create the AMI filter for the Runner Worker."
779+
description = "List of maps used to create the AMI filter for the Runner Worker (docker-machine)."
774780
type = map(list(string))
775781

776782
default = {
777783
name = ["ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"]
778784
}
779785
}
780786

787+
variable "runner_worker_docker_machine_ami_owners" {
788+
description = "The list of owners used to select the AMI of the Runner Worker (docker-machine)."
789+
type = list(string)
790+
791+
# Canonical
792+
default = ["099720109477"]
793+
}
794+
795+
variable "runner_worker_docker_machine_ami_id" {
796+
description = "The ID of the AMI to use for the Runner Worker (docker-machine)."
797+
type = string
798+
default = ""
799+
}
800+
781801
variable "runner_worker_docker_autoscaler_ami_filter" {
782-
description = "List of maps used to create the AMI filter for the Runner Worker."
802+
description = "List of maps used to create the AMI filter for the Runner Worker (autoscaler)."
783803
type = map(list(string))
784804

785805
default = {
786806
name = ["ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"]
787807
}
788808
}
789809

790-
variable "runner_worker_docker_machine_ami_owners" {
791-
description = "The list of owners used to select the AMI of the Runner Worker."
810+
variable "runner_worker_docker_autoscaler_ami_owners" {
811+
description = "The list of owners used to select the AMI of the Runner Worker (autoscaler)."
792812
type = list(string)
793813

794814
# Canonical
795815
default = ["099720109477"]
796816
}
797817

798-
variable "runner_worker_docker_autoscaler_ami_owners" {
799-
description = "The list of owners used to select the AMI of the Runner Worker."
800-
type = list(string)
801-
802-
# Canonical
803-
default = ["099720109477"]
818+
variable "runner_worker_docker_autoscaler_ami_id" {
819+
description = "The ID of the AMI to use for the Runner Worker (autoscaler)."
820+
type = string
821+
default = ""
804822
}
805823

806824
variable "runner_worker_docker_machine_instance" {

0 commit comments

Comments
 (0)
Please sign in to comment.