forked from goss-org/goss
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdns.go
67 lines (56 loc) · 1.74 KB
/
dns.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package resource
import (
"strings"
"github.com/aelsabbahy/goss/system"
"github.com/aelsabbahy/goss/util"
)
type DNS struct {
Title string `json:"title,omitempty" yaml:"title,omitempty"`
Meta meta `json:"meta,omitempty" yaml:"meta,omitempty"`
Host string `json:"-" yaml:"-"`
Resolveable matcher `json:"resolveable" yaml:"resolveable"`
Addrs matcher `json:"addrs,omitempty" yaml:"addrs,omitempty"`
Timeout int `json:"timeout" yaml:"timeout"`
Server string `json:"server,omitempty" yaml:"server,omitempty"`
}
func (d *DNS) ID() string { return d.Host }
func (d *DNS) SetID(id string) { d.Host = id }
func (d *DNS) GetTitle() string { return d.Title }
func (d *DNS) GetMeta() meta { return d.Meta }
func (d *DNS) Validate(sys *system.System) []TestResult {
skip := false
if d.Timeout == 0 {
d.Timeout = 500
}
sysDNS := sys.NewDNS(d.Host, sys, util.Config{Timeout: d.Timeout, Server: d.Server})
var results []TestResult
results = append(results, ValidateValue(d, "resolveable", d.Resolveable, sysDNS.Resolveable, skip))
if shouldSkip(results) {
skip = true
}
if d.Addrs != nil {
results = append(results, ValidateValue(d, "addrs", d.Addrs, sysDNS.Addrs, skip))
}
return results
}
func NewDNS(sysDNS system.DNS, config util.Config) (*DNS, error) {
var host string
if sysDNS.Qtype() != "" {
host = strings.Join([]string{sysDNS.Qtype(), sysDNS.Host()}, ":")
} else {
host = sysDNS.Host()
}
resolveable, err := sysDNS.Resolveable()
server := sysDNS.Server()
d := &DNS{
Host: host,
Resolveable: resolveable,
Timeout: config.Timeout,
Server: server,
}
if !contains(config.IgnoreList, "addrs") {
addrs, _ := sysDNS.Addrs()
d.Addrs = addrs
}
return d, err
}