net functions

The net namespace contains functions that can help deal with network-related lookups and calculations. Some of these functions return specifically-typed values that contain additional methods useful for formatting or further calculations.

net.LookupIP

Resolve an IPv4 address for a given host name. When multiple IP addresses are resolved, the first one is returned.

Added in gomplate v1.9.0

Usage

net.LookupIP name
name | net.LookupIP

Arguments

name description
name (required) The hostname to look up. This can be a simple hostname, or a fully-qualified domain name.

Examples

$ gomplate -i '{{ net.LookupIP "example.com" }}'
93.184.216.34

net.LookupIPs

Resolve all IPv4 addresses for a given host name. Returns an array of strings.

Added in gomplate v1.9.0

Usage

net.LookupIPs name
name | net.LookupIPs

Arguments

name description
name (required) The hostname to look up. This can be a simple hostname, or a fully-qualified domain name.

Examples

$ gomplate -i '{{ join (net.LookupIPs "twitter.com") "," }}'
104.244.42.65,104.244.42.193

net.LookupCNAME

Resolve the canonical name for a given host name. This does a DNS lookup for the CNAME record type. If no CNAME is present, a canonical form of the given name is returned – e.g. net.LookupCNAME "localhost" will return "localhost.".

Added in gomplate v1.9.0

Usage

net.LookupCNAME name
name | net.LookupCNAME

Arguments

name description
name (required) The hostname to look up. This can be a simple hostname, or a fully-qualified domain name.

Examples

$ gomplate -i '{{ net.LookupCNAME "www.amazon.com" }}'
d3ag4hukkh62yn.cloudfront.net.

net.LookupSRV

Resolve a DNS SRV service record. This implementation supports the canonical RFC2782 form (i.e. _Service._Proto.Name), but other forms are also supported, such as those served by Consul’s DNS interface.

When multiple records are returned, this function returns the first.

A net.SRV data structure is returned. The following properties are available:

  • Target - (string) the hostname where the service can be reached
  • Port - (uint16) the service’s port
  • Priority, Weight - see RFC2782 for details

Added in gomplate v1.9.0

Usage

net.LookupSRV name
name | net.LookupSRV

Arguments

name description
name (required) The service name to look up

Examples

$ gomplate -i '{{ net.LookupSRV "_sip._udp.sip.voice.google.com" | toJSONPretty "  " }}'
{
  "Port": 5060,
  "Priority": 10,
  "Target": "sip-anycast-1.voice.google.com.",
  "Weight": 1
}

net.LookupSRVs

Resolve a DNS SRV service record. This implementation supports the canonical RFC2782 form (i.e. _Service._Proto.Name), but other forms are also supported, such as those served by Consul’s DNS interface.

This function returns all available SRV records.

An array of net.SRV data structures is returned. For each element, the following properties are available:

  • Target - (string) the hostname where the service can be reached
  • Port - (uint16) the service’s port
  • Priority, Weight - see RFC2782 for details

Added in gomplate v1.9.0

Usage

net.LookupSRVs name
name | net.LookupSRVs

Arguments

name description
name (required) The hostname to look up. This can be a simple hostname, or a fully-qualified domain name.

Examples

input.tmpl:

{{ range (net.LookupSRVs "_sip._udp.sip.voice.google.com") -}}
priority={{.Priority}}/port={{.Port}}
{{- end }}
$ gomplate -f input.tmpl
priority=10/port=5060
priority=20/port=5060

net.LookupTXT

Resolve a DNS TXT record.

This function returns all available TXT records as an array of strings.

Added in gomplate v1.9.0

Usage

net.LookupTXT name
name | net.LookupTXT

Arguments

name description
name (required) The host name to look up

Examples

$ gomplate -i '{{net.LookupTXT "example.com" | data.ToJSONPretty "  " }}'
[
  "v=spf1 -all"
]

net.ParseAddr(unreleased)

Unreleased: This function is in development, and not yet available in released builds of gomplate.

Parse the given string as an IP address (a netip.Addr).

Any of netip.Addr’s methods may be called on the resulting value. See the docs for details.

Usage

net.ParseAddr addr
addr | net.ParseAddr

Arguments

name description
addr (required) The IP string to parse. It must be either an IPv4 or IPv6 address.

Examples

$ gomplate -i '{{ (net.ParseAddr "192.168.0.1").IsPrivate }}'
true
$ gomplate -i '{{ $ip := net.ParseAddr (net.LookupIP "example.com") -}}
  {{ $ip.Prefix 12 }}'
93.176.0.0/12

