@@ -31,9 +31,11 @@ import (
31
31
"github.com/lithammer/dedent"
32
32
"github.com/spf13/cobra"
33
33
kubeadmapiv1beta2 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2"
34
+ outputapischeme "k8s.io/kubernetes/cmd/kubeadm/app/apis/output/scheme"
34
35
"k8s.io/kubernetes/cmd/kubeadm/app/constants"
35
36
kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util"
36
37
configutil "k8s.io/kubernetes/cmd/kubeadm/app/util/config"
38
+ "k8s.io/kubernetes/cmd/kubeadm/app/util/output"
37
39
utilruntime "k8s.io/kubernetes/cmd/kubeadm/app/util/runtime"
38
40
"k8s.io/utils/exec"
39
41
fakeexec "k8s.io/utils/exec/testing"
@@ -94,6 +96,12 @@ func TestImagesListRunWithCustomConfigPath(t *testing.T) {
94
96
},
95
97
}
96
98
99
+ outputFlags := output .NewOutputFlags (& imageTextPrintFlags {}).WithTypeSetter (outputapischeme .Scheme ).WithDefaultOutput (output .TextOutput )
100
+ printer , err := outputFlags .ToPrinter ()
101
+ if err != nil {
102
+ t .Fatalf ("can't create printer for the output format %s: %+v" , output .TextOutput , err )
103
+ }
104
+
97
105
for _ , tc := range testcases {
98
106
t .Run (tc .name , func (t * testing.T ) {
99
107
tmpDir , err := ioutil .TempDir ("" , "kubeadm-images-test" )
@@ -114,7 +122,7 @@ func TestImagesListRunWithCustomConfigPath(t *testing.T) {
114
122
t .Fatalf ("Failed getting the kubeadm images command: %v" , err )
115
123
}
116
124
var output bytes.Buffer
117
- if i .Run (& output ) != nil {
125
+ if err = i .Run (& output , printer ); err != nil {
118
126
t .Fatalf ("Error from running the images command: %v" , err )
119
127
}
120
128
actual := strings .Split (output .String (), "\n " )
@@ -175,6 +183,11 @@ func TestConfigImagesListRunWithoutPath(t *testing.T) {
175
183
},
176
184
}
177
185
186
+ outputFlags := output .NewOutputFlags (& imageTextPrintFlags {}).WithTypeSetter (outputapischeme .Scheme ).WithDefaultOutput (output .TextOutput )
187
+ printer , err := outputFlags .ToPrinter ()
188
+ if err != nil {
189
+ t .Fatalf ("can't create printer for the output format %s: %+v" , output .TextOutput , err )
190
+ }
178
191
for _ , tc := range testcases {
179
192
t .Run (tc .name , func (t * testing.T ) {
180
193
i , err := NewImagesList ("" , & tc .cfg )
@@ -183,7 +196,8 @@ func TestConfigImagesListRunWithoutPath(t *testing.T) {
183
196
}
184
197
185
198
var output bytes.Buffer
186
- if i .Run (& output ) != nil {
199
+
200
+ if err = i .Run (& output , printer ); err != nil {
187
201
t .Fatalf ("did not expect an error running the Images command: %v" , err )
188
202
}
189
203
@@ -195,6 +209,119 @@ func TestConfigImagesListRunWithoutPath(t *testing.T) {
195
209
}
196
210
}
197
211
212
+ func TestConfigImagesListOutput (t * testing.T ) {
213
+ testcases := []struct {
214
+ name string
215
+ cfg kubeadmapiv1beta2.ClusterConfiguration
216
+ outputFormat string
217
+ expectedOutput string
218
+ }{
219
+ {
220
+ name : "text output" ,
221
+ cfg : kubeadmapiv1beta2.ClusterConfiguration {
222
+ KubernetesVersion : dummyKubernetesVersion ,
223
+ },
224
+ outputFormat : "text" ,
225
+ expectedOutput : `k8s.gcr.io/kube-apiserver:v1.16.0
226
+ k8s.gcr.io/kube-controller-manager:v1.16.0
227
+ k8s.gcr.io/kube-scheduler:v1.16.0
228
+ k8s.gcr.io/kube-proxy:v1.16.0
229
+ k8s.gcr.io/pause:3.2
230
+ k8s.gcr.io/etcd:3.3.17-0
231
+ k8s.gcr.io/coredns:1.6.5
232
+ ` ,
233
+ },
234
+ {
235
+ name : "JSON output" ,
236
+ cfg : kubeadmapiv1beta2.ClusterConfiguration {
237
+ KubernetesVersion : dummyKubernetesVersion ,
238
+ },
239
+ outputFormat : "json" ,
240
+ expectedOutput : `{
241
+ "kind": "Images",
242
+ "apiVersion": "output.kubeadm.k8s.io/v1alpha1",
243
+ "images": [
244
+ "k8s.gcr.io/kube-apiserver:v1.16.0",
245
+ "k8s.gcr.io/kube-controller-manager:v1.16.0",
246
+ "k8s.gcr.io/kube-scheduler:v1.16.0",
247
+ "k8s.gcr.io/kube-proxy:v1.16.0",
248
+ "k8s.gcr.io/pause:3.2",
249
+ "k8s.gcr.io/etcd:3.3.17-0",
250
+ "k8s.gcr.io/coredns:1.6.5"
251
+ ]
252
+ }
253
+ ` ,
254
+ },
255
+ {
256
+ name : "YAML output" ,
257
+ cfg : kubeadmapiv1beta2.ClusterConfiguration {
258
+ KubernetesVersion : dummyKubernetesVersion ,
259
+ },
260
+ outputFormat : "yaml" ,
261
+ expectedOutput : `apiVersion: output.kubeadm.k8s.io/v1alpha1
262
+ images:
263
+ - k8s.gcr.io/kube-apiserver:v1.16.0
264
+ - k8s.gcr.io/kube-controller-manager:v1.16.0
265
+ - k8s.gcr.io/kube-scheduler:v1.16.0
266
+ - k8s.gcr.io/kube-proxy:v1.16.0
267
+ - k8s.gcr.io/pause:3.2
268
+ - k8s.gcr.io/etcd:3.3.17-0
269
+ - k8s.gcr.io/coredns:1.6.5
270
+ kind: Images
271
+ ` ,
272
+ },
273
+ {
274
+ name : "go-template output" ,
275
+ cfg : kubeadmapiv1beta2.ClusterConfiguration {
276
+ KubernetesVersion : dummyKubernetesVersion ,
277
+ },
278
+ outputFormat : `go-template={{range .images}}{{.}}{{"\n"}}{{end}}` ,
279
+ expectedOutput : `k8s.gcr.io/kube-apiserver:v1.16.0
280
+ k8s.gcr.io/kube-controller-manager:v1.16.0
281
+ k8s.gcr.io/kube-scheduler:v1.16.0
282
+ k8s.gcr.io/kube-proxy:v1.16.0
283
+ k8s.gcr.io/pause:3.2
284
+ k8s.gcr.io/etcd:3.3.17-0
285
+ k8s.gcr.io/coredns:1.6.5
286
+ ` ,
287
+ },
288
+ {
289
+ name : "JSONPATH output" ,
290
+ cfg : kubeadmapiv1beta2.ClusterConfiguration {
291
+ KubernetesVersion : dummyKubernetesVersion ,
292
+ },
293
+ outputFormat : `jsonpath={range.images[*]}{@} {end}` ,
294
+ expectedOutput : "k8s.gcr.io/kube-apiserver:v1.16.0 k8s.gcr.io/kube-controller-manager:v1.16.0 k8s.gcr.io/kube-scheduler:v1.16.0 " +
295
+ "k8s.gcr.io/kube-proxy:v1.16.0 k8s.gcr.io/pause:3.2 k8s.gcr.io/etcd:3.3.17-0 k8s.gcr.io/coredns:1.6.5 " ,
296
+ },
297
+ }
298
+
299
+ for _ , tc := range testcases {
300
+ outputFlags := output .NewOutputFlags (& imageTextPrintFlags {}).WithTypeSetter (outputapischeme .Scheme ).WithDefaultOutput (tc .outputFormat )
301
+ printer , err := outputFlags .ToPrinter ()
302
+ if err != nil {
303
+ t .Fatalf ("can't create printer for the output format %s: %+v" , tc .outputFormat , err )
304
+ }
305
+
306
+ t .Run (tc .name , func (t * testing.T ) {
307
+ i , err := NewImagesList ("" , & tc .cfg )
308
+ if err != nil {
309
+ t .Fatalf ("did not expect an error while creating the Images command: %v" , err )
310
+ }
311
+
312
+ var output bytes.Buffer
313
+
314
+ if err = i .Run (& output , printer ); err != nil {
315
+ t .Fatalf ("did not expect an error running the Images command: %v" , err )
316
+ }
317
+
318
+ if output .String () != tc .expectedOutput {
319
+ t .Fatalf ("unexpected output:\n |%s|\n expected:\n |%s|\n " , output .String (), tc .expectedOutput )
320
+ }
321
+ })
322
+ }
323
+ }
324
+
198
325
func TestImagesPull (t * testing.T ) {
199
326
fcmd := fakeexec.FakeCmd {
200
327
CombinedOutputScript : []fakeexec.FakeAction {
0 commit comments