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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
package resource
import (
"fmt"
"os"
"path/filepath"
"strconv"
"sync"
"github.com/goss-org/goss/system"
)
type Resource interface {
Validate(sys *system.System) []TestResult
SetID(string)
SetSkip()
TypeKey() string
TypeName() string
}
var (
resourcesMu sync.Mutex
resources = map[string]Resource{}
)
func registerResource(key string, resource Resource) {
resourcesMu.Lock()
resources[key] = resource
resourcesMu.Unlock()
}
func Resources() map[string]Resource {
return resources
}
type ResourceRead interface {
ID() string
GetTitle() string
GetMeta() meta
}
type matcher any
type meta map[string]any
func contains(a []string, s string) bool {
for _, e := range a {
if m, _ := filepath.Match(e, s); m {
return true
}
}
return false
}
func deprecateAtoI(depr any, desc string) any {
s, ok := depr.(string)
if !ok {
return depr
}
fmt.Fprintf(os.Stderr, "DEPRECATION WARNING: %s should be an integer not a string\n", desc)
i, err := strconv.Atoi(s)
if err != nil {
panic(err)
}
return float64(i)
}
func shouldSkip(results []TestResult) bool {
if len(results) < 1 {
return false
}
if results[0].Err != nil || results[0].Result != SUCCESS || results[0].MatcherResult.Actual == false {
return true
}
return false
}
func isSet(i interface{}) bool {
switch v := i.(type) {
case []interface{}:
return len(v) > 0
default:
return i != nil
}
}
|