如何检索Azure scale set';通过terraform的虚拟机专用IP地址?

如何检索Azure scale set';通过terraform的虚拟机专用IP地址?,terraform,azure-vm-scale-set,terraform-provider-azure,Terraform,Azure Vm Scale Set,Terraform Provider Azure,我想知道如何使用Terraform提供程序azurerm检索scale set VM的私有IP地址。我认为没有资源或数据资源直接返回VM IP 我尝试的一个选项是通过模板资源生成shellscript # get_vmss_privateip.tpl #!/bin/bash cap=`az vmss show \ --resource-group ${resource_group} \ --subscription ${subscription} \ --name ${

我想知道如何使用Terraform提供程序azurerm检索scale set 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
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}"
}
然后运行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中使用私有IP,而不是在terraform之外

有人有更好的想法吗

编辑2018/11/2

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

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

这种类型的资源可以导入TF。所以这是一种选择,唯一的麻烦是有很多属性,导入会带来其他问题。我在AzureRM提供程序中发现了一两个未作为数据资源公开的内容。是否值得向GitHub repo添加一个请求


关于这一点,

完全同意,但我之所以要问这个问题,是因为我想确认其他人的想法。如果您首先使用TF创建vm规模集,我不确定导入是否正确。我已经就回购提出了请求,谢谢@tim tharratt的建议。>我已经通过使用外部数据资源传递shell脚本执行来完成,>问题编辑。