Terraform模块Module
一、简介
模块是为了便为管理与复用,就跟函数是一样的。一个模块大概有以下文件:
main.tf:就像是函数入口;
README.md:如函数的声明;
variables.tf: 变量说明,就像函数的入参;
outputs.tf: 输出,如函数的返回值;
examples: 使用示例;
另外,模块也是可以嵌套的,即模块里有子模块,但不建议嵌套太深。
二、创建自定义模块
项目模块结构

通过一个简单示例讲解如何自己创建一个模块。这个模块主要使用output输出。
这个模块共有两个文件,一个是main.tf,用来定义Resource、Output等操作。另一个文件是variables.tf,用来定义这个模块所需要的输入变量。这两个文件都放在当前目录的module_test文件夹下
main.tf文件如下:
它就是资源定义,然后把一些变量用var.xxx的形式替换,这样Terraform解析的时候就会找对应的变量进行赋值
output "test1" {
value = {
v=var.short_name
n=var.namespace
}
}
variables.tf文件如下:
在main.tf文件使用的变量,都在这里有定义
variable "short_name" {
default = "terraform-vpc-t"
}
variable "namespace" {
description = "k8s namespace"
}
三、使用模块
现在已经创建好了模块,接下来要引用它。我们就在当前目录引用即可。代码如下:
main.tf
module "vpc" {
source = "./module_test/"
namespace = "llj"
}
output "test3" {
value = module.vpc.test1
}
source: 模块来源的地址;
namespace: 命令空间,模块定义的入参;
引用模块还是很简单的,跟调用函数差不多,就是告诉别人名字和入参。
namespace:是模块中定义的输入变量(即有参函数定义的参数即形参),要么定义时赋值默认值,要么使用引用模块时参数赋值被传入。
第一种情况:在使用引用模块这块namespace参数要被当做实参赋值即(namespace = "llj")传入到模块中,如果模块中定义的输入参数namespace被赋值,引用模块那块传入进来的实参值会覆盖模块中定义的参数值。
第二种情况:在使用引用模块这块namespace参数不要被当做实参输入到模块中,如果模块中定义的输入参数namespace被赋值,则使用模块中定义的输入参数值。
四、执行输出结果
在引用模块当前目录执行即可
terraform init

terraform apply


浙公网安备 33010602011771号