diff options
-rw-r--r-- | templater/dns.go | 34 | ||||
-rw-r--r-- | templater/templater.go | 1 |
2 files changed, 35 insertions, 0 deletions
diff --git a/templater/dns.go b/templater/dns.go new file mode 100644 index 000000000000..087399202b0c --- /dev/null +++ b/templater/dns.go @@ -0,0 +1,34 @@ +// This file contains the implementation of a template function for retrieving IP addresses from DNS +package templater + +import ( + "fmt" + "github.com/polydawn/meep" + "net" + "os" +) + +type DNSError struct { + meep.TraitAutodescribing + meep.TraitCausable + Output string +} + +func GetIPsFromDNS(host string) ([]interface{}, error) { + fmt.Fprintf(os.Stderr, "Attempting to look up IP for %s in DNS\n", host) + ips, err := net.LookupIP(host) + + if err != nil { + return nil, meep.New( + &DNSError{Output: "IP address lookup failed"}, + meep.Cause(err), + ) + } + + var result []interface{} = make([]interface{}, len(ips)) + for i, ip := range ips { + result[i] = ip + } + + return result, nil +} diff --git a/templater/templater.go b/templater/templater.go index f6878d3dfa03..c9260abc2111 100644 --- a/templater/templater.go +++ b/templater/templater.go @@ -180,6 +180,7 @@ func templateFuncs() template.FuncMap { return string(b) } m["passLookup"] = GetFromPass + m["lookupIPAddr"] = GetIPsFromDNS return m } |