Skip to content

Commit 11b8d3e

Browse files
committed
fix: intial fixes
1 parent 7998992 commit 11b8d3e

File tree

2 files changed

+36
-37
lines changed

2 files changed

+36
-37
lines changed

internal/parser/parser.go

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

33
import (
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

main.go

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@ import (
2222

2323
type Config struct {
2424
Log struct {
25-
Level string `env:"LOG_LEVEL"`
26-
Encoding string `env:"LOG_ENCODING"`
25+
Level string `env:"LOG_LEVEL, default=info"`
26+
Encoding string `env:"LOG_ENCODING, default=json"`
2727
}
28-
File string `env:"FILE"`
29-
Output string `env:"OUTPUT"`
28+
File string `env:"FILE, default=/dev/stdin"`
29+
Output string `env:"OUTPUT, default=/dev/stdout"`
3030
FailFast bool `env:"FAIL_FAST"`
3131
AllowFailure bool `env:"ALLOW_FAILURE"`
3232
Workers int `env:"WORKERS"`
@@ -37,23 +37,27 @@ var (
3737
)
3838

3939
func init() {
40-
flag.StringVarP(&config.Log.Level, "log-level", "l", "info", "Define the log level (default is warning) [debug,info,warn,error]")
41-
flag.StringVarP(&config.Log.Encoding, "log-encoding", "e", "json", "Define the log format (default is json) [json,console]")
42-
flag.StringVarP(&config.File, "file", "f", "/dev/stdin", "Path to input")
43-
flag.StringVarP(&config.Output, "output", "o", "/dev/stdout", "Path to output")
40+
flag.StringVarP(&config.Log.Level, "log-level", "l", "", "Define the log level (default is warning) [debug,info,warn,error]")
41+
flag.StringVarP(&config.Log.Encoding, "log-encoding", "e", "", "Define the log format (default is json) [json,console]")
42+
flag.StringVarP(&config.File, "file", "f", "", "Path to input")
43+
flag.StringVarP(&config.Output, "output", "o", "", "Path to output")
4444
flag.BoolVar(&config.AllowFailure, "allow-failure", false, "Do not exit > 0 if an error occured")
4545
flag.BoolVar(&config.FailFast, "fail-fast", false, "Exit early if an error occured")
46-
flag.IntVar(&config.Workers, "workers", runtime.NumCPU(), "Workers used to parse manifests")
46+
flag.IntVar(&config.Workers, "workers", 0, "Workers used to parse manifests")
4747
}
4848

4949
func main() {
50-
ctx := context.Background()
50+
ctx := context.TODO()
5151
if err := envconfig.Process(ctx, config); err != nil {
5252
log.Fatal(err)
5353
}
5454

5555
flag.Parse()
5656

57+
if config.Workers == 0 {
58+
config.Workers = runtime.NumCPU()
59+
}
60+
5761
logger, err := buildLogger()
5862
must(err)
5963

0 commit comments

Comments
 (0)