net.ParseIP (deprecated)

Deprecation Notice: Use net.ParseAddr instead.

Parse the given string as an IP address (a netaddr.IP from the inet.af/netaddr package).

Any of netaddr.IP’s methods may be called on the resulting value. See the docs for details.

Added in gomplate v3.10.0

Usage

net.ParseIP ip
ip | net.ParseIP

Arguments

name description
ip (required) The IP string to parse. It must be either an IPv4 or IPv6 address.

Examples

$ gomplate -i '{{ (net.ParseIP "192.168.0.1").IsPrivate }}'
true
$ gomplate -i '{{ $ip := net.ParseIP (net.LookupIP "example.com") -}}
  {{ $ip.Prefix 12 }}'
93.176.0.0/12

net.ParsePrefix(unreleased)

Unreleased: This function is in development, and not yet available in released builds of gomplate.

Parse the given string as an IP address prefix (CIDR) representing an IP network (a netip.Prefix).

The string can be in the form "192.168.1.0/24" or "2001::db8::/32", the CIDR notations defined in RFC 4632 and RFC 4291.

Any of netip.Prefix’s methods may be called on the resulting value. See the docs for details.

Usage

net.ParsePrefix prefix
prefix | net.ParsePrefix

Arguments

name description
prefix (required) The IP address prefix to parse. It must represent either an IPv4 or IPv6 prefix, containing a /.

Examples

$ gomplate -i '{{ (net.ParsePrefix "192.168.0.0/24").Range }}'
192.168.0.0-192.168.0.255
$ gomplate -i '{{ $ip := net.ParseAddr (net.LookupIP "example.com") -}}
  {{ $net := net.ParsePrefix "93.184.0.0/16" -}}
  {{ $net.Contains $ip }}'
true

net.ParseIPPrefix (deprecated)

Deprecation Notice: Use net.ParsePrefix instead.

Parse the given string as an IP address prefix (CIDR) representing an IP network (a netaddr.IPPrefix from the inet.af/netaddr package).

The string can be in the form "192.168.1.0/24" or "2001::db8::/32", the CIDR notations defined in RFC 4632 and RFC 4291.

Any of netaddr.IPPrefix’s methods may be called on the resulting value. See the docs for details.

Added in gomplate v3.10.0

Usage

net.ParseIPPrefix ipprefix
ipprefix | net.ParseIPPrefix

Arguments

name description
ipprefix (required) The IP address prefix to parse. It must represent either an IPv4 or IPv6 prefix, containing a /.

Examples

$ gomplate -i '{{ (net.ParseIPPrefix "192.168.0.0/24").Range }}'
192.168.0.0-192.168.0.255
$ gomplate -i '{{ $ip := net.ParseIP (net.LookupIP "example.com") -}}
  {{ $net := net.ParseIPPrefix "93.184.0.0/16" -}}
  {{ $net.Contains $ip }}'
true
$ gomplate -i '{{ $net := net.ParseIPPrefix "93.184.0.0/12" -}}
  {{ $net.Range }}'
93.176.0.0-93.191.255.255

net.ParseRange(unreleased) (experimental)

Unreleased: This function is in development, and not yet available in released builds of gomplate. Experimental: This function is experimental and may be enabled with the --experimental flag.

Parse the given string as an inclusive range of IP addresses from the same address family (a netipx.IPRange from the go4.org/netipx module).

The string must contain a hyphen (-).

Any of netipx.IPRange’s methods may be called on the resulting value. See the docs for details.

Note that this function is experimental for now, because it uses a third-party module which may be brought into the standard library in the future, which may require breaking changes to this function.

Usage

net.ParseRange iprange
iprange | net.ParseRange

Arguments

name description
iprange (required) The IP address range to parse. It must represent either an IPv4 or IPv6 range, containing a -.

Examples

$ gomplate -i '{{ (net.ParseRange "192.168.0.0-192.168.0.255").To }}'
192.168.0.255
$ gomplate -i '{{ $range := net.ParseRange "1.2.3.0-1.2.3.233" -}}
  {{ $range.Prefixes }}'
[1.2.3.0/25 1.2.3.128/26 1.2.3.192/27 1.2.3.224/29 1.2.3.232/31]

net.ParseIPRange (deprecated)

Deprecation Notice: Use net.ParseRange instead.

Parse the given string as an inclusive range of IP addresses from the same address family (a netaddr.IPRange from the inet.af/netaddr package).

The string must contain a hyphen (-).

Any of netaddr.IPRange’s methods may be called on the resulting value. See the docs for details.

