Terraform

在Terraform中,将一个局部变量(locals块定义的变量)改为全局变量意味着你要将其定义为一个输入变量,这样可以在模块之间共享或者从命令行、变量文件等外部来源提供值。下面是将上述局部变量转换为全局变量的方式:
首先,从你的 Terraform 配置中移除 locals 块:Hcl1# 移除这一部分2# locals {3# jenkins_ports = [{4# internal = 80805# external = 80806# }, {7# internal = 500008# external = 500009# }]10# }然后,在你的 Terraform 配置文件的最顶部或一个单独的 variables.tf 文件中定义一个输入变量,用来接收这些端口信息。因为这是一个复杂的数据结构(列表中的对象),你可能需要使用 type = list(object({ … })) 来定义它的类型:Hclvariable “jenkins_ports” { type = list(object({ internal = number external = number })) default = [ { internal = 8080, external = 8080 }, { internal = 50000, external = 50000 }, ]}这段代码定义了一个名为 jenkins_ports 的全局变量,它是一个对象列表,每个对象包含两个字段:internal 和 external,均为数字类型。同时,我们也提供了一个默认值,以便在没有外部输入时使用。现在,你可以在 Terraform 配置的其他部分通过 v a r . j e n k i n s p o r t s 引 用 这 个 全 局 变 量 。 例 如 : H c l 1 r e s o u r c e " e x a m p l e r e s o u r c e " " j e n k i n s " 2 p o r t s = v a r . j e n k i n s p o r t s 3 通 过 这 样 的 设 置 , j e n k i n s p o r t s 变 量 就 成 为 了 全 局 变 量 , 可 以 在 模 块 间 共 享 或 从 外 部 灵 活 地 提 供 不 同 的 值 。 然 后 使 用 动 态 内 联 块 或 者 f o r 循 环 或 者 c o u n t 动 态 内 联 示 例 : p r o v i d e r " d o c k e r " h o s t = " t c p : / / 192.168.1.200 : 2375 " r e s o u r c e " d o c k e r i m a g e " " j e n k i n s " n a m e = " j e n k i n s / j e n k i n s : 2.332.2 − c e n t o s 7 − j d k 8 " f o r c e r e m o v e = f a l s e k e e p l o c a l l y = t r u e / / 此 处 以 本 地 变 量 的 方 式 声 明 要 映 射 的 端 口 l o c a l s j e n k i n s p o r t s = [ i n t e r n a l = 8080 e x t e r n a l = 8080 , i n t e r n a l = 50000 e x t e r n a l = 50000 ] r e s o u r c e " d o c k e r c o n t a i n e r " " j e n k i n s " i m a g e = d o c k e r i m a g e . j e n k i n s . n a m e n a m e = " j e n k i n s − d e m o " p r i v i l e g e d = t r u e u s e r = " r o o t " / / " j e n k i n s " / / 使 用 d y n a m i c 来 实 现 动 态 d y n a m i c " p o r t s " f o r e a c h = l o c a l . j e n k i n s p o r t s c o n t e n t i n t e r n a l = p o r t s . v a l u e . i n t e r n a l e x t e r n a l = p o r t s . v a l u e . e x t e r n a l i p = " 0.0.0.0 " p r o t o c o l = " t c p " v o l u m e s c o n t a i n e r p a t h = " / v a r / j e n k i n s h o m e " h o s t p a t h = " / d a t a / d e v o p s 5 / j e n k i n s h o m e " c o u n t 示 例 : c o u n t = l e n g t h ( l o c a l . r e c o r d s ) n a m e = l o c a l . z o n e h o s t r e c o r d = l o c a l . r e c o r d s [ c o u n t . i n d e x ] 只 有 t g w 分 区 域 。 f o r 示 例 : [ f o r I N D E X , V A R i n O B J E C T : " {var.jenkins_ports} 引用这个全局变量。例如:Hcl1resource "example_resource" "jenkins" {2 ports = var.jenkins_ports3}通过这样的设置,jenkins_ports 变量就成为了全局变量,可以在模块间共享或从外部灵活地提供不同的值。然后使用动态内联块 或者for循环或者count动态内联示例:provider "docker" { host = "tcp://192.168.1.200:2375"}resource "docker_image" "jenkins" { name = "jenkins/jenkins:2.332.2-centos7-jdk8" force_remove = false keep_locally = true}//此处以本地变量的方式声明要映射的端口locals { jenkins_ports = [{ internal = 8080 external = 8080 }, { internal = 50000 external = 50000 } ]}resource "docker_container" "jenkins" { image = docker_image.jenkins.name name = "jenkins-demo" privileged = true user = "root" //"jenkins" // 使用dynamic来实现动态 dynamic "ports" { for_each = local.jenkins_ports content { internal = ports.value.internal external = ports.value.external ip = "0.0.0.0" protocol = "tcp" } } volumes { container_path = "/var/jenkins_home" host_path = "/data/devops5/jenkins_home" }}count示例:count = length(local.records) name = local.zone host_record = local.records[count.index]只有tgw分区域。for示例:[ for INDEX, VAR in OBJECT: " var.jenkinsportsHcl1resource"exampleresource""jenkins"2ports=var.jenkinsports3jenkinsports使forcountprovider"docker"host="tcp://192.168.1.200:2375"resource"dockerimage""jenkins"name="jenkins/jenkins:2.332.2centos7jdk8"forceremove=falsekeeplocally=true//localsjenkinsports=[internal=8080external=8080,internal=50000external=50000]resource"dockercontainer""jenkins"image=dockerimage.jenkins.namename="jenkinsdemo"privileged=trueuser="root"//"jenkins"//使dynamicdynamic"ports"foreach=local.jenkinsportscontentinternal=ports.value.internalexternal=ports.value.externalip="0.0.0.0"protocol="tcp"volumescontainerpath="/var/jenkinshome"hostpath="/data/devops5/jenkinshome"countcount=length(local.records)name=local.zonehostrecord=local.records[count.index]tgwfor[forINDEX,VARinOBJECT:"{INDEX}=${VAR}"]1、创建transit gateway2、attachment(附件)添加2个VPC3、VPC路由表添加路由,网关为tgw4、terraform-aws-modules/terraform-aws-transit-gateway使用示例:https://github.com/terraform-aws-modules/terraform-aws-transit-gateway/blob/master/examples/complete/main.tfdx github示例https://github.com/BorisLabs/terraform-aws-directconnect/blob/master/examples/dx_connection/main.tfVIFhttps://github.com/BorisLabs/terraform-aws-directconnect/blob/master/examples/dx_gateway_and_private_vif/main.tfVIF bgp auth key没加密?:https://github.com/BorisLabs/terraform-aws-directconnect/blob/master/variables.tf

  • 11
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值