Skip to content

Commit 050345f

Browse files
authored
Merge pull request #618 from replicatedhq/divolgin/sc-51321/kots-does-not-automatically-re-write-private
Adding some utility interfaces for collectors
2 parents c1c772e + 8e7ea02 commit 050345f

File tree

5 files changed

+261
-0
lines changed

5 files changed

+261
-0
lines changed
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
package v1beta2
2+
3+
import (
4+
corev1 "k8s.io/api/core/v1"
5+
)
6+
7+
func (c *Run) GetImage() string {
8+
return c.Image
9+
}
10+
11+
func (c *Run) SetImage(image string) {
12+
c.Image = image
13+
}
14+
15+
func (c *Run) GetImagePullSecret() *ImagePullSecrets {
16+
return c.ImagePullSecret
17+
}
18+
19+
func (c *Run) SetImagePullSecret(secrets *ImagePullSecrets) {
20+
c.ImagePullSecret = secrets
21+
}
22+
23+
func (c *Run) GetNamespace() string {
24+
return c.Namespace
25+
}
26+
27+
func (c *CopyFromHost) GetImage() string {
28+
return c.Image
29+
}
30+
31+
func (c *CopyFromHost) SetImage(image string) {
32+
c.Image = image
33+
}
34+
35+
func (c *CopyFromHost) GetImagePullSecret() *ImagePullSecrets {
36+
return c.ImagePullSecret
37+
}
38+
39+
func (c *CopyFromHost) SetImagePullSecret(secrets *ImagePullSecrets) {
40+
c.ImagePullSecret = secrets
41+
}
42+
43+
func (c *CopyFromHost) GetNamespace() string {
44+
return c.Namespace
45+
}
46+
47+
func (c *Sysctl) GetImage() string {
48+
return c.Image
49+
}
50+
51+
func (c *Sysctl) SetImage(image string) {
52+
c.Image = image
53+
}
54+
55+
func (c *Sysctl) GetImagePullSecret() *ImagePullSecrets {
56+
return c.ImagePullSecret
57+
}
58+
59+
func (c *Sysctl) SetImagePullSecret(secrets *ImagePullSecrets) {
60+
c.ImagePullSecret = secrets
61+
}
62+
63+
func (c *Sysctl) GetNamespace() string {
64+
return c.Namespace
65+
}
66+
67+
func (c *Collectd) GetImage() string {
68+
return c.Image
69+
}
70+
71+
func (c *Collectd) SetImage(image string) {
72+
c.Image = image
73+
}
74+
75+
func (c *Collectd) GetImagePullSecret() *ImagePullSecrets {
76+
return c.ImagePullSecret
77+
}
78+
79+
func (c *Collectd) SetImagePullSecret(secrets *ImagePullSecrets) {
80+
c.ImagePullSecret = secrets
81+
}
82+
83+
func (c *Collectd) GetNamespace() string {
84+
return c.Namespace
85+
}
86+
87+
func (c *RunPod) GetPodSpec() corev1.PodSpec {
88+
return c.PodSpec
89+
}
90+
91+
func (c *RunPod) SetPodSpec(podSpec corev1.PodSpec) {
92+
c.PodSpec = podSpec
93+
}
94+
95+
func (c *RunPod) GetImagePullSecret() *ImagePullSecrets {
96+
return c.ImagePullSecret
97+
}
98+
99+
func (c *RunPod) SetImagePullSecret(secrets *ImagePullSecrets) {
100+
c.ImagePullSecret = secrets
101+
}
102+
103+
func (c *RunPod) GetNamespace() string {
104+
return c.Namespace
105+
}

pkg/apis/troubleshoot/v1beta2/collector_shared.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package v1beta2
22

33
import (
44
"fmt"
5+
"reflect"
56
"strings"
67

78
"github.com/replicatedhq/troubleshoot/pkg/multitype"
@@ -538,3 +539,20 @@ func pickNamespaceOrDefault(collectorNS string, overrideNS string) string {
538539
}
539540
return "default"
540541
}
542+
543+
func GetCollector(collector *Collect) interface{} {
544+
if collector == nil {
545+
return nil
546+
}
547+
548+
reflected := reflect.ValueOf(collector).Elem()
549+
for i := 0; i < reflected.NumField(); i++ {
550+
if reflected.Field(i).IsNil() {
551+
continue
552+
}
553+
554+
return reflect.Indirect(reflected.Field(i)).Addr().Interface()
555+
}
556+
557+
return nil
558+
}

pkg/apis/troubleshoot/v1beta2/zz_generated.deepcopy.go

Lines changed: 48 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/collect/interfaces.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package collect
2+
3+
import (
4+
"github.com/replicatedhq/troubleshoot/pkg/apis/troubleshoot/v1beta2"
5+
corev1 "k8s.io/api/core/v1"
6+
)
7+
8+
type ImageRunner interface {
9+
GetImage() string
10+
SetImage(string)
11+
12+
GetImagePullSecret() *v1beta2.ImagePullSecrets
13+
SetImagePullSecret(*v1beta2.ImagePullSecrets)
14+
15+
GetNamespace() string
16+
}
17+
18+
var _ ImageRunner = &v1beta2.Run{}
19+
var _ ImageRunner = &v1beta2.CopyFromHost{}
20+
var _ ImageRunner = &v1beta2.Sysctl{}
21+
var _ ImageRunner = &v1beta2.Collectd{}
22+
23+
type PodSpecRunner interface {
24+
GetPodSpec() corev1.PodSpec
25+
SetPodSpec(corev1.PodSpec)
26+
27+
GetImagePullSecret() *v1beta2.ImagePullSecrets
28+
SetImagePullSecret(*v1beta2.ImagePullSecrets)
29+
30+
GetNamespace() string
31+
}
32+
33+
var _ PodSpecRunner = &v1beta2.RunPod{}

pkg/collect/interfaces_test.go

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package collect
2+
3+
import (
4+
"testing"
5+
6+
"github.com/replicatedhq/troubleshoot/pkg/apis/troubleshoot/v1beta2"
7+
"github.com/stretchr/testify/require"
8+
)
9+
10+
func Test_interfaces(t *testing.T) {
11+
runCollector := &v1beta2.Run{}
12+
clusterInfoCollector := &v1beta2.ClusterInfo{}
13+
14+
tests := []struct {
15+
name string
16+
collect *v1beta2.Collect
17+
want interface{}
18+
wantRunner bool
19+
}{
20+
{
21+
name: "image runner collector",
22+
collect: &v1beta2.Collect{
23+
Run: runCollector,
24+
},
25+
want: runCollector,
26+
wantRunner: true,
27+
},
28+
{
29+
name: "not image runner collector",
30+
collect: &v1beta2.Collect{
31+
ClusterInfo: clusterInfoCollector,
32+
},
33+
want: clusterInfoCollector,
34+
wantRunner: false,
35+
},
36+
{
37+
name: "no collector",
38+
collect: &v1beta2.Collect{},
39+
want: nil,
40+
wantRunner: false,
41+
},
42+
}
43+
for _, tt := range tests {
44+
t.Run(tt.name, func(t *testing.T) {
45+
req := require.New(t)
46+
47+
got := v1beta2.GetCollector(tt.collect)
48+
req.EqualValues(tt.want, got)
49+
50+
runner, ok := got.(ImageRunner)
51+
req.EqualValues(tt.wantRunner, ok)
52+
if tt.wantRunner {
53+
req.EqualValues(tt.want, runner)
54+
}
55+
})
56+
}
57+
}

0 commit comments

Comments
 (0)