Added in gomplate v3.10.0

Usage

net.ParseIPRange iprange
iprange | net.ParseIPRange

Arguments

name description
iprange (required) The IP address range to parse. It must represent either an IPv4 or IPv6 range, containing a -.

Examples

$ gomplate -i '{{ (net.ParseIPRange "192.168.0.0-192.168.0.255").To }}'
192.168.0.255
$ gomplate -i '{{ $range := net.ParseIPRange "1.2.3.0-1.2.3.233" -}}
  {{ $range.Prefixes }}'
[1.2.3.0/25 1.2.3.128/26 1.2.3.192/27]

net.CIDRHost (experimental)

Experimental: This function is experimental and may be enabled with the --experimental flag.

Calculates a full host IP address for a given host number within a given IP network address prefix.

The IP network can be in the form "192.168.1.0/24" or "2001::db8::/32", the CIDR notations defined in RFC 4632 and RFC 4291.

Any of netip.Addr’s methods may be called on the resulting value. See the docs for details.

Added in gomplate v3.11.0

Usage

net.CIDRHost hostnum prefix
prefix | net.CIDRHost hostnum

Arguments

name description
hostnum (required) Is a whole number that can be represented as a binary integer with no more than the number of digits remaining in the address after the given prefix.
prefix (required) Must be given in CIDR notation. It must represent either an IPv4 or IPv6 prefix, containing a /. String or net.IPNet object returned from net.ParseIPPrefix can by used.

Examples

$ gomplate -i '{{ "10.12.127.0/20" | net.CIDRHost 268 }}'
10.12.113.12

net.CIDRNetmask (experimental)

Experimental: This function is experimental and may be enabled with the --experimental flag.

The result is a subnet address formatted in the conventional dotted-decimal IPv4 address syntax or hexadecimal IPv6 address syntax, as expected by some software.

Any of netip.Addr’s methods may be called on the resulting value. See the docs for details.

Added in gomplate v3.11.0

Usage

net.CIDRNetmask prefix
prefix | net.CIDRNetmask

Arguments

name description
prefix (required) Must be given in CIDR notation. It must represent either an IPv4 or IPv6 prefix, containing a /. String or net.IPNet object returned from net.ParseIPPrefix can by used.

Examples

$ gomplate -i '{{ net.CIDRNetmask "10.12.127.0/20" }}'
255.255.240.0
$ gomplate -i '{{ net.CIDRNetmask "fd00:fd12:3456:7890:00a2::/72" }}'
ffff:ffff:ffff:ffff:ff00::

net.CIDRSubnets (experimental)

Experimental: This function is experimental and may be enabled with the --experimental flag.

Calculates a subnet address within given IP network address prefix.

Any of netip.Prefix’s methods may be called on the resulting values. See the docs for details.

Added in gomplate v3.11.0

Usage

net.CIDRSubnets newbits prefix
prefix | net.CIDRSubnets newbits

Arguments

name description
newbits (required) Is the number of additional bits with which to extend the prefix. For example, if given a prefix ending in /16 and a newbits value of 4, the resulting subnet address will have length /20.
prefix (required) Must be given in CIDR notation. It must represent either an IPv4 or IPv6 prefix, containing a /. String or net.IPNet object returned from net.ParseIPPrefix can by used.

Examples

$ gomplate -i '{{ index ("10.0.0.0/16" | net.CIDRSubnets 2) 1 }}'
10.0.64.0/18
$ gomplate -i '{{ net.CIDRSubnets 2 "10.0.0.0/16" -}}'
[10.0.0.0/18 10.0.64.0/18 10.0.128.0/18 10.0.192.0/18]

net.CIDRSubnetSizes (experimental)

Experimental: This function is experimental and may be enabled with the --experimental flag.

Calculates a sequence of consecutive IP address ranges within a particular CIDR prefix.

Any of netip.Prefix’s methods may be called on the resulting values. See the docs for details.

Added in gomplate v3.11.0

Usage

net.CIDRSubnetSizes newbits... prefix
prefix | net.CIDRSubnetSizes newbits...

Arguments

name description
newbits... (required) Numbers of additional network prefix bits for returned address range.
prefix (required) Must be given in CIDR notation. It must represent either an IPv4 or IPv6 prefix, containing a /. String or net.IPNet object returned from net.ParseIPPrefix can by used.

Examples

$ gomplate -i '{{ net.CIDRSubnetSizes 4 4 8 4 "10.1.0.0/16" -}}'
[10.1.0.0/20 10.1.16.0/20 10.1.32.0/24 10.1.48.0/20]