“可共享”;计数“;Terraform模块之间的元参数?

“可共享”;计数“;Terraform模块之间的元参数?,terraform,Terraform,我有一个案例,其中我有两个模块,一个使用OS1创建资源,另一个使用OS2。对这两个资源使用公共网络配置,以便它们在配置时连接到同一网络。我希望实现的是,在指定这些机器的IP地址时,我可以为连接到特定网络的机器提供后续IP,例如,给定 module one{ source = /path/to/OS1_module count = 2 network_config = var.networkConfig1 } module two{ source = /path/

我有一个案例,其中我有两个模块,一个使用OS1创建资源,另一个使用OS2。对这两个资源使用公共网络配置,以便它们在配置时连接到同一网络。我希望实现的是,在指定这些机器的IP地址时,我可以为连接到特定网络的机器提供后续IP,例如,给定

module one{
    source = /path/to/OS1_module
    count = 2
    network_config = var.networkConfig1
}

module two{
    source = /path/to/OS2_module
    count = 2
    network_config = var.networkConfig1
}
是否有某种方式在这两个模块之间共享一个变量,以便模块2中提供的后续两个VM将遵循模块1中的VM?例如,如果我想保存一个定义192.168.x/24网络的第三个八位字节的变量,是否可以使用count或其他方法创建这样一个变量,并在这两个变量之间共享,以便

VM1-OS1=192.168.1.10

VM2-OS1=192.168.1.11

VM3-OS2=192.168.1.12


VM4-OS3=192.168.1.13

我不确定是否完全理解您的要求,但听起来您希望
模块“二”
模块“一”
之后的下一个可用地址开始编号

实现这一点的一种方法是向该模块添加一个新的输入变量,以指定主机号,然后以考虑模块“堆叠”的方式为每个实例设置该变量,如下所示:

module "one" {
    source = "./modules/OS1"
    count  = 2

    network_config = var.networkConfig1
    host_number    = count.index
}

module "two" {
    source = "./modules/OS1"
    count  = 2

    network_config = var.networkConfig1
    host_number    = length(module.one) + count.index
}
这利用了这样一个事实,即带有
count
的模块块在表达式中显示为表示所有实例的对象列表,因此
length(module.one)
始终等于该模块块的
count


这种方法有一个很大的警告:如果您在将来更改
模块“一”
计数,那么您还将对所有
模块“二”
实例重新编号,因为
长度(module.one)
将发生变化。不幸的是,这是IP地址范围规划的一个典型问题,我通常建议通过将地址分配集中在一个位置,然后将分配的地址传递到需要它们的单独模块来解决它,从此以后,您可以在一个地方维护IP地址表,确保不会无意中重新编号任何现有网络,而不必仔细协调多个不同模块之间的更改。

我认为这使我的IP地址表更适合我自己的用例,谢谢!