如何通过terraform检索Azure规模集的VM专用IP地址?

时间:2018-10-31 15:36:50

标签: terraform azure-vm-scale-set terraform-provider-azure

我想知道如何使用Terraform-provider-azurerm检索比例集VM的专用IP地址。我认为没有资源,也没有数据资源直接返回VM IP。

我尝试的一个选项是通过模板资源生成shellscript。

# get_vmss_privateip.tpl
#!/bin/bash

cap=`az vmss show \
    --resource-group ${resource_group} \
    --subscription ${subscription} \
    --name ${name} \
    --query 'sku.capacity'`
for i in `seq 1 $cap`
do
az resource show \
    --resource-group ${resource_group} \
    --resource-type Microsoft.Compute/virtualMachineScaleSets \
    --api-version 2017-03-30 \
    --name ${name}/virtualMachines/$i/networkInterfaces \
    --query 'value[0].properties.ipConfigurations[0].properties' \
| jq -c '{privateIPAddress}'
done

然后运行terraform生成sh。

data "template_file" "private_ip_scripts" {
  template = "${file("templates/get_vmss_privateip.tpl")}"

  vars {
    resource_group = "${data.azurerm_resource_group.current.name}"
    subscription   = "${data.azurerm_subscription.current.subscription_id}"
    name           = "${azurerm_virtual_machine_scale_set.test.name}"
  }
}

resource "local_file" "test_private_ip_scripts" {
  filename = "scripts/get_vmss_instance_private_ip.sh"
  content  = "${data.template_file.manage_private_ip_scripts.rendered}"
}

但是这种方法与目标相距太远,我确实希望在terraform中而不是在terraform中使用私有IP。

有人有更好的主意吗?

编辑2018/11/2

我已经通过外部数据资源完成了

data "external" "vmss_test_private_ip" {
  program = ["bash", "${local_file.test_private_ip_scripts.filename}"]
}

output hoge {
  value = "${data.external.vmss_test_private_ip.result}"
}

2 个答案:

答案 0 :(得分:2)

可以将这种类型的资源导入TF Scale Set。因此,这是一个选择,麻烦之处在于存在很多属性,而导入会带来其他问题。我发现在AzureRM提供程序中没有作为数据资源公开的一两件事。可能值得向GitHub存储库添加请求吗?

此致

答案 1 :(得分:-2)

我敢肯定您不能尝试更多的shell脚本。这就是我的方法。尝试使用VPN来获得更好的连接,而不会被d ** m恶意软件应用所困扰。