【问题标题】:Terraform Helm Chart Environment VariablesTerraform Helm Chart 环境变量
【发布时间】:2022-08-17 05:31:35
【问题描述】:

我正在尝试通过 terraform 为我的 Helm Chart 部署设置环境变量。目前我的代码如下所示:

resource \"helm_release\" \"datadog\" {
  name       = \"datadog\"
  repository = \"https://helm.datadoghq.com\"
  chart      = \"datadog\"

  namespace        = \"datadog\"
  create_namespace = true

  # Default Configuration items
  set {
    name  = \"datadog.apiKey\"
    value = var.datadog_api_key
  }

  set {
    name  = \"datadog.appKey\"
    value = var.datadog_app_key
  }

  set {
    name  = \"clusterAgent.enabled\"
    value = true
  }

  set {
    name  = \"targetSystem\"
    value = \"linux\"
  }

  # Set Datadog Configuration Items

  # Event Collection
  set {
    name  = \"agents.rbac.create\"
    value = true
  }

  set {
    name  = \"datadog.leaderElection\"
    value = true
  }

  set {
    name  = \"datadog.collectEvents\"
    value = true
  }

  # Custom/External Metrics
  set {
    name  = \"clusterAgent.metricsProvider.enabled\"
    value = true
  }

  # APM Configuration
  set {
    name  = \"datadog.apm.enabled\"
    value = true
  }

  # Logs Configuration
  set {
    name  = \"datadog.logs.enabled\"
    value = true
  }

  set {
    name  = \"datadog.logs.containerCollectAll\"
    value = true
  }

  set {
    name  = \"datadog.containerExcludeLogs\"
    value = local.exclude_image_list
  }

  # Set logging verbosity, valid log levels are: trace, debug, info, warn, error, critical, off.  Default is info
  set {
    name  = \"datadog.logLevel\"
    value = \"INFO\"
  }

  # Process Collection Configuration
  set {
    name  = \"datadog.processAgent.enabled\"
    value = true
  }

  # Exclude Containers
  set {
    name  = \"datadog.containerExclude\"
    value = local.exclude_image_list
  }

  # Set Environment Variables
  # DD_LOGS_CONFIG_USE_HTTP is for DD AWS PrivateLink: https://docs.datadoghq.com/agent/guide/private-link/?tab=useast1
  set {
    name  = \"env\"
    value = \"{DD_LOGS_CONFIG_USE_HTTP = true}\"
  }
}

请注意底部,我是如何设置的。我尝试将它作为字符串传递,但它不起作用。我也将它设置为一个也不起作用的地图。当我将其设置为地图时,出现以下错误:

╷
│ Error: Incorrect attribute value type
│ 
│   on .terraform/modules/datadog/helm.tf line 104, in resource \"helm_release\" \"datadog\":
│  104:     value = {\"DD_LOGS_CONFIG_USE_HTTP\" = true}
│ 
│ Inappropriate value for attribute \"value\": string required.

这是我要修改的舵图:

https://github.com/DataDog/helm-charts/tree/main/charts/datadog

  • 根据文档,Helm 图表预期类型看起来更像[\"name\"=\"DD_LOGS_CONFIG_USE_HTTP\", \"value\"=\"true\"],但不确定这是否完全正确。
  • 当我尝试使用@MattSchuchard 时,我得到了这个: range can\'t iterate over [{name=DD_LOGS_CONFIG_USE_HTTP
  • Terraform 或 Helm API 错误?我假设 Helm 因为类型已转换。
  • 是的,一个掌舵错误。它不喜欢输入的内容并且无法正确迭代该列表
  • 听起来可能很愚蠢,但是您尝试过 value = {\"DD_LOGS_CONFIG_USE_HTTP\" = \"true\"} 吗?

标签: kubernetes terraform kubernetes-helm datadog


【解决方案1】:

这种方式对我有用:

values = [<<YAML
datadog:
  env:
    - name: DD_LOGS_CONFIG_USE_HTTP
      value: "true"
YAML
]

【讨论】:

    【解决方案2】:

    实际上,env 的值应该是带有键的对象数组(namevalue),terraform 允许您在数组元素中定义键,因此您可以分两步完成:

    1. 为第一个元素设置键 name 的值
    2. 为第一个元素设置键 value 的值
      resource "helm_release" "datadog" {
        name       = "datadog"
        repository = "https://helm.datadoghq.com"
        chart      = "datadog"
      
        namespace        = "datadog"
        create_namespace = true
      
        # Default Configuration items
        set {
          name  = "datadog.apiKey"
          value = var.datadog_api_key
        }
      
        set {
          name  = "datadog.appKey"
          value = var.datadog_app_key
        }
      
        set {
          name  = "clusterAgent.enabled"
          value = true
        }
      
        set {
          name  = "targetSystem"
          value = "linux"
        }
      
        # Set Datadog Configuration Items
      
        # Event Collection
        set {
          name  = "agents.rbac.create"
          value = true
        }
      
        set {
          name  = "datadog.leaderElection"
          value = true
        }
      
        set {
          name  = "datadog.collectEvents"
          value = true
        }
      
        # Custom/External Metrics
        set {
          name  = "clusterAgent.metricsProvider.enabled"
          value = true
        }
      
        # APM Configuration
        set {
          name  = "datadog.apm.enabled"
          value = true
        }
      
        # Logs Configuration
        set {
          name  = "datadog.logs.enabled"
          value = true
        }
      
        set {
          name  = "datadog.logs.containerCollectAll"
          value = true
        }
      
        set {
          name  = "datadog.containerExcludeLogs"
          value = local.exclude_image_list
        }
      
        # Set logging verbosity, valid log levels are: trace, debug, info, warn, error, critical, off.  Default is info
        set {
          name  = "datadog.logLevel"
          value = "INFO"
        }
      
        # Process Collection Configuration
        set {
          name  = "datadog.processAgent.enabled"
          value = true
        }
      
        # Exclude Containers
        set {
          name  = "datadog.containerExclude"
          value = local.exclude_image_list
        }
      
        # Set Environment Variables
        # DD_LOGS_CONFIG_USE_HTTP is for DD AWS PrivateLink: https://docs.datadoghq.com/agent/guide/private-link/?tab=useast1
        set {
          name  = "env[0].name"
          value = "DD_LOGS_CONFIG_USE_HTTP"
        }
        set {
          name  = "env[0].value"
          value = "true"
        }
      }
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-08
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      • 2018-01-17
      • 2021-04-06
      • 2020-10-20
      • 2020-07-30
      相关资源
      最近更新 更多