如何通过 Terraform 检索 Azure 规模集的 VM 专用 IP 地址?
How can I retrieve Azure scale set's VM private IP Addresses via terraform?
我想知道如何使用 Terraform-provider-azurerm 检索规模集 VM 的专用 IP 地址。我认为没有资源也没有数据资源直接return VM IP's.
我尝试过的一个选项是通过模板资源生成 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 中使用私有 IP,而不是在 terraform 之外。
有没有人有更好的主意?
编辑 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}"
}
此类资源可以导入TF Scale Set。所以这是一个选择,唯一的麻烦是有很多属性并且导入会引入其他问题。我发现一两个东西没有在 AzureRM 提供程序中作为数据资源公开。可能值得向 GitHub 存储库添加请求?
此致,
我想知道如何使用 Terraform-provider-azurerm 检索规模集 VM 的专用 IP 地址。我认为没有资源也没有数据资源直接return VM IP's.
我尝试过的一个选项是通过模板资源生成 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 中使用私有 IP,而不是在 terraform 之外。
有没有人有更好的主意?
编辑 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}"
}
此类资源可以导入TF Scale Set。所以这是一个选择,唯一的麻烦是有很多属性并且导入会引入其他问题。我发现一两个东西没有在 AzureRM 提供程序中作为数据资源公开。可能值得向 GitHub 存储库添加请求?
此致,