你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

ARM 模板的 CIDR 函数

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

提示

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

parseCidr

parseCidr(network)

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

在 Bicep 中,使用 parseCidr 函数。

参数

参数 必选 类型​​ 说明
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 函数。

参数

参数 必选 类型​​ 说明
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 函数。

参数

参数 必选 类型​​ 说明
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"
]

后续步骤