1

我正在使用 Terraform 配置 Auto Scaling Gitlab Runner。我在覆盖运行器配置文件(我正在使用 Terraform 模板)时遇到问题,因为该文件需要注册后生成的运行器唯一令牌。

配置文件如下所示:

concurrent = 1
check_interval = 60

[[runners]]
    name = "POC Group Runner"
    url = "https://gitlab.com/"
    token = "ABCD"
    executor = "docker+machine"
    limit = 1 # max number of docker machines to be created

我想从此文件中读取此运行器令牌(即“ABCD”),以便可以在 Terraform 模板中使用它来覆盖配置。

在 terraform 中,我拥有的唯一“读取”功能是“文件”,它读取整个内容,然后仅从中获取令牌变成了一个丑陋的过程:

trimspace(replace(split("executor", split("token =", file("/etc/gitlab-runner/config.toml"))[1])[0], "\"", ""))

是否可以使用 Bash 脚本为模板创建变量?

例如,我可以使用以下命令来读取令牌:

cat /etc/gitlab-runner/config.toml | grep "token =" | awk '//{print $3}' | sed 's/"//g'

但是我如何将它输入到模板中呢?

我可以做这样的事情吗?:

Data "template_file" "runner-config" {
    template = "${file("runner-config.toml")"
    vars = {
        runner_token = "`cat /etc/gitlab-runner/config.toml | grep "token =" | awk '//{print $3}' | sed 's/"//g'`"
    }

有没有人有更好的方法从文件中读取特定内容,或者知道如何在模板中使用 bash 脚本?

4

1 回答 1

0

你有类似的问题:Terraform external data in metadata_startup_script

如何使用外部数据资源? https://www.terraform.io/docs/providers/external/data_source.html

get_token.sh

#!/bin/bash
token=$(cat /etc/gitlab-runner/config.toml | grep "token =" | awk '//{print $3}' | sed 's/"//g')
jq -n --arg token $token '{token:$token}'

或者您可以使用 echo 代替 jq,

...
echo -n "{\"token\":\"${token}\"}"

data "external" "get_token" {
  program = ["/bin/sh", "${path.module}/get-token.sh"]
}

data "template_file" "runner-config" {
    template = "${file("runner-config.toml")"
    vars = {
        runner_token = "${lookup(data.external.get_token.result, "token")}"
    }
于 2019-07-15T14:48:27.363 回答