作者:张富春(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"
},
]

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

  1. web 分享代码片段

    <div class="bshare-custom icon-medium-plus"><a title="分享到QQ空间" class=&q ...

  2. VS Code项目中通过npm包的方式共享代码片段的方案实现

    VS Code项目中通过npm包的方式共享代码片段的方案实现 上周在 "VS Code项目中共享自定义的代码片段方案" 的文章中提到过一个共享代码片段的方案,上周经过调研后并没有发 ...

  3. discuz的门户文章页中增加百度分享代码

    discuz虽然有百度分享插件,但是不太想用,于是自己手动添加了百度分享代码: 一.在http://share.baidu.com/地址中申请设置自己的百度分享代码,选择的风格完全按照个人喜好进行选择 ...

  4. 微信小程序代码片段

    微信小程序代码片段是一种可分享的小项目,可用于分享小程序和小游戏的开发经验.展示组件和 API 的使用.复现开发问题等等.分享代码片段会得到一个链接,所有拥有此分享链接的人可以在工具中导入此代码片段. ...

  5. visual studio制作代码片段

    使用 Visual Studio 的代码片段功能,我们可以快速根据已有模板创建出大量常用的代码出来.ReSharper 已经自带了一份非常好用的代码片段工具,不过使用 ReSharper 创建出来的代 ...

  6. VSCode添加用户代码片段,自定义用户代码片段

    在使用VScode开发中经常会有一些重复使用的代码块,复制粘贴也很麻烦,这时可以在VScode中添加用户代码片段,输入简写即可快捷输入. VScode中添加用户自定义代码片段很简单. 1.在VScod ...

  7. 一些实用的CSS Media Query代码片段,个人采集

    CSS3的出现让响应式Web设计变得简单,CSS3提供了强大的media queries,允许你针对不同的条件设置不同的样式,可以在不修改页面内容的情况下,为不同设备提供不同的样式效果. 以下是一些C ...

  8. 创建自己的代码片段(CodeSnippet)

    前言 工作中经常会写一些重复的代码片段,如自动属性.for循环.Action等等,针对这种情况,VisualStudio已经给我们提供了一个非常方便的功能--代码片段,是我们可以简单的输入几个字母就能 ...

  9. spring rest docs自定义代码片段

    Spring rest docs 文档插件在生成文档时会默认生成6个代码片段,自适应生成其它片段.通过阅读官方文档发现其可以自定义生成的代码片段,但是官方只说了可以自定义模版,修改现有的代码片段的方法 ...

  10. VisualStudio2019 利用代码片段管理器新建快捷命令

    原文:https://www.cnblogs.com/huguodong/p/12694902.html 一.前言 VisualStudio 可以通过敲出缩写字符串,然后按两次Tab按键自动展开成一段 ...

随机推荐

  1. 10年经验总结,华为fellow教你如何成为一名优秀的架构师?

    摘要:华为云首席架构师分享成为架构师必备的一些特质和能力. 本文分享自华为云社区<10年经验总结,华为fellow教你如何成为一名优秀的架构师?>,作者: 技术火炬手 . 在<云享人 ...

  2. 【scikit-learn基础】--『监督学习』之 层次聚类

    层次聚类算法是机器学习中常用的一种无监督学习算法,它用于将数据分为多个类别或层次.该方法在计算机科学.生物学.社会学等多个领域都有广泛应用. 层次聚类算法的历史可以追溯到上世纪60年代,当时它主要被用 ...

  3. PPT 工作计划PPT 应该怎么样改

    收集素材 页面处理 丰富细节 PPT 工作计划PPT 应该怎么样做

  4. Django中安装websocket

    完整代码: https://gitee.com/mom925/django-system项目结构: 先安装所需库: pip install channels下面将websocket作为插件一样的只需要 ...

  5. 【短道速滑四】Halcon的texture_laws算子自我研究

    Halcon里有个texture_laws 算子,最近实现了下,记录下相关细节. Halcon的文档里对该算子是这样描述的: texture_laws - Filter an image using ...

  6. RabbitMQ--工作模式

    单一模式 即单机不做集群 普通模式 即默认模式,对于消息队列载体,消息实体只存在某个节点中,每个节点仅有 相同的元数据,即队列的结构 当消息进入A节点的消息队列载体后,消费 者从B节点消费时,rabb ...

  7. Codeforces 115A Party (并查集思维)

    题意: 给你每个人的上级,并且一个人和他的所有上级都不能在一个party(小组)中(这点是根据题目给出的两点推导出来的),问最少需要几个party. 思路: 并查集,找一个集合中层级数最多的就是最少需 ...

  8. Educational Codeforces Round 108 (Rated for Div. 2) (A思维,Bmath,C前缀和,D枚举)

    1519A. Red and Blue Beans 问题简述 给定 \(r\) 个红豆,\(b\) 个蓝豆,差值 \(d\) ,要求我们进行为红蓝豆分组,使得红豆和蓝豆绝对值差值不大于 \(d\) , ...

  9. postman+springboot一次上传多个文件

    开发中到前端一次上传多个文件的需求如何实现,下面使用postman模拟前端的请求,后端使用srpingboot来实现 1.postman设置 2.Java代码 @RestController @Req ...

  10. es6-10