作者:张富春(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. 梦幻联动!金蝶&华为云面向大企业发布数据库联合解决方案

    摘要:近日,金蝶软件(中国)有限公司(以下简称"金蝶")携手华为云共同发布了金蝶云·星瀚.金蝶云·苍穹和GaussDB(for openGauss)数据库联合解决方案. 本文分享自 ...

  2. web自动化-selenium携带cookie免密登录

    在我们做web自动化的时候,经常会遇到含有登录的页面,我们必须登录之后才能够对我们想要操作的页面元素进行定位,也就是说所有的操作都在登录前提下,其实没必要每次请求都先登录,当我们登录成功了,会在coo ...

  3. 动作捕捉系统验证OPT追踪井下无人机的性能

    井下无人机长时间在恶劣环境下执行勘测.救援任务,通讯系统可能会陷入两难的境地--传输高精度坐标伴随着大量耗能.为解决这项难题,中国矿业大学计算机科学和技术学院陈朋朋教授团队提出了一种基于超宽带(UWB ...

  4. 【flask】flask请求上下文分析 threading.local对象 偏函数 flask1.1.4生命执行流程 wtforms

    目录 上节回顾 今日内容 1 请求上下文分析(源码:request原理) 1.1 导出项目的依赖 1.2 函数和方法 1.3 threading.local对象 1.4 偏函数 1.5 flask 整 ...

  5. 2018年第九届 蓝桥杯C组 C/C++决赛题解

    蓝桥杯历年国赛真题汇总:Here 1.年龄问题 s夫人一向很神秘.这会儿有人问起她的年龄,她想了想说: "20年前,我丈夫的年龄刚好是我的2倍,而现在他的年龄刚好是我的1.5倍". ...

  6. OpenTSDB 数据存储详解

    本文首发于 vivo互联网技术 微信公众号链接: https://mp.weixin.qq.com/s/qayKiwk5QAIWI7-nyD3FVA作者:DuZhimin 随着互联网.尤其是物联网的发 ...

  7. 使用acme.sh、acme-dns自动申请ssl证书

    使用acme.acme-dns实现自动申请ssl证书并实现自动替换 有些dns没有dnsapi,所以用这种方式申请只需要添加一条dns解析即可完成 以下为linux系统操作 安装acme.sh 官方源 ...

  8. OpenSCA用开源的方式做开源风险治理:Why? What? How?

    随着容器.微服务等新技术的快速迭代,开源软件已成为业界主流形态,开源和云原生时代的到来导致软件供应链越来越趋于复杂化和多样化,网络攻击者开始采用软件供应链攻击作为击破关键基础设施的的重要突破口,从而导 ...

  9. spring-transaction源码分析(5)TransactionInterceptor事务拦截逻辑

    spring-tx的事务拦截逻辑在TransactionInterceptor类,本文将详细分析其实现方式. 事务拦截器TransactionInterceptor spring-tx的事务拦截逻辑在 ...

  10. Git Clone一个GitHub仓库时,发生报错

    1.问题 1.使用HTTP方式:Git: fatal: unable to access ' https://github. com/Light-City/CPlusPlusThings. git/' ...