首页 > 其他分享 >【分享代码片段】terraform中,如何从刚刚创建的 deployment 中获得所有容器的名字和 ip

【分享代码片段】terraform中,如何从刚刚创建的 deployment 中获得所有容器的名字和 ip

时间:2023-12-08 16:58:53浏览次数:20  
标签:ahfu name deploy ip terraform deployment test container

作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!


不好意思,刚刚才开始用 terraform,或许是更好的办法而我不知道。
知道的朋友请一定教教我。

下面是我的办法:

provider "kubernetes" {
  config_path = "../k8s.yaml"
}

resource "kubernetes_deployment" "ahfu-test-deploy-1" {
  metadata {
    namespace = "test-devops"
    name      = "ahfu-test-deploy-1"
    labels = {
      test = "ahfu-test-deploy-1"   # 这个标签用于过滤出 pod
    }
  }

  spec {
    replicas = 2

    selector {
      match_labels = {
        test = "ahfu-test-deploy-1"
      }
    }

    template {
      metadata {
        labels = {
          test = "ahfu-test-deploy-1"
        }
      }

      spec {
        container {
          image             = "alpine:3.18.4"
          image_pull_policy = "IfNotPresent"
          command           = ["/bin/sh"]
          args = [
            "/data/run.sh",
          ]

          name = "ahfu-test-deploy-1"

          resources {
            limits = {
              cpu    = "0.5"
              memory = "512Mi"
            }
            requests = {
              cpu    = "250m"
              memory = "50Mi"
            }
          }

          volume_mount {
            name       = "config-volume"
            mount_path = "/data/"
          }

          env {
            name = "CONTAINER_NAME"
            value_from {
              field_ref {
                field_path = "metadata.name"
              }
            }
          }

          env {
            name = "CONTAINER_IP"
            value_from {
              field_ref {
                field_path = "status.podIP"
              }
            }
          }

        volume {
          name = "config-volume"
          config_map {
            name = "ahfu-configmap-1"   # 这里准备了一个  configMap,内容是一个  bash 文件
          }
        }

      }
    }
  }
}

data "external" "filtered_pods" {
  depends_on = [kubernetes_deployment.ahfu-test-deploy-1]   # 等待前面的  deployment 创建成功
  # 用一条命令来得到 k8s 上的 pod 的数据
  # kubectl get pods -l test=ahfu-test-deploy-1 -n sige-test-devops -o json | jq -c  '{"r":  .|tojson }'
  # 猜测 terraform 中使用 golang 的  map[string]string 来反序列化 json,所以 key-value 必须都是 string 类型
  program = ["bash", "-c", "kubectl get pods -l test=ahfu-test-deploy-1 -n sige-test-devops -o json | jq -c '{\"r\": .|tojson }'"]
}

output "containers" {
   # 使用 json decode 来获取 kubectl 返回的内容
  value = [for item in jsondecode(data.external.filtered_pods.result.r).items : { container_name = item.metadata.name, container_ip = item.status.podIP }]
}

执行 terraform apply -auto-approve后,输出如下内容:

containers = [
  {
    "container_ip" = "10.42.0.175"
    "container_name" = "ahfu-test-deploy-1-846cf445f7-npbp2"
  },
  {
    "container_ip" = "10.42.1.96"
    "container_name" = "ahfu-test-deploy-1-846cf445f7-m5kqr"
  },
]

标签:ahfu,name,deploy,ip,terraform,deployment,test,container
From: https://www.cnblogs.com/ahfuzhang/p/17888503.html

相关文章

  • 软件测试/人工智能|使用 Pip 管理 Python 包
    前言Python是一门强大而灵活的编程语言,其社区拥有数量庞大且多样化的第三方库和工具,这些库可以让我们在项目中快速、高效地开发。pip是Python的包管理工具,我们可以使用pip轻松地安装、升级和管理这些第三方包。什么是Pip?Pip是Python包索引(PyPI)的客户端工具,可以方便地从......
  • E. Good Triples
    绝,太绝了看我娓娓道来1.如果\(a+b+c\)过程中有进位,那么位数和肯定不等(+1-10)2.由此可知,只要相加过程中没有进位的abc就是合法的3.n的每一位等于abc对应的每一位的和4.最后一步就是排列组合的思维,我真的词穷了。。。代码#include<bits/stdc++.h>usingnamespacestd;#defin......
  • PHP获取浏览器,PHP获取IP地址,PHP获取设备型号
    <?php//获取浏览器functionget_broswer(){$sys=$_SERVER['HTTP_USER_AGENT'];//获取用户代理字符串$exp[0]="未知浏览器";$exp[1]="";//stripos()函数查找字符串在另一字符串中第一次出现的位置(不区分大小写)preg_match()执行匹配正则表达......
  • JetBrains DataGrip 2023.3 (macOS, Linux, Windows) - 数据库和 SQL 跨平台 IDE
    JetBrainsDataGrip2023.3(macOS,Linux,Windows)-数据库和SQL跨平台IDE请访问原文链接:https://sysin.org/blog/jb-datagrip-2023/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgJetBrainsDataGrip-多种数据库,一个工具为什么选择DataGrip轻松处理数据......
  • JetBrains WebStorm 2023.3 (macOS, Linux, Windows) - 最智能的 JavaScript IDE
    JetBrainsWebStorm2023.3(macOS,Linux,Windows)-最智能的JavaScriptIDE请访问原文链接:https://sysin.org/blog/jb-webstorm-2023/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgJetBrainsWebStorm-最智能的JavaScriptIDEWebStorm是一个适用于JavaSc......
  • 最强无缓存PCIe 4.0 SSD之一!长江存储致态TiPlus7100 4TB评测:满盘写入缓外2.3GB/s
    一、前言:长江存储首款自有品牌致态4TBSSD其实早在年初,就有不少搭载长江存储闪存颗粒的国产4TBSSD,不过长江存储的自有品牌致态,直到现在才推出这款致态TiPlus71004TB。当然有句话叫好货不怕晚,致态TiPlus71004TB是一款非常优秀的PCIe4.0SSD。致态TiPlus71004TB采用了长江......
  • 2023年,用友BIP持续发展 ,引领企业数智化
    2023年,人工智能、先进计算、数字孪生、区块链及元宇宙等数字技术推动新一轮科技革命和产业变革,全球范围加速由工业经济向数字经济转型。2023年,全球IT技术与产业的创新已从此前的以云计算为中心进入到以AI为中心的新阶段,商业创新也从此前的数字商业进入到数字化和智能化并重的全面数......
  • 2023最新中级难度JavaScript面试题,包含答案。刷题必备!记录一下。
    好记性不如烂笔头内容来自面试宝典-中级难度JavaScript面试题合集问:如何实现在JavaScript中的操作settimeout/setinterval?在JavaScript中,setTimeout()和setInterval()是两个非常重要的函数,它们分别用于设置一次性延时执行的函数和周期性重复执行的函数。setTi......
  • 2023最新高级难度JavaScript面试题,包含答案。刷题必备!记录一下。
    好记性不如烂笔头内容来自面试宝典-高级难度JavaScript面试题合集问:请问你如何使用装饰器模式?装饰器模式是一种设计模式,它允许我们在不修改原有类的基础上,动态地添加新的功能或者行为。装饰器模式通过创建一个新的对象来包装原始对象,并提供与原始对象相同的方法接口,但是......
  • [ABC254Ex] Multiply or Divide by 2
    [ABC254Ex]MultiplyorDivideby2题意:给定大小为$n$的集合$A$和$B$,你可以对集合$A$中的元素$a_i$进行两种操作,分别为$a_i\leftarrow\lfloor\dfrac{a_i}{2}\rfloor$,和$a_i\leftarrowa_i\times2$。你需要操作集合$A$直至集合$A,B$完......