我有一个配置如下的NIC
resource "azurerm_network_interface" "nic" {
name = "nic1"
location = "West Europe"
resource_group_name = "MyRG"
enable_ip_forwarding = true
ip_configuration {
name = "ipconfig1"
subnet_id = azurerm_subnet.publicsubnet.id
private_ip_address_allocation = "Static"
private_ip_address = "10.0.0.10"
public_ip_address_id = azurerm_public_ip.ClusterPublicIP.id
}
}
字符串
已分配公共IP,并最终由Azure中的防火墙使用。但是,我希望向此NIC添加多个IP地址。创建应用程序时应添加IP地址。因此,我可以使用以下项创建公共IP:
resource "azurerm_public_ip" "pip" {
allocation_method = "Static"
location = "West Europe"
name = "pip-${var.appname}"
resource_group_name = var.rgName
}
型
但是,我在azurerm provider中找不到任何允许我将其添加到先前定义的NIC的资源。ip_configuration块必须嵌入在azurerm_network_interface中。
因此,我尝试使用azapi provider,如下所示:
resource "azapi_update_resource" "add_pip_to_forti" {
type = "Microsoft.Network/networkInterfaces@2023-06-01"
resource_id = var.nicResourceId
body = jsonencode({
properties = {
ipConfigurations = [
{
name = "assignedByTF"
etag = "W/\"50b5631e-6e90-4196-a2df-d5c280c41b73\""
type = "Microsoft.Network/networkInterfaces/ipConfigurations"
properties = {
privateIPAddress = "10.0.0.200"
privateIPAllocationMethod = "Static"
publicIPAddress = {
id = azurerm_network_interface.nic.id
}
subnet = {
id = "/subscriptions/my-sub/resourceGroups/my-rg/providers/Microsoft.Network/virtualNetworks/hub-europe/subnets/pubsub"
}
primary = false
privateIPAddressVersion = "IPv4"
}
}
]
}
})
}
型
但是,这将删除NIC上得现有配置,并且会失败,因为无法删除主ip_configuration.
问题是:(如何)通过使用terraform,块resource "azapi_update_resource" "add_pip_to_forti"
可以扩展数组并保留现有的值吗?
谢谢.
1条答案
按热度按时间crcmnpdw1#
虽然不是一个很好的解决方案,但它确实有效。我最终做的是:
字符串
发生的是,我加载当前资源状态到
nic_before_change
,然后通过null_resource.assign_ipconfig_to_nic
中的自定义脚本分析网卡是否需要更改。在我的用例中,如果ipconfig必须出于任何原因添加。该资源也负责在销毁时删除它。最后,为了能够引用nics的最新状态,我再次将其导入到
nic_after_change
。由于这依赖于null_resource.assign_ipconfig_tonic
,因此资源显示最新状态。