在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.jenkinsports引用这个全局变量。例如:Hcl1resource"exampleresource""jenkins"2ports=var.jenkinsports3通过这样的设置,jenkinsports变量就成为了全局变量,可以在模块间共享或从外部灵活地提供不同的值。然后使用动态内联块或者for循环或者count动态内联示例:provider"docker"host="tcp://192.168.1.200:2375"resource"dockerimage""jenkins"name="jenkins/jenkins:2.332.2−centos7−jdk8"forceremove=falsekeeplocally=true//此处以本地变量的方式声明要映射的端口localsjenkinsports=[internal=8080external=8080,internal=50000external=50000]resource"dockercontainer""jenkins"image=dockerimage.jenkins.namename="jenkins−demo"privileged=trueuser="root"//"jenkins"//使用dynamic来实现动态dynamic"ports"foreach=local.jenkinsportscontentinternal=ports.value.internalexternal=ports.value.externalip="0.0.0.0"protocol="tcp"volumescontainerpath="/var/jenkinshome"hostpath="/data/devops5/jenkinshome"count示例:count=length(local.records)name=local.zonehostrecord=local.records[count.index]只有tgw分区域。for示例:[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
01-11
1259
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
07-18
07-18
07-18
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交