将公用IP输出与服务器名称连接

时间:2019-03-11 09:27:36

标签: terraform

我已经编写了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

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)}"
}

这将导致以下输出:

Hostname/IP output