当前位置: 首页 > news >正文

想学习做网站班级展示网站

想学习做网站,班级展示网站,wordpress清除缓存,河南炒股配资网站开发系列文章 Terraform 系列文章Grafana 系列文章 概述 前文 Grafana 系列 - Grafana Terraform Provider 基础 介绍了使用 Grafana Terraform Provider 创建 Datasource. 这几天碰到这么一个现实需求: 使用 Terraform 批量创建日志数据源时, 有的数据源类型是 El…

系列文章

  • Terraform 系列文章
  • Grafana 系列文章

概述

前文 Grafana 系列 - Grafana Terraform Provider 基础 介绍了使用 Grafana Terraform Provider 创建 Datasource.

这几天碰到这么一个现实需求:

使用 Terraform 批量创建日志数据源时, 有的数据源类型是 ElasticSearch, 有些是 Opensearch. 那么, 如何根据某个字段(如:es_type)判断是否创建?

另外, 建议您先阅读前一篇文章: Terraform 系列 - 使用 for-each 对本地 json 进行迭代 方便快速了解上下文背景.

创建数据源的数据来源是个 json, json 通过前一篇文章的转换, 格式类似于这样:

{"dev": {"env_name": "dev","prom_url": "http://dev-prom.example.com","jaeger_url": "http://dev-jaeger.example.com","es_url": "http://dev-es.example.com:9200","es_type": "elasticsearch"},"test": {"env_name": "test","prom_url": "http://test-prom.example.com","jaeger_url": "http://test-jaeger.example.com","es_url": "http://test-es.example.com:9200","es_type": "opensearch"}
}

该如何实现?🤔

解决方案

使用: for 循环 + if 重构 map.

具体如下:

  • 批量创建资源时,通过 for_each, 进行批量创建。
  • 但是在 for_each 时, 通过 for 循环 + if 重构 map, 通过 local.env.es_type 判断是否创建.

具体如下:

locals {# 将 json 文件转换为 对象  user_data = jsondecode(file("${path.module}/env-details.json"))# 构造一个 map# key 是 env_name# value 又是一个 map, 其 key 是 grafana datasource type, value 是 urlenvs = { for env in local.user_data : env.env_name =>{prometheus = env.prom_url# 利用 ${} 构造新的 urljaeger     = "${env.jaeger_url}/trace/"es         = env.es_urles_type    = env.es_type}}
}resource "grafana_data_source" "elasticsearch" {for_each = {for env_name, env_info in local.envs : env_name => env_infoif env_info.es_type == "elasticsearch"}type          = "elasticsearch"name          = "${each.key}_es"uid           = "${each.key}_es"url           = each.value.esdatabase_name = "[example.*-]YYYY.MM.DD"json_data_encoded = jsonencode({esVersion = "6.0.0"interval = "Daily"includeFrozen              = falsemaxConcurrentShardRequests = 256timeField                  = "@timestamp"logLevelField   = "level"logMessageField = "message"})
}resource "grafana_data_source" "opensearch" {for_each = {for env_name, env_info in local.envs : env_name => env_infoif env_info.es_type == "opensearch"}type = "grafana-opensearch-datasource"name = "${each.key}_opensearch"uid  = "${each.key}_opensearch"url  = each.value.esbasic_auth_enabled  = truebasic_auth_username = "readonly"json_data_encoded = jsonencode({database = "[example.*-]YYYY.MM.DD"version  = "6.8.0"flavor   = "elasticsearch"interval = "Daily"pplEnabled                 = truemaxConcurrentShardRequests = 256timeField                  = "@timestamp"logLevelField   = "level"logMessageField = "message"})secure_json_data_encoded = jsonencode({basicAuthPassword = "Changeme!"})
}

不要看到这么长的代码就头晕, 很多跟本次没啥关系. 实现的关键就在于如下代码段:

  for_each = {for env_name, env_info in local.envs : env_name => env_infoif env_info.es_type == "elasticsearch"}

还是很直白易懂的, 就不详细说明了. 如果 es_typeelasticsearch, 才把这个对象构造到 map 中.

之后, 对于不同的 DataSource type, 会有不同的参数, 如上文:

  • Opensearch 具有和 ES 不同的 type, Opensearch 加了认证
  • Opensearch 里是 database 字段而不是 database_name
  • Opensearch 里额外还有 flavor 字段和 pplEnabled 字段.

解决方案二

如果您的原始数据, 或者构造后的 localslist 而不是 map.

那么也可以使用: count + condition ? true_val : false_val 条件表达式完成同样的功能.

示例如下:

通过 var.cloudflare 的值是 true 还是 false 来判断.

resource "cloudflare_record" "record" {count = var.cloudflare ? 1 : 0zone_id = "${data.cloudflare_zones.domain.zones[0].id}"name    = "${var.subdomain}"value   = "${var.origin_server}"type    = "CNAME"ttl     = 1proxied = true
}

关键点是: count = var.cloudflare ? 1 : 0 条件表达式.

也很清晰明了.

完成🎉🎉🎉

📚️参考文档

  • Terraform: Conditional creation of a resource based on a variable in .tfvars - Stack Overflow
  • Conditionally create resources when a for_each loop is involved - Terraform - HashiCorp Discuss

三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.

http://www.yayakq.cn/news/747123/

相关文章:

  • 大连网站建设企业做外贸好的网站
  • 努比亚网站开发文档小说网站开发设计
  • ui设计和网站建设人员李伟宁高端大气的网站首页
  • 济南百度做网站设计网站pc版
  • wordpress 插件上传桂林seo优化
  • 贵阳网站备案在哪里腾讯云域名注册步骤
  • 广州本地网站怎样下载网页的视频
  • OA网站建设分析长沙广告网页设计最新招聘信息
  • 南通优化网站公司哪家好seo权重优化软件
  • 公司建设网站申请信用卡齐家网和土巴兔哪家好
  • 网站图片用什么软件做企业宣传网页制作
  • 天津非常好的网站建设郑州最好的品牌策划公司
  • 网站建设销售还能做吗做a视频网站有哪些
  • 四川省建设网站电子签章宁波网站建设模板下载免费
  • angularjs的网站模板高性能网站建设指南pdf
  • 做网站后台要学什么wordpress无法创建数据库
  • 企业官方网站管理制度网站建设产品经理职责
  • 自己做的网站怎么上传网络东莞市专注网站建设怎么样
  • 建设网站费用计入什么科目合肥关键词优化平台
  • 科技馆网站建设背景邯郸网站建设价格
  • 主网站怎么做熊掌号优化无锡建设公司网站
  • 原创 网站 源码做网站用windows和 linux
  • 单位网站查询工资链接怎么做深圳富通做网站
  • google 网站 提交哪个网站可以做制图兼职
  • 巩义便宜网站建设价格图片外链生成工具
  • 克隆视厅网站怎么做wordpress 登陆页面模板
  • 网站如何做百度推广跨境电商怎么做如何从零开始
  • 一个网站如何进行推广宣传长沙seo
  • 一个完整的企业网站网站开发的前后端是哪些
  • 深圳龙华建网站广州建筑集团股份有限公司