@@ -16,14 +16,56 @@ import (
1616)
1717
1818func Run (c * Collector , runCollector * troubleshootv1beta2.Run ) (CollectorResult , error ) {
19+ podLabels := make (map [string ]string )
20+ podLabels ["troubleshoot-role" ] = "run-collector"
21+
22+ pullPolicy := corev1 .PullIfNotPresent
23+ if runCollector .ImagePullPolicy != "" {
24+ pullPolicy = corev1 .PullPolicy (runCollector .ImagePullPolicy )
25+ }
26+
27+ namespace := "default"
28+ if runCollector .Namespace != "" {
29+ namespace = runCollector .Namespace
30+ }
31+
32+ serviceAccountName := "default"
33+ if runCollector .ServiceAccountName != "" {
34+ serviceAccountName = runCollector .ServiceAccountName
35+ }
36+
37+ runPodCollector := & troubleshootv1beta2.RunPod {
38+ Name : runCollector .CollectorName ,
39+ Namespace : namespace ,
40+ Timeout : runCollector .Timeout ,
41+ ImagePullSecret : runCollector .ImagePullSecret ,
42+ PodSpec : corev1.PodSpec {
43+ RestartPolicy : corev1 .RestartPolicyNever ,
44+ ServiceAccountName : serviceAccountName ,
45+ Containers : []corev1.Container {
46+ {
47+ Image : runCollector .Image ,
48+ ImagePullPolicy : pullPolicy ,
49+ Name : "collector" ,
50+ Command : runCollector .Command ,
51+ Args : runCollector .Args ,
52+ },
53+ },
54+ },
55+ }
56+
57+ return RunPod (c , runPodCollector )
58+ }
59+
60+ func RunPod (c * Collector , runCollector * troubleshootv1beta2.RunPod ) (CollectorResult , error ) {
1961 ctx := context .Background ()
2062
2163 client , err := kubernetes .NewForConfig (c .ClientConfig )
2264 if err != nil {
2365 return nil , errors .Wrap (err , "failed to create client from config" )
2466 }
2567
26- pod , err := runPod (ctx , client , runCollector , c . Namespace )
68+ pod , err := runPodWithSpec (ctx , client , runCollector )
2769 if err != nil {
2870 return nil , errors .Wrap (err , "failed to run pod" )
2971 }
@@ -76,7 +118,52 @@ func Run(c *Collector, runCollector *troubleshootv1beta2.Run) (CollectorResult,
76118 }
77119}
78120
79- func runWithoutTimeout (ctx context.Context , c * Collector , pod * corev1.Pod , runCollector * troubleshootv1beta2.Run ) (CollectorResult , error ) {
121+ func runPodWithSpec (ctx context.Context , client * kubernetes.Clientset , runCollector * troubleshootv1beta2.RunPod ) (* corev1.Pod , error ) {
122+ podLabels := make (map [string ]string )
123+ podLabels ["troubleshoot-role" ] = "run-collector"
124+
125+ namespace := "default"
126+ if runCollector .Namespace != "" {
127+ namespace = runCollector .Namespace
128+ }
129+
130+ podName := "run-pod"
131+ if runCollector .CollectorName != "" {
132+ podName = runCollector .CollectorName
133+ } else if runCollector .Name != "" {
134+ podName = runCollector .Name
135+ }
136+
137+ pod := corev1.Pod {
138+ ObjectMeta : metav1.ObjectMeta {
139+ Name : podName ,
140+ Namespace : namespace ,
141+ Labels : podLabels ,
142+ },
143+ TypeMeta : metav1.TypeMeta {
144+ APIVersion : "v1" ,
145+ Kind : "Pod" ,
146+ },
147+ Spec : runCollector .PodSpec ,
148+ }
149+
150+ if runCollector .ImagePullSecret != nil && runCollector .ImagePullSecret .Data != nil {
151+ secretName , err := createSecret (ctx , client , pod .Namespace , runCollector .ImagePullSecret )
152+ if err != nil {
153+ return nil , errors .Wrap (err , "failed to create secret" )
154+ }
155+ pod .Spec .ImagePullSecrets = append (pod .Spec .ImagePullSecrets , corev1.LocalObjectReference {Name : secretName })
156+ }
157+
158+ created , err := client .CoreV1 ().Pods (namespace ).Create (ctx , & pod , metav1.CreateOptions {})
159+ if err != nil {
160+ return nil , errors .Wrap (err , "failed to create pod" )
161+ }
162+
163+ return created , nil
164+ }
165+
166+ func runWithoutTimeout (ctx context.Context , c * Collector , pod * corev1.Pod , runCollector * troubleshootv1beta2.RunPod ) (CollectorResult , error ) {
80167 client , err := kubernetes .NewForConfig (c .ClientConfig )
81168 if err != nil {
82169 return nil , errors .Wrap (err , "failed create client from config" )
@@ -104,10 +191,15 @@ func runWithoutTimeout(ctx context.Context, c *Collector, pod *corev1.Pod, runCo
104191
105192 output := NewResult ()
106193
194+ collectorName := runCollector .Name
195+ if collectorName == "" {
196+ collectorName = runCollector .CollectorName
197+ }
198+
107199 limits := troubleshootv1beta2.LogLimits {
108200 MaxLines : 10000 ,
109201 }
110- podLogs , err := savePodLogs (ctx , c .BundlePath , client , * pod , runCollector . Name , "" , & limits , true )
202+ podLogs , err := savePodLogs (ctx , c .BundlePath , client , * pod , collectorName , "" , & limits , true )
111203 if err != nil {
112204 return nil , errors .Wrap (err , "failed to get pod logs" )
113205 }
@@ -119,84 +211,6 @@ func runWithoutTimeout(ctx context.Context, c *Collector, pod *corev1.Pod, runCo
119211 return output , nil
120212}
121213
122- func runPod (ctx context.Context , client * kubernetes.Clientset , runCollector * troubleshootv1beta2.Run , namespace string ) (* corev1.Pod , error ) {
123- podLabels := make (map [string ]string )
124- podLabels ["troubleshoot-role" ] = "run-collector"
125-
126- pullPolicy := corev1 .PullIfNotPresent
127- if runCollector .ImagePullPolicy != "" {
128- pullPolicy = corev1 .PullPolicy (runCollector .ImagePullPolicy )
129- }
130-
131- if namespace == "" {
132- namespace = runCollector .Namespace
133- }
134- if namespace == "" {
135- namespace = "default"
136- }
137-
138- serviceAccountName := "default"
139- if runCollector .ServiceAccountName != "" {
140- serviceAccountName = runCollector .ServiceAccountName
141- }
142-
143- pod := corev1.Pod {}
144- if runCollector .PodSpec .Containers != nil {
145- pod = corev1.Pod {
146- ObjectMeta : metav1.ObjectMeta {
147- Name : runCollector .CollectorName ,
148- Namespace : namespace ,
149- Labels : podLabels ,
150- },
151- TypeMeta : metav1.TypeMeta {
152- APIVersion : "v1" ,
153- Kind : "Pod" ,
154- },
155- Spec : runCollector .PodSpec ,
156- }
157- } else {
158- pod = corev1.Pod {
159- ObjectMeta : metav1.ObjectMeta {
160- Name : runCollector .CollectorName ,
161- Namespace : namespace ,
162- Labels : podLabels ,
163- },
164- TypeMeta : metav1.TypeMeta {
165- APIVersion : "v1" ,
166- Kind : "Pod" ,
167- },
168- Spec : corev1.PodSpec {
169- RestartPolicy : corev1 .RestartPolicyNever ,
170- ServiceAccountName : serviceAccountName ,
171- Containers : []corev1.Container {
172- {
173- Image : runCollector .Image ,
174- ImagePullPolicy : pullPolicy ,
175- Name : "collector" ,
176- Command : runCollector .Command ,
177- Args : runCollector .Args ,
178- },
179- },
180- },
181- }
182-
183- if runCollector .ImagePullSecret != nil && runCollector .ImagePullSecret .Data != nil {
184- secretName , err := createSecret (ctx , client , pod .Namespace , runCollector .ImagePullSecret )
185- if err != nil {
186- return nil , errors .Wrap (err , "failed to create secret" )
187- }
188- pod .Spec .ImagePullSecrets = append (pod .Spec .ImagePullSecrets , corev1.LocalObjectReference {Name : secretName })
189- }
190- }
191-
192- created , err := client .CoreV1 ().Pods (namespace ).Create (ctx , & pod , metav1.CreateOptions {})
193- if err != nil {
194- return nil , errors .Wrap (err , "failed to create pod" )
195- }
196-
197- return created , nil
198- }
199-
200214func createSecret (ctx context.Context , client kubernetes.Interface , namespace string , imagePullSecret * troubleshootv1beta2.ImagePullSecrets ) (string , error ) {
201215 if imagePullSecret .Data == nil {
202216 return "" , nil
0 commit comments