@@ -2,8 +2,6 @@ package parser
22
33import (
44 "archive/tar"
5- "bufio"
6- "bytes"
75 "context"
86 "io"
97 "os"
@@ -17,6 +15,7 @@ import (
1715 "github.com/google/go-containerregistry/pkg/name"
1816 "github.com/google/go-containerregistry/pkg/v1/remote"
1917 "github.com/google/go-containerregistry/pkg/v1/tarball"
18+ "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
2019 "k8s.io/apimachinery/pkg/runtime"
2120 "k8s.io/apimachinery/pkg/runtime/schema"
2221 "k8s.io/cli-runtime/pkg/printers"
@@ -56,19 +55,19 @@ func (p *Parser) Run(ctx context.Context, in io.Reader) error {
5655 Workers : 1 ,
5756 })
5857
59- manifests := make (chan [] byte , p .Workers )
58+ objects := make (chan runtime. Object , p .Workers )
6059
6160 outWriter .Push (worker .Task (func (ctx context.Context ) error {
6261 for {
6362 select {
6463 case <- ctx .Done ():
6564 return nil
66- case manifest , ok := <- manifests :
65+ case obj , ok := <- objects :
6766 if ! ok {
6867 return nil
6968 }
7069
71- _ , err := p .Output . Write ( append ([] byte ( "--- \n " ), manifest ... ) )
70+ err := p .Printer . PrintObj ( obj , p . Output )
7271 if err != nil {
7372 p .Logger .Error (err , "failed to write manifests to output" )
7473 return abort (err )
@@ -83,26 +82,27 @@ func (p *Parser) Run(ctx context.Context, in io.Reader) error {
8382 }
8483
8584 for _ , resourceYAML := range strings .Split (string (manifest ), "---" ) {
85+ r := resourceYAML
8686 pool .Push (worker .Task (func (ctx context.Context ) error {
8787 if len (resourceYAML ) == 0 {
8888 return nil
8989 }
9090
9191 obj , gvk , err := p .Decoder .Decode (
92- []byte (resourceYAML ),
92+ []byte (r ),
9393 nil ,
9494 nil )
9595 if err != nil {
9696 return nil
9797 }
9898
99- return p .handleResource (obj , gvk , manifests )
99+ return p .handleResource (obj , gvk , objects )
100100 }))
101101
102102 }
103103
104104 p .exit (pool )
105- close (manifests )
105+ close (objects )
106106 p .exit (outWriter )
107107 return nil
108108}
@@ -117,10 +117,9 @@ func (p *Parser) exit(waiters ...worker.Waiter) {
117117 }
118118}
119119
120- func (p * Parser ) handleResource (obj runtime.Object , gvk * schema.GroupVersionKind , out chan [] byte ) error {
120+ func (p * Parser ) handleResource (obj runtime.Object , gvk * schema.GroupVersionKind , out chan runtime. Object ) error {
121121 if gvk .Group == "pkg.crossplane.io" && gvk .Kind == "Provider" {
122122 provider := obj .(* crossplanev1.Provider )
123-
124123 p .Logger .Info ("unpacking provider" , "name" , provider .Name , "url" , provider .Spec .Package )
125124
126125 manifest , err := p .unpack (provider )
@@ -139,37 +138,33 @@ func (p *Parser) handleResource(obj runtime.Object, gvk *schema.GroupVersionKind
139138
140139 crd .Kind = "CustomResourceDefinition"
141140 crd .APIVersion = "apiextensions.k8s.io/v1"
142-
143- var b bytes.Buffer
144- err = p .Printer .PrintObj (crd , bufio .NewWriter (& b ))
145- if err != nil {
146- return err
147- }
148-
149- out <- b .Bytes ()
141+ out <- crd
150142 }
151143
152144 return nil
153145}
154146
155- func (p * Parser ) parseManifest (manifest []byte , out chan [] byte ) error {
147+ func (p * Parser ) parseManifest (manifest []byte , out chan runtime. Object ) error {
156148 for _ , resourceYAML := range strings .Split (string (manifest ), "---" ) {
157149 if len (resourceYAML ) == 0 {
158150 continue
159151 }
160152
153+ obj := unstructured.Unstructured {}
161154 _ , gvk , err := p .Decoder .Decode (
162155 []byte (resourceYAML ),
163156 nil ,
164- nil )
157+ & obj )
165158
166- if err != nil {
167- out <- []byte (resourceYAML )
168- } else {
169- // exclude meta resources
170- if gvk .Group != "meta.pkg.crossplane.io" {
171- out <- []byte (resourceYAML )
172- }
159+ if err != nil && ! runtime .IsMissingKind (err ) {
160+ return err
161+ } else if runtime .IsMissingKind (err ) {
162+ continue
163+ }
164+
165+ // exclude meta resources
166+ if gvk .Group != "meta.pkg.crossplane.io" {
167+ out <- & obj
173168 }
174169 }
175170
0 commit comments