作者:张富春(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. 让数据大白于天下:GCC插件实现代码分析和安全审计

    摘要: 如何利用GCC的插件功能,辅助安全分析人员实现对程序的安全审计.漏洞检测.安全加固等自动化处理能力,提升分析效率和精准度. 本文分享自华为云社区<利用GCC插件实现代码分析和安全审计&g ...

  2. 火山引擎A/B测试:MAB智能调优实验,企业活动效果提升新利器

      618临近,各大电商APP的预热活动已然拉开序幕.对企业而言,一场活动从策划到上线,中间经过效果验证,其业务成本很高.一个好的活动创意从策划.开发.到最终发布,至少会经历几周实践,如果中间还经历A ...

  3. Solon Web 开发:二、开发知识准备

    1.约定 //资源路径约定(不用配置:也不能配置) resources/app.yml( 或 app.properties ) #为应用配置文件 resources/WEB-INF/static/ 或 ...

  4. Python报错:TypeError: 'dict_keys' object does not support indexing(机器学习实战treePlotter代码)解决方案

    错误信息: 学习<机器学习实战>这本书时,按照书上的代码运行,产生了错误,但是在代码中没有错误提示,产生错误的代码如下: firstStr = myTree.keys()[0] print ...

  5. tinymce富文本编辑器升级问题

    突然这样,之前好好地.

  6. uni-app打包到安卓步骤

    1.打包到安卓 https://www.bilibili.com/video/BV1BJ411W7pX?p=56 2.打包到IOS https://www.jianshu.com/p/ef6e6e01 ...

  7. 元素可视区client系列

    client翻译过来就是客户端,我们使用client系列的相关属性来获取元素可视区的相关信息. 通过client系列的相关属性可以动态的得到该元素的边框大小.元素大小等. client系列属性 作用 ...

  8. freeswitch的mod_xml_cdr模块

    概述 freeswitch是一款简单好用的VOIP开源软交换平台. 在语音呼叫的过程中,话单是重要的计价和结算依据,话单的产生需要稳定可靠,可回溯. fs中的mod_xml_cdr模块提供了基本话单功 ...

  9. java基础-idea的使用-day07

    目录 1. idea的获取 2. 已经安装的idea 如何卸载 3. idea的安装与破解 3. 设置 4. 写代码常用快捷建的使用 1. idea的获取 链接:https://pan.baidu.c ...

  10. RLHF · PbRL | 速通 ICLR 2024 RLHF

    检索关键词:ICLR 2024.reinforcement learning.preference.human feedback. https://openreview.net/search?term ...