diff --git a/main.tf b/main.tf index 6da9fabf0..5b46fa501 100644 --- a/main.tf +++ b/main.tf @@ -38,6 +38,15 @@ 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) + # 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") template_eip = templatefile("${path.module}/template/eip.tftpl", { @@ -80,6 +89,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 +97,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}"