Skip to content

Commit

Permalink
Adding sockaddr namespace
Browse files Browse the repository at this point in the history
Signed-off-by: Dave Henderson <dhenderson@gmail.com>
  • Loading branch information
hairyhenderson committed Mar 4, 2018
1 parent ca5797f commit 8cedf44
Show file tree
Hide file tree
Showing 4 changed files with 192 additions and 0 deletions.
47 changes: 47 additions & 0 deletions docs/content/functions/sockaddr.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
---
title: sockaddr functions
menu:
main:
parent: functions
---

This namespace wraps the [`github.com/hashicorp/go-sockaddr`](github.com/hashicorp/go-sockaddr)
package, which makes it easy to discover information about a system's network
interfaces.

These functions are partly documented here for convenience, but the canonical
documentation is at https://godoc.org/github.com/hashicorp/go-sockaddr.

## `sockaddr.GetAllInterfaces`
## `sockaddr.GetDefaultInterfaces`
## `sockaddr.GetPrivateInterfaces`
## `sockaddr.GetPublicInterfaces`


## `sockaddr.Sort`

## `sockaddr.Exclude`

## `sockaddr.Include`

## `sockaddr.Attr`

## `sockaddr.Join`

## `sockaddr.Limit`

## `sockaddr.Offset`

## `sockaddr.Unique`

## `sockaddr.Math`


## `sockaddr.GetPrivateIP`
## `sockaddr.GetPrivateIPs`

## `sockaddr.GetPublicIP`
## `sockaddr.GetPublicIPs`

## `sockaddr.GetInterfaceIP`
## `sockaddr.GetInterfaceIPs`
1 change: 1 addition & 0 deletions funcs.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,6 @@ func initFuncs(d *data.Data) template.FuncMap {
funcs.AddMathFuncs(f)
funcs.AddCryptoFuncs(f)
funcs.AddFileFuncs(f)
funcs.AddSockaddrFuncs(f)
return f
}
122 changes: 122 additions & 0 deletions funcs/sockaddr.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
package funcs

import (
"sync"

"github.com/hashicorp/go-sockaddr"
"github.com/hashicorp/go-sockaddr/template"
)

var (
sockaddrNS *SockaddrFuncs
sockaddrNSInit sync.Once
)

// SockaddrNS - the sockaddr namespace
func SockaddrNS() *SockaddrFuncs {
sockaddrNSInit.Do(func() { sockaddrNS = &SockaddrFuncs{} })
return sockaddrNS
}

// AddSockaddrFuncs -
func AddSockaddrFuncs(f map[string]interface{}) {
f["sockaddr"] = SockaddrNS
}

// SockaddrFuncs -
type SockaddrFuncs struct{}

// GetAllInterfaces -
func (f *SockaddrFuncs) GetAllInterfaces() (sockaddr.IfAddrs, error) {
return sockaddr.GetAllInterfaces()
}

// GetDefaultInterfaces -
func (f *SockaddrFuncs) GetDefaultInterfaces() (sockaddr.IfAddrs, error) {
return sockaddr.GetDefaultInterfaces()
}

// GetPrivateInterfaces -
func (f *SockaddrFuncs) GetPrivateInterfaces() (sockaddr.IfAddrs, error) {
return sockaddr.GetPrivateInterfaces()
}

// GetPublicInterfaces -
func (f *SockaddrFuncs) GetPublicInterfaces() (sockaddr.IfAddrs, error) {
return sockaddr.GetPublicInterfaces()
}

// Sort -
func (f *SockaddrFuncs) Sort(selectorParam string, inputIfAddrs sockaddr.IfAddrs) (sockaddr.IfAddrs, error) {
return sockaddr.SortIfBy(selectorParam, inputIfAddrs)
}

// Exclude -
func (f *SockaddrFuncs) Exclude(selectorName, selectorParam string, inputIfAddrs sockaddr.IfAddrs) (sockaddr.IfAddrs, error) {
return sockaddr.ExcludeIfs(selectorName, selectorParam, inputIfAddrs)
}

// Include -
func (f *SockaddrFuncs) Include(selectorName, selectorParam string, inputIfAddrs sockaddr.IfAddrs) (sockaddr.IfAddrs, error) {
return sockaddr.IncludeIfs(selectorName, selectorParam, inputIfAddrs)
}

// Attr -
func (f *SockaddrFuncs) Attr(selectorName string, ifAddrsRaw interface{}) (string, error) {
return template.Attr(selectorName, ifAddrsRaw)
}

// Join -
func (f *SockaddrFuncs) Join(selectorName, joinString string, inputIfAddrs sockaddr.IfAddrs) (string, error) {
return sockaddr.JoinIfAddrs(selectorName, joinString, inputIfAddrs)
}

// Limit -
func (f *SockaddrFuncs) Limit(lim uint, in sockaddr.IfAddrs) (sockaddr.IfAddrs, error) {
return sockaddr.LimitIfAddrs(lim, in)
}

// Offset -
func (f *SockaddrFuncs) Offset(off int, in sockaddr.IfAddrs) (sockaddr.IfAddrs, error) {
return sockaddr.OffsetIfAddrs(off, in)
}

// Unique -
func (f *SockaddrFuncs) Unique(selectorName string, inputIfAddrs sockaddr.IfAddrs) (sockaddr.IfAddrs, error) {
return sockaddr.UniqueIfAddrsBy(selectorName, inputIfAddrs)
}

// Math -
func (f *SockaddrFuncs) Math(operation, value string, inputIfAddrs sockaddr.IfAddrs) (sockaddr.IfAddrs, error) {
return sockaddr.IfAddrsMath(operation, value, inputIfAddrs)
}

// GetPrivateIP -
func (f *SockaddrFuncs) GetPrivateIP() (string, error) {
return sockaddr.GetPrivateIP()
}

// GetPrivateIPs -
func (f *SockaddrFuncs) GetPrivateIPs() (string, error) {
return sockaddr.GetPrivateIPs()
}

// GetPublicIP -
func (f *SockaddrFuncs) GetPublicIP() (string, error) {
return sockaddr.GetPublicIP()
}

// GetPublicIPs -
func (f *SockaddrFuncs) GetPublicIPs() (string, error) {
return sockaddr.GetPublicIPs()
}

// GetInterfaceIP -
func (f *SockaddrFuncs) GetInterfaceIP(namedIfRE string) (string, error) {
return sockaddr.GetInterfaceIP(namedIfRE)
}

// GetInterfaceIPs -
func (f *SockaddrFuncs) GetInterfaceIPs(namedIfRE string) (string, error) {
return sockaddr.GetInterfaceIPs(namedIfRE)
}
22 changes: 22 additions & 0 deletions test/integration/sockaddr_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
//+build integration
//+build !windows

package integration

import (
. "gopkg.in/check.v1"

"github.com/gotestyourself/gotestyourself/icmd"
)

type SockaddrSuite struct{}

var _ = Suite(&SockaddrSuite{})

func (s *SockaddrSuite) TestSockaddr(c *C) {
result := icmd.RunCommand(GomplateBin, "-i",
`{{ range (sockaddr.GetAllInterfaces | sockaddr.Exclude "type" "ipv6") -}}
{{ . | sockaddr.Attr "address" }}
{{end}}`)
result.Assert(c, icmd.Expected{ExitCode: 0, Out: "127.0.0.1"})
}

0 comments on commit 8cedf44

Please sign in to comment.