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.

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.

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.".

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

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

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.

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.ParseIP

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.

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.ParseIPPrefix

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.

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.ParseIPRange

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.

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.

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.

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.

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.

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]