-
Notifications
You must be signed in to change notification settings - Fork 34
/
logs.go
67 lines (64 loc) · 1.75 KB
/
logs.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 kubectl
import (
"errors"
"fmt"
"github.com/jmespath-community/go-jmespath/pkg/binding"
"github.com/kyverno/chainsaw/pkg/apis/v1alpha1"
apibindings "github.com/kyverno/chainsaw/pkg/runner/bindings"
)
func Logs(bindings binding.Bindings, collector *v1alpha1.PodLogs) (*v1alpha1.Command, error) {
if collector == nil {
return nil, errors.New("collector is null")
}
name, err := apibindings.String(collector.Name, bindings)
if err != nil {
return nil, err
}
namespace, err := apibindings.String(collector.Namespace, bindings)
if err != nil {
return nil, err
}
selector, err := apibindings.String(collector.Selector, bindings)
if err != nil {
return nil, err
}
container, err := apibindings.String(collector.Container, bindings)
if err != nil {
return nil, err
}
cluster, err := apibindings.String(collector.Cluster, bindings)
if err != nil {
return nil, err
}
if name == "" && selector == "" {
return nil, errors.New("a name or selector must be specified")
}
if name != "" && selector != "" {
return nil, errors.New("name cannot be provided when a selector is specified")
}
cmd := v1alpha1.Command{
Cluster: cluster,
Clusters: collector.Clusters,
Timeout: collector.Timeout,
Entrypoint: "kubectl",
Args: []string{"logs", "--prefix"},
}
if name != "" {
cmd.Args = append(cmd.Args, name)
} else if selector != "" {
cmd.Args = append(cmd.Args, "-l", selector)
}
if namespace == "" {
namespace = "$NAMESPACE"
}
cmd.Args = append(cmd.Args, "-n", namespace)
if container == "" {
cmd.Args = append(cmd.Args, "--all-containers")
} else {
cmd.Args = append(cmd.Args, "-c", container)
}
if collector.Tail != nil {
cmd.Args = append(cmd.Args, "--tail", fmt.Sprint(*collector.Tail))
}
return &cmd, nil
}