Skip to content

feat: do not add a the Name tag for docker+machine >= 0.16.2 #522

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Aug 15, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions locals.tf
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,15 @@ locals {
runners_machine_autoscaling = var.runners_machine_autoscaling
}
)

/* determines if the docker machine executable adds the Name tag automatically (versions >= 0.16.2) */
# make sure to skip pre-release stuff in the semver by ignoring everything after "-"
docker_machine_version_used = split(".", split("-", var.docker_machine_version)[0])
docker_machine_version_with_name_tag = split(".", "0.16.2")
docker_machine_version_test = [
for i, j in reverse(range(length(local.docker_machine_version_used)))
: signum(local.docker_machine_version_with_name_tag[i] - local.docker_machine_version_used[i]) * pow(10, j)
]

docker_machine_adds_name_tag = signum(sum(local.docker_machine_version_test)) <= 0
}
45 changes: 18 additions & 27 deletions main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -73,33 +73,24 @@ locals {

template_runner_config = templatefile("${path.module}/template/runner-config.tpl",
{
aws_region = var.aws_region
gitlab_url = var.runners_gitlab_url
gitlab_clone_url = var.runners_clone_url
runners_vpc_id = var.vpc_id
runners_subnet_id = length(var.subnet_id) > 0 ? var.subnet_id : var.subnet_id_runners
runners_aws_zone = data.aws_availability_zone.runners.name_suffix
runners_instance_type = var.docker_machine_instance_type
runners_spot_price_bid = var.docker_machine_spot_price_bid == "on-demand-price" ? "" : var.docker_machine_spot_price_bid
runners_ami = data.aws_ami.docker_machine.id
runners_security_group_name = aws_security_group.docker_machine.name
runners_monitoring = var.runners_monitoring
runners_ebs_optimized = var.runners_ebs_optimized
runners_instance_profile = aws_iam_instance_profile.docker_machine.name
runners_additional_volumes = local.runners_additional_volumes
docker_machine_options = length(local.docker_machine_options_string) == 1 ? "" : local.docker_machine_options_string
runners_name = var.runners_name
runners_tags = replace(replace(var.overrides["name_docker_machine_runners"] == "" ? format(
"Name,%s-docker-machine,%s,%s",
var.environment,
local.tags_string,
local.runner_tags_string,
) : format(
"%s,%s,Name,%s",
local.tags_string,
local.runner_tags_string,
var.overrides["name_docker_machine_runners"],
), ",,", ","), "/,$/", "")
aws_region = var.aws_region
gitlab_url = var.runners_gitlab_url
gitlab_clone_url = var.runners_clone_url
runners_vpc_id = var.vpc_id
runners_subnet_id = length(var.subnet_id) > 0 ? var.subnet_id : var.subnet_id_runners
runners_aws_zone = data.aws_availability_zone.runners.name_suffix
runners_instance_type = var.docker_machine_instance_type
runners_spot_price_bid = var.docker_machine_spot_price_bid == "on-demand-price" ? "" : var.docker_machine_spot_price_bid
runners_ami = data.aws_ami.docker_machine.id
runners_security_group_name = aws_security_group.docker_machine.name
runners_monitoring = var.runners_monitoring
runners_ebs_optimized = var.runners_ebs_optimized
runners_instance_profile = aws_iam_instance_profile.docker_machine.name
runners_additional_volumes = local.runners_additional_volumes
docker_machine_options = length(local.docker_machine_options_string) == 1 ? "" : local.docker_machine_options_string
docker_machine_name = format("%s-%s", local.runner_tags_merged["Name"], "%s") # %s is always needed
runners_name = var.runners_name
runners_tags = replace(replace(local.runner_tags_string, ",,", ","), "/,$/", "")
runners_token = var.runners_token
runners_executor = var.runners_executor
runners_limit = var.runners_limit
Expand Down
12 changes: 11 additions & 1 deletion tags.tf
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,21 @@ locals {
var.agent_tags
)

runner_tags_merged = merge(
local.tags,
var.runner_tags,
# overwrites the `Name` key from `local.tags`
var.overrides["name_docker_machine_runners"] == "" ? { Name = format("%s-docker-machine", var.environment) } : { Name = var.overrides["name_docker_machine_runners"] },
)

# remove the `Name` tag if docker+machine adds one to avoid a failure due to a duplicate `Name` tag
runner_tags = local.docker_machine_adds_name_tag ? { for k, v in local.runner_tags_merged : k => v if k != "Name" } : local.runner_tags_merged

tags_string = join(",", flatten([
for key in keys(local.tags) : [key, lookup(local.tags, key)]
]))

runner_tags_string = join(",", flatten([
for key in keys(var.runner_tags) : [key, lookup(var.runner_tags, key)]
for key in keys(local.runner_tags) : [key, lookup(local.runner_tags, key)]
]))
}
2 changes: 1 addition & 1 deletion template/runner-config.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ listen_address = "${prometheus_listen_address}"
IdleTime = ${runners_idle_time}
${runners_max_builds}
MachineDriver = "amazonec2"
MachineName = "runner-%s"
MachineName = "${docker_machine_name}"
MachineOptions = [
"amazonec2-instance-type=${runners_instance_type}",
"amazonec2-region=${aws_region}",
Expand Down
2 changes: 1 addition & 1 deletion variables.tf
Original file line number Diff line number Diff line change
Expand Up @@ -573,7 +573,7 @@ variable "overrides" {
The following attributes are supported:
* `name_sg` set the name prefix and overwrite the `Name` tag for all security groups created by this module.
* `name_runner_agent_instance` set the name prefix and override the `Name` tag for the EC2 gitlab runner instances defined in the auto launch configuration.
* `name_docker_machine_runners` override the `Name` tag of EC2 instances created by the runner agent.
* `name_docker_machine_runners` override the `Name` tag of EC2 instances created by the runner agent (used as name prefix for `docker_machine_version` >= 0.16.2).
* `name_iam_objects` set the name prefix of all AWS IAM resources created by this module.
EOT
type = map(string)
Expand Down