我有一个.properties,我想应用一个模板来为我的部署生成env {}条目。
类似这样的东西:
{{- range $key, $value := .Values.configurationOverrides }}
env {
name = {{ printf "REST_%s" $key | replace "." "_" | upper | quote }}
value =
生成env {}个条目:
...
spec {
container {
image = "**"
name = "rest"
env {
name = "REST_FROM_PROPERTIES_FILE"
value = "VALUE FROM PROPERTIES FILE"
}
...
有可能吗?
谢谢。
答案 0 :(得分:0)
注意:我假设您使用Terraform 0.12.x
解决方案的一部分是dynamic blocks,它允许您遍历值列表并动态添加env节:
properties_list = [{ name: "MY_ENV_VAR", value: "VALUE", },]
dynamic "env" {
for_each = var.properties_list
name = env.value.name
value = env.value.value
}
最困难的部分是解析属性文件,因为Terraform中没有开箱即用的方法。您可以使用类似jsondecode之类的东西将JSON解码为Terraform对象。因此,您可以先将属性文件转换为JSON文件(例如,使用this npm package),然后将其解码为terraform对象。
答案 1 :(得分:0)
在 Blokje5 的帮助下,我设法使用变量。它不是真正从属性文件中加载,但它满足了我的需要(当需要更改config / env vars时,它不会更改Terraform代码):
terraterra.tfvars文件:
kafka-rest-envs = {
KAFKA_REST_BOOTSTRAP_SERVERS = "localhost:9092"
KAFKA_REST_HOST_NAME = "hostnamey"
KAFKA_REST_ID = "kafka-rest"
KAFKA_REST_LISTENERS = "http://0.0.0.0:8082"
KAFKA_REST_CLIENT_SASL_JAAS_CONFIG = "***"
KAFKA_REST_CLIENT_SECURITY_PROTOCOL = "SASL_SSL"
KAFKA_REST_CLIENT_SSL_ENDPOINT_IDENTIFICATION_ALGORITHM = "https"
KAFKA_REST_CONSUMER_RETRY_BACKOFF_MS = "500"
KAFKA_REST_CONSUMER_REQUEST_TIMEOUT_MS = "25000"
KAFKA_REST_PRODUCER_ACKS = "1"
KAFKA_REST_CLIENT_SASL_MECHANISM = "PLAIN"
KAFKA_REST_ADMIN_REQUEST_TIMEOUT_MS = "50000"
KAFKA_REST_KEY_SERIALIZER = "io.confluent.kafka.serializers.KafkaAvroSerializer"
KAFKA_REST_VALUE_SERIALIZER = "io.confluent.kafka.serializers.KafkaAvroSerializer"
}
和地形:
...
spec {
container {
image = "confluentinc/cp-kafka-rest"
name = "kafka-rest"
dynamic "env" {
for_each = var.kafka-rest-envs
content {
name = env.key
value = env.value
}
}
...
谢谢!