Skip to content
This repository was archived by the owner on Jan 13, 2021. It is now read-only.

Commit 65f888a

Browse files
committed
Cleanup Bundle CRD when printing it
1 parent c647fc4 commit 65f888a

File tree

5 files changed

+36
-31
lines changed

5 files changed

+36
-31
lines changed

cmd/crd/BUILD.bazel

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,7 @@ go_library(
55
srcs = ["main.go"],
66
importpath = "github.com/atlassian/smith/cmd/crd",
77
visibility = ["//visibility:private"],
8-
deps = [
9-
"//pkg/resources:go_default_library",
10-
"//vendor/github.com/ghodss/yaml:go_default_library",
11-
"//vendor/github.com/pkg/errors:go_default_library",
12-
],
8+
deps = ["//pkg/resources:go_default_library"],
139
)
1410

1511
go_binary(

cmd/crd/main.go

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
package main
22

33
import (
4-
"encoding/json"
54
"flag"
65
"fmt"
76
"os"
87

98
"github.com/atlassian/smith/pkg/resources"
10-
"github.com/ghodss/yaml"
11-
"github.com/pkg/errors"
129
)
1310

1411
func main() {
@@ -23,26 +20,5 @@ func innerMain() error {
2320
printBundle := flag.String("print-bundle", "yaml", "Print Bundle CRD and exit (specify format: json or yaml)")
2421
flag.Parse()
2522

26-
switch *printBundle {
27-
case "json":
28-
enc := json.NewEncoder(os.Stdout)
29-
enc.SetIndent("", " ")
30-
enc.SetEscapeHTML(false)
31-
err := enc.Encode(resources.BundleCrd())
32-
if err != nil {
33-
return errors.Wrap(err, "failed to marshal Bundle CRD into JSON")
34-
}
35-
case "yaml":
36-
data, err := yaml.Marshal(resources.BundleCrd())
37-
if err != nil {
38-
return errors.Wrap(err, "failed to marshal Bundle CRD into YAML")
39-
}
40-
_, err = os.Stdout.Write(data)
41-
if err != nil {
42-
return errors.Wrap(err, "failed to write Bundle CRD YAML to stdout")
43-
}
44-
default:
45-
return errors.Errorf("unsupported Bundle CRD output format %q", *printBundle)
46-
}
47-
return nil
23+
return resources.PrintCleanedObject(os.Stdout, *printBundle, resources.BundleCrd())
4824
}

pkg/controller/bundlec_test/BUILD.bazel

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ go_test(
1717
"no_actions_for_blocked_resources_test.go",
1818
"no_deletions_while_in_progress_test.go",
1919
"not_marked_crd_ignored_test.go",
20-
"plugin_error_propagated_test.go",
2120
"plugin_schema_invalid_test.go",
2221
"plugin_spec_processed_test.go",
2322
"processing_continues_after_error_test.go",

pkg/resources/BUILD.bazel

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,14 @@ go_library(
1515
"//vendor/github.com/atlassian/ctrl/logz:go_default_library",
1616
"//vendor/github.com/pkg/errors:go_default_library",
1717
"//vendor/go.uber.org/zap:go_default_library",
18+
"//vendor/gopkg.in/yaml.v2:go_default_library",
1819
"//vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1:go_default_library",
1920
"//vendor/k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset:go_default_library",
2021
"//vendor/k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1beta1:go_default_library",
2122
"//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",
2223
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
24+
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library",
25+
"//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
2326
"//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library",
2427
"//vendor/k8s.io/client-go/util/jsonpath:go_default_library",
2528
],

pkg/resources/crd_helpers.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package resources
22

33
import (
44
"context"
5+
"encoding/json"
6+
"io"
57
"reflect"
68
"time"
79

@@ -11,14 +13,43 @@ import (
1113
"github.com/atlassian/smith/pkg/util"
1214
"github.com/pkg/errors"
1315
"go.uber.org/zap"
16+
yaml "gopkg.in/yaml.v2"
1417
apiext_v1b1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
1518
apiExtClientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
1619
apiext_lst_v1b1 "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1beta1"
1720
api_errors "k8s.io/apimachinery/pkg/api/errors"
1821
meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
22+
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
23+
"k8s.io/apimachinery/pkg/runtime"
1924
"k8s.io/apimachinery/pkg/util/wait"
2025
)
2126

27+
func PrintCleanedObject(sink io.Writer, format string, obj runtime.Object) error {
28+
u, err := runtime.DefaultUnstructuredConverter.ToUnstructured(obj)
29+
if err != nil {
30+
return errors.Wrap(err, "failed to convert objed to unstructured")
31+
}
32+
unstructured.RemoveNestedField(u, "metadata", "creationTimestamp")
33+
unstructured.RemoveNestedField(u, "status")
34+
switch format {
35+
case "json":
36+
enc := json.NewEncoder(sink)
37+
enc.SetIndent("", " ")
38+
enc.SetEscapeHTML(false)
39+
err := enc.Encode(u)
40+
return errors.Wrap(err, "failed to marshal into JSON")
41+
case "yaml":
42+
data, err := yaml.Marshal(u)
43+
if err != nil {
44+
return errors.Wrap(err, "failed to marshal into YAML")
45+
}
46+
_, err = sink.Write(data)
47+
return errors.Wrap(err, "failed to write to sink")
48+
default:
49+
return errors.Errorf("unsupported output format %q", format)
50+
}
51+
}
52+
2253
func BundleCrd() *apiext_v1b1.CustomResourceDefinition {
2354
// Schema is based on:
2455
// https://github.com/kubernetes/community/blob/master/contributors/design-proposals/architecture/identifiers.md

0 commit comments

Comments
 (0)