我已经编写了Terraform脚本来创建一些Azure虚拟机。
创建的VM数量基于我的type
文件中名为.tfvars
的变量:
type = [ "Master-1", "Master-2", "Master-3", "Slave-1", "Slave-2", "Slave-3" ]
我的variables.tf
文件包含以下local
:
count_of_types = "${length(var.type)}"
我的resources.tf
文件包含根据以下信息实际创建相应数量的VM所需的代码:
resource "azurerm_virtual_machine" "vm" {
count = "${local.count_of_types}"
name = "${replace(local.prefix_specific,"##TYPE##",var.type[count.index])}-VM"
location = "${azurerm_resource_group.main.location}"
resource_group_name = "${azurerm_resource_group.main.name}"
network_interface_ids = ["${azurerm_network_interface.main.*.id[count.index]}"]
vm_size = "Standard_B2ms"
tags = "${local.tags}"
最后,在我的output.tf
文件中,输出每个服务器的IP地址:
output "public_ip_address" {
value = ["${azurerm_public_ip.main.*.ip_address}"]
}
我正在使用1个Master和1个Slave VM创建一个Kubernetes集群。为此,脚本可以正常工作-第一个IP输出是主服务器,第二个IP输出是从服务器。
但是,当我总共迁移到8个以上的VM时,我想知道哪个IP指向哪个VM。
是否有一种方法可以修改我的输出,使其包含type
本地地址,或者仅包含服务器的主机名以及公共IP?
例如54.10.31.100 // Master-1
。
答案 0 :(得分:0)
Raunak Jhawar's answer为我指明了正确的方向,因此得到了绿色的勾号。
作为参考,这是我最后使用的确切代码:
output "public_ip_address" {
value = "${formatlist("%s: %s", azurerm_virtual_machine.vm.*.name, azurerm_public_ip.main.*.ip_address)}"
}
这将导致以下输出: