From 64e4fa69b4e8197e7ac3961d562f1544b459c527 Mon Sep 17 00:00:00 2001 From: julian-perge Date: Tue, 29 Apr 2025 07:22:56 -0400 Subject: [PATCH 1/4] Variable for determining which fleeting plugin to use --- main.tf | 13 ++++++ template/gitlab-runner.tftpl | 43 +++++++++++-------- .../runner-docker-autoscaler-config.tftpl | 2 +- 3 files changed, 38 insertions(+), 20 deletions(-) diff --git a/main.tf b/main.tf index 6da9fabf0..ef7cb807c 100644 --- a/main.tf +++ b/main.tf @@ -38,6 +38,17 @@ locals { extra_config = var.runner_install.start_script }) + # "16.0.3" -> ["16", "0", "3"] + runner_version_split = split(".", var.runner_gitlab.runner_version) + # ["16", "0", "3"] -> 16 + runner_version_major = parseint(local.runner_version_split[0], 10) + # ["16", "0", "3"] -> 0 + runner_version_minor = parseint(local.runner_version_split[1], 10) + # https://docs.gitlab.com/runner/executors/docker_autoscaler/#example-aws-autoscaling-for-1-job-per-instance + # GitLab 16.10 and earlier, manually install the plugin + # GitLab 16.11 and later, done through `gitlab runner fleeting install` + runner_use_new_fleeting_install = local.runner_version_major >= 16 && local.runner_version_minor >= 11 + file_yum_update = file("${path.module}/template/yum_update.tftpl") template_eip = templatefile("${path.module}/template/eip.tftpl", { @@ -80,6 +91,7 @@ locals { public_key = var.runner_worker.use_private_key && var.runner_worker.type == "docker-autoscaler" ? tls_private_key.autoscaler[0].public_key_openssh : var.runner_worker_docker_machine_fleet.enable == true ? tls_private_key.fleet[0].public_key_openssh : "" private_key = var.runner_worker.use_private_key && var.runner_worker.type == "docker-autoscaler" ? tls_private_key.autoscaler[0].private_key_pem : var.runner_worker_docker_machine_fleet.enable == true ? tls_private_key.fleet[0].private_key_pem : "" use_private_key = var.runner_worker_docker_machine_fleet.enable || (var.runner_worker.use_private_key && var.runner_worker.type == "docker-autoscaler") + use_new_fleeting_install = local.runner_use_new_fleeting_install use_new_runner_authentication_gitlab_16 = var.runner_gitlab_registration_config.type != "" user_data_trace_log = var.debug.trace_runner_user_data fleeting_plugin_version = var.runner_worker_docker_autoscaler.fleeting_plugin_version @@ -87,6 +99,7 @@ locals { template_runner_docker_autoscaler = templatefile("${path.module}/template/runner-docker-autoscaler-config.tftpl", { + fleeting_plugin = local.runner_use_new_fleeting_install ? "aws:latest" : "fleeting-plugin-aws" docker_autoscaling_name = var.runner_worker.type == "docker-autoscaler" ? aws_autoscaling_group.autoscaler[0].name : "" connector_config_user = var.runner_worker_docker_autoscaler.connector_config_user runners_capacity_per_instance = var.runner_worker_docker_autoscaler.capacity_per_instance diff --git a/template/gitlab-runner.tftpl b/template/gitlab-runner.tftpl index 024f2b3f1..0d09c42d6 100644 --- a/template/gitlab-runner.tftpl +++ b/template/gitlab-runner.tftpl @@ -199,29 +199,31 @@ then fi if [[ "${runners_executor}" == "docker-autoscaler" ]]; then - echo "installing docker" + echo "Installing Docker by autoscaler" yum install docker -y usermod -a -G docker ec2-user service docker start - echo "Installing Docker fleeting plugin" - # Determine architecture - if [[ "$(uname -m)" == "x86_64" ]]; then - ARCH="amd64" - elif [[ "$(uname -m)" == "i686" ]]; then - ARCH="386" - elif [[ "$(uname -m)" == "armv7l" ]]; then - ARCH="arm" - elif [[ "$(uname -m)" == "aarch64" ]]; then - ARCH="arm64" - else - echo "Unsupported architecture" - exit 1 - fi + if [[ "${use_new_fleeting_install}" == "false" ]]; then + # Determine architecture + if [[ "$(uname -m)" == "x86_64" ]]; then + ARCH="amd64" + elif [[ "$(uname -m)" == "i686" ]]; then + ARCH="386" + elif [[ "$(uname -m)" == "armv7l" ]]; then + ARCH="arm" + elif [[ "$(uname -m)" == "aarch64" ]]; then + ARCH="arm64" + else + echo "Unsupported architecture" + exit 1 + fi - wget "https://gitlab.com/gitlab-org/fleeting/plugins/aws/-/releases/v${fleeting_plugin_version}/downloads/fleeting-plugin-aws-$(uname -s | tr '[:upper:]' '[:lower:]')-$ARCH" - chmod +x fleeting-plugin-aws-* - mv fleeting-plugin-aws-* /bin/fleeting-plugin-aws + echo "Installing Docker fleeting-plugin-aws manually" + wget "https://gitlab.com/gitlab-org/fleeting/plugins/aws/-/releases/v${fleeting_plugin_version}/downloads/fleeting-plugin-aws-$(uname -s | tr '[:upper:]' '[:lower:]')-$ARCH" + chmod +x fleeting-plugin-aws-* + mv fleeting-plugin-aws-* /bin/fleeting-plugin-aws + fi mkdir ~/.aws cat < ~/.aws/config @@ -229,7 +231,6 @@ if [[ "${runners_executor}" == "docker-autoscaler" ]]; then region = "${aws_region}" EOF - fi # A small script to remove this runner from being registered with Gitlab. Executed at shutdown. @@ -297,6 +298,10 @@ if ! ( rpm -q gitlab-runner >/dev/null ) then curl --fail --retry 6 -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | bash yum install gitlab-runner-${gitlab_runner_version} -y + if [[ "${runners_executor}" == "docker-autoscaler" ]] && [[ "${use_new_fleeting_install}" == "true" ]]; then + echo "Installing gitlab-runner fleeting plugin" + gitlab-runner fleeting install + fi fi ############################# diff --git a/template/runner-docker-autoscaler-config.tftpl b/template/runner-docker-autoscaler-config.tftpl index 323c21b9e..526273bfc 100644 --- a/template/runner-docker-autoscaler-config.tftpl +++ b/template/runner-docker-autoscaler-config.tftpl @@ -1,6 +1,6 @@ # Autoscaler config [runners.autoscaler] - plugin = "fleeting-plugin-aws" + plugin = "${fleeting_plugin}" capacity_per_instance = ${runners_capacity_per_instance} update_interval = "${runners_update_interval}" From 58f011572a828c747d3208e6e27f66601ac9791e Mon Sep 17 00:00:00 2001 From: julian-perge Date: Sat, 10 May 2025 11:05:58 -0400 Subject: [PATCH 2/4] Suggested comment fix --- main.tf | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/main.tf b/main.tf index ef7cb807c..5b46fa501 100644 --- a/main.tf +++ b/main.tf @@ -39,15 +39,13 @@ locals { }) # "16.0.3" -> ["16", "0", "3"] - runner_version_split = split(".", var.runner_gitlab.runner_version) + runner_version_split = split(".", var.runner_gitlab.runner_version) # ["16", "0", "3"] -> 16 - runner_version_major = parseint(local.runner_version_split[0], 10) + runner_version_major = parseint(local.runner_version_split[0], 10) # ["16", "0", "3"] -> 0 - runner_version_minor = parseint(local.runner_version_split[1], 10) - # https://docs.gitlab.com/runner/executors/docker_autoscaler/#example-aws-autoscaling-for-1-job-per-instance - # GitLab 16.10 and earlier, manually install the plugin - # GitLab 16.11 and later, done through `gitlab runner fleeting install` - runner_use_new_fleeting_install = local.runner_version_major >= 16 && local.runner_version_minor >= 11 + runner_version_minor = parseint(local.runner_version_split[1], 10) + # the `gitlab-runner fleeting install` command was introduced in 16.11 + runner_use_new_fleeting_install = (local.runner_version_major == 16 && local.runner_version_minor >= 11) || local.runner_version_major > 16 file_yum_update = file("${path.module}/template/yum_update.tftpl") From 7d495962d607fce5fba30a976d4f492756898b79 Mon Sep 17 00:00:00 2001 From: julian-perge Date: Tue, 29 Apr 2025 07:22:56 -0400 Subject: [PATCH 3/4] Variable for determining which fleeting plugin to use --- main.tf | 13 ++++++ template/gitlab-runner.tftpl | 43 +++++++++++-------- .../runner-docker-autoscaler-config.tftpl | 2 +- 3 files changed, 38 insertions(+), 20 deletions(-) diff --git a/main.tf b/main.tf index 6da9fabf0..ef7cb807c 100644 --- a/main.tf +++ b/main.tf @@ -38,6 +38,17 @@ locals { extra_config = var.runner_install.start_script }) + # "16.0.3" -> ["16", "0", "3"] + runner_version_split = split(".", var.runner_gitlab.runner_version) + # ["16", "0", "3"] -> 16 + runner_version_major = parseint(local.runner_version_split[0], 10) + # ["16", "0", "3"] -> 0 + runner_version_minor = parseint(local.runner_version_split[1], 10) + # https://docs.gitlab.com/runner/executors/docker_autoscaler/#example-aws-autoscaling-for-1-job-per-instance + # GitLab 16.10 and earlier, manually install the plugin + # GitLab 16.11 and later, done through `gitlab runner fleeting install` + runner_use_new_fleeting_install = local.runner_version_major >= 16 && local.runner_version_minor >= 11 + file_yum_update = file("${path.module}/template/yum_update.tftpl") template_eip = templatefile("${path.module}/template/eip.tftpl", { @@ -80,6 +91,7 @@ locals { public_key = var.runner_worker.use_private_key && var.runner_worker.type == "docker-autoscaler" ? tls_private_key.autoscaler[0].public_key_openssh : var.runner_worker_docker_machine_fleet.enable == true ? tls_private_key.fleet[0].public_key_openssh : "" private_key = var.runner_worker.use_private_key && var.runner_worker.type == "docker-autoscaler" ? tls_private_key.autoscaler[0].private_key_pem : var.runner_worker_docker_machine_fleet.enable == true ? tls_private_key.fleet[0].private_key_pem : "" use_private_key = var.runner_worker_docker_machine_fleet.enable || (var.runner_worker.use_private_key && var.runner_worker.type == "docker-autoscaler") + use_new_fleeting_install = local.runner_use_new_fleeting_install use_new_runner_authentication_gitlab_16 = var.runner_gitlab_registration_config.type != "" user_data_trace_log = var.debug.trace_runner_user_data fleeting_plugin_version = var.runner_worker_docker_autoscaler.fleeting_plugin_version @@ -87,6 +99,7 @@ locals { template_runner_docker_autoscaler = templatefile("${path.module}/template/runner-docker-autoscaler-config.tftpl", { + fleeting_plugin = local.runner_use_new_fleeting_install ? "aws:latest" : "fleeting-plugin-aws" docker_autoscaling_name = var.runner_worker.type == "docker-autoscaler" ? aws_autoscaling_group.autoscaler[0].name : "" connector_config_user = var.runner_worker_docker_autoscaler.connector_config_user runners_capacity_per_instance = var.runner_worker_docker_autoscaler.capacity_per_instance diff --git a/template/gitlab-runner.tftpl b/template/gitlab-runner.tftpl index 024f2b3f1..0d09c42d6 100644 --- a/template/gitlab-runner.tftpl +++ b/template/gitlab-runner.tftpl @@ -199,29 +199,31 @@ then fi if [[ "${runners_executor}" == "docker-autoscaler" ]]; then - echo "installing docker" + echo "Installing Docker by autoscaler" yum install docker -y usermod -a -G docker ec2-user service docker start - echo "Installing Docker fleeting plugin" - # Determine architecture - if [[ "$(uname -m)" == "x86_64" ]]; then - ARCH="amd64" - elif [[ "$(uname -m)" == "i686" ]]; then - ARCH="386" - elif [[ "$(uname -m)" == "armv7l" ]]; then - ARCH="arm" - elif [[ "$(uname -m)" == "aarch64" ]]; then - ARCH="arm64" - else - echo "Unsupported architecture" - exit 1 - fi + if [[ "${use_new_fleeting_install}" == "false" ]]; then + # Determine architecture + if [[ "$(uname -m)" == "x86_64" ]]; then + ARCH="amd64" + elif [[ "$(uname -m)" == "i686" ]]; then + ARCH="386" + elif [[ "$(uname -m)" == "armv7l" ]]; then + ARCH="arm" + elif [[ "$(uname -m)" == "aarch64" ]]; then + ARCH="arm64" + else + echo "Unsupported architecture" + exit 1 + fi - wget "https://gitlab.com/gitlab-org/fleeting/plugins/aws/-/releases/v${fleeting_plugin_version}/downloads/fleeting-plugin-aws-$(uname -s | tr '[:upper:]' '[:lower:]')-$ARCH" - chmod +x fleeting-plugin-aws-* - mv fleeting-plugin-aws-* /bin/fleeting-plugin-aws + echo "Installing Docker fleeting-plugin-aws manually" + wget "https://gitlab.com/gitlab-org/fleeting/plugins/aws/-/releases/v${fleeting_plugin_version}/downloads/fleeting-plugin-aws-$(uname -s | tr '[:upper:]' '[:lower:]')-$ARCH" + chmod +x fleeting-plugin-aws-* + mv fleeting-plugin-aws-* /bin/fleeting-plugin-aws + fi mkdir ~/.aws cat < ~/.aws/config @@ -229,7 +231,6 @@ if [[ "${runners_executor}" == "docker-autoscaler" ]]; then region = "${aws_region}" EOF - fi # A small script to remove this runner from being registered with Gitlab. Executed at shutdown. @@ -297,6 +298,10 @@ if ! ( rpm -q gitlab-runner >/dev/null ) then curl --fail --retry 6 -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | bash yum install gitlab-runner-${gitlab_runner_version} -y + if [[ "${runners_executor}" == "docker-autoscaler" ]] && [[ "${use_new_fleeting_install}" == "true" ]]; then + echo "Installing gitlab-runner fleeting plugin" + gitlab-runner fleeting install + fi fi ############################# diff --git a/template/runner-docker-autoscaler-config.tftpl b/template/runner-docker-autoscaler-config.tftpl index 323c21b9e..526273bfc 100644 --- a/template/runner-docker-autoscaler-config.tftpl +++ b/template/runner-docker-autoscaler-config.tftpl @@ -1,6 +1,6 @@ # Autoscaler config [runners.autoscaler] - plugin = "fleeting-plugin-aws" + plugin = "${fleeting_plugin}" capacity_per_instance = ${runners_capacity_per_instance} update_interval = "${runners_update_interval}" From e4ae0d701f1d444e8a99ae7e8a0a89ea577eb26a Mon Sep 17 00:00:00 2001 From: julian-perge Date: Sat, 10 May 2025 11:05:58 -0400 Subject: [PATCH 4/4] Suggested comment fix --- main.tf | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/main.tf b/main.tf index ef7cb807c..5b46fa501 100644 --- a/main.tf +++ b/main.tf @@ -39,15 +39,13 @@ locals { }) # "16.0.3" -> ["16", "0", "3"] - runner_version_split = split(".", var.runner_gitlab.runner_version) + runner_version_split = split(".", var.runner_gitlab.runner_version) # ["16", "0", "3"] -> 16 - runner_version_major = parseint(local.runner_version_split[0], 10) + runner_version_major = parseint(local.runner_version_split[0], 10) # ["16", "0", "3"] -> 0 - runner_version_minor = parseint(local.runner_version_split[1], 10) - # https://docs.gitlab.com/runner/executors/docker_autoscaler/#example-aws-autoscaling-for-1-job-per-instance - # GitLab 16.10 and earlier, manually install the plugin - # GitLab 16.11 and later, done through `gitlab runner fleeting install` - runner_use_new_fleeting_install = local.runner_version_major >= 16 && local.runner_version_minor >= 11 + runner_version_minor = parseint(local.runner_version_split[1], 10) + # the `gitlab-runner fleeting install` command was introduced in 16.11 + runner_use_new_fleeting_install = (local.runner_version_major == 16 && local.runner_version_minor >= 11) || local.runner_version_major > 16 file_yum_update = file("${path.module}/template/yum_update.tftpl")