ARM 模板的 CIDR 函数

本文介绍了在 Azure 资源管理器模板(ARM 模板)中处理 CIDR 的函数。

提示

建议使用 Bicep,因为它提供与 ARM 模板相同的功能,并且该语法更易于使用。 有关详细信息,请参阅 cidr 函数。

parseCidr

parseCidr(network)

分析以 CIDR 表示法表示的 IP 地址范围,以获取地址范围的各种属性。

在 Bicep 中,使用 parseCidr 函数。

参数

参数 必选 Type 说明
network 字符串 以 CIDR 表示法表示的字符串,包含要转换的 IP 地址范围。

返回值

一个包含地址范围的各种属性的对象。

示例

以下示例分析 IPv4 CIDR 字符串:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [],
  "outputs": {
    "v4info": {
      "type": "object",
      "value": "[parseCidr('10.144.0.0/20')]"
    }
  }
}

前面的示例返回以下对象:

{
  "network":"10.144.0.0",
  "netmask":"255.255.240.0",
  "broadcast":"10.144.15.255",
  "firstUsable":"10.144.0.1",
  "lastUsable":"10.144.15.254",
  "cidr":20
}

以下示例分析 IPv6 CIDR 字符串:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [],
  "outputs": {
    "v6info": {
      "type": "object",
      "value": "[parseCidr('fdad:3236:5555::/48')]"
    }
  }
}

前面的示例返回以下对象:

{
  "network":"fdad:3236:5555::",
  "netmask":"ffff:ffff:ffff::",
  "firstUsable":"fdad:3236:5555::",
  "lastUsable":"fdad:3236:5555:ffff:ffff:ffff:ffff:ffff",
  "cidr":48
}

cidrSubnet

cidrSubnet(network, newCIDR, subnetIndex)

将以 CIDR 表示法表示的指定 IP 地址范围拆分为具有新 CIDR 值的子网,并返回具有指定索引的子网的 IP 地址范围。

在 Bicep 中,使用 cidrSubnet 函数。

参数

参数 必选 Type 说明
network 字符串 包含要转换的 IP 地址范围的字符串,其中 IP 地址范围以 CIDR 表示法表示。
newCIDR int 一个整数,表示要用于子网的 CIDR。 此值应等于或大于 network 参数中的 CIDR 值。
subnetIndex int 要返回的所需子网 IP 地址范围的索引。

返回值

具有指定索引的子网 IP 地址范围的字符串。

示例

以下示例根据指定的 /20 计算前五个 /24 子网范围:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [],
  "outputs": {
    "v4subnets": {
      "type": "array",
      "copy": {
        "count": "[length(range(0, 5))]",
        "input": "[cidrSubnet('10.144.0.0/20', 24, range(0, 5)[copyIndex()])]"
      }
    }
  }
}

上面的示例返回下列数组:

[
  "10.144.0.0/24",
  "10.144.1.0/24",
  "10.144.2.0/24",
  "10.144.3.0/24",
  "10.144.4.0/24"
]

以下示例根据指定的 /48 计算前五个 /52 子网范围:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [],
  "outputs": {
    "v6subnets": {
      "type": "array",
      "copy": {
        "count": "[length(range(0, 5))]",
        "input": "[cidrSubnet('fdad:3236:5555::/48', 52, range(0, 5)[copyIndex()])]"
      }
    }
  }
}

上面的示例返回下列数组:

[
  "fdad:3236:5555::/52"
  "fdad:3236:5555:1000::/52"
  "fdad:3236:5555:2000::/52"
  "fdad:3236:5555:3000::/52"
  "fdad:3236:5555:4000::/52"
]

cidrHost

cidrHost(network, hostIndex)

计算以 CIDR 表示法表示的指定 IP 地址范围内具有指定索引的主机的可用 IP 地址。 例如,对于 192.168.1.0/24,有预留的 IP 地址:192.168.1.0 用作网络标识符地址,而 192.168.1.255 用作广播地址。 只能将范围从 192.168.1.1192.168.1.254 的 IP 地址分配给主机,我们称之为“可用”IP 地址。 因此,当函数传递 0 的 hostIndex 时,将返回 192.168.1.1

在 Bicep 中,使用 cidrHost 函数。

参数

参数 必选 Type 说明
network 字符串 包含要转换的 IP 网络的字符串(必须采用正确的网络格式)。
hostIndex int 要返回的主机 IP 地址的索引。

返回值

IP 地址的字符串。

示例

以下示例根据指定的 /24 计算前五个可用的主机 IP 地址:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [],
  "outputs": {
    "v4hosts": {
      "type": "array",
      "copy": {
        "count": "[length(range(0, 5))]",
        "input": "[cidrHost('10.144.3.0/24', range(0, 5)[copyIndex()])]"
      }
    }
  }
}

上面的示例返回下列数组:

[
  "10.144.3.1"
  "10.144.3.2"
  "10.144.3.3"
  "10.144.3.4"
  "10.144.3.5"
]

以下示例根据指定的 /52 计算前五个可用的主机 IP 地址:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [],
  "outputs": {
    "v6hosts": {
      "type": "array",
      "copy": {
        "count": "[length(range(0, 5))]",
        "input": "[cidrHost('fdad:3236:5555:3000::/52', range(0, 5)[copyIndex()])]"
      }
    }
  }
}

上面的示例返回下列数组:

[
  "fdad:3236:5555:3000::1"
  "fdad:3236:5555:3000::2"
  "fdad:3236:5555:3000::3"
  "fdad:3236:5555:3000::4"
  "fdad:3236:5555:3000::5"
]

后续步骤