如何在 Terraform 模板文件变量中使用 Bash 命令?
How to use Bash Commands in Terraform Template File Variables?
我正在使用 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 中,我唯一的 "read" 函数是 "file",它读取全部内容,然后只从中获取令牌变成了一个丑陋的过程:
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 }' | 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 }' | sed 's/"//g'`"
}
有没有人有更好的方法从文件中读取特定内容,或者知道如何在模板中使用 bash 脚本?
您有类似的问题:。
使用外部数据资源怎么样?
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 }' | 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")}"
}
我正在使用 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 中,我唯一的 "read" 函数是 "file",它读取全部内容,然后只从中获取令牌变成了一个丑陋的过程:
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 }' | 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 }' | sed 's/"//g'`"
}
有没有人有更好的方法从文件中读取特定内容,或者知道如何在模板中使用 bash 脚本?
您有类似的问题:
使用外部数据资源怎么样? 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 }' | 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")}"
}