我正在使用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脚本?
答案 0 :(得分: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")}"
}