From 0465a635f5b6bd3b6a231de955394c343c58368a Mon Sep 17 00:00:00 2001 From: Denis Arh Date: Mon, 30 Nov 2020 13:14:33 +0100 Subject: [PATCH] Fix directory decoding --- pkg/envoy/directory/decode.go | 54 +++++++++++++++++------------------ pkg/envoy/yaml/decoder.go | 16 +++++------ 2 files changed, 34 insertions(+), 36 deletions(-) diff --git a/pkg/envoy/directory/decode.go b/pkg/envoy/directory/decode.go index d849334c1..d108f0d00 100644 --- a/pkg/envoy/directory/decode.go +++ b/pkg/envoy/directory/decode.go @@ -25,8 +25,6 @@ func Decode(ctx context.Context, p string, decoders ...decoder) ([]resource.Inte var ( f *os.File - d decoder - // decoded nodes dnn []resource.Interface @@ -52,37 +50,37 @@ func Decode(ctx context.Context, p string, decoders ...decoder) ([]resource.Inte } defer f.Close() - for _, d = range decoders { - // find compatible decoder - if d.CanDecodeFile(f) { - break + for _, d := range decoders { + if !d.CanDecodeFile(f) { + // decoder can not handle this file + continue } - // Do a fallback for extensions - if d.CanDecodeExt(info.Name()) { - break + + if !d.CanDecodeExt(info.Name()) { + // this decoder can not handle this extension + continue } - } - if d == nil { - // no decoder found + + if _, err = f.Seek(0, 0); err != nil { + return err + } + + dir, fn := path.Split(p) + do := &envoy.DecoderOpts{ + Name: fn, + Path: dir, + } + + if dnn, err = d.Decode(ctx, f, do); err != nil { + return fmt.Errorf("failed to decode %s: %w", info.Name(), err) + } + + nn = append(nn, dnn...) + + // found compatible decoder return nil } - _, err = f.Seek(0, 0) - if err != nil { - return err - } - - dir, fn := path.Split(p) - do := &envoy.DecoderOpts{ - Name: fn, - Path: dir, - } - - if dnn, err = d.Decode(ctx, f, do); err != nil { - return fmt.Errorf("failed to decode %s: %w", info.Name(), err) - } - - nn = append(nn, dnn...) return nil }) } diff --git a/pkg/envoy/yaml/decoder.go b/pkg/envoy/yaml/decoder.go index f44d444a4..47365eb4e 100644 --- a/pkg/envoy/yaml/decoder.go +++ b/pkg/envoy/yaml/decoder.go @@ -17,10 +17,6 @@ type ( EnvoyMarshler interface { MarshalEnvoy() ([]resource.Interface, error) } - - nodeDecoder interface { - DecodeNodes(ctx context.Context) ([]resource.Interface, error) - } ) func Decoder() *decoder { @@ -31,12 +27,16 @@ func Decoder() *decoder { // // @todo Add support for this; current library is unable to detect this. func (y *decoder) CanDecodeFile(f io.Reader) bool { - return false + // relying on can-decode-ext for now + return true } -func (y *decoder) CanDecodeExt(ext string) bool { - pt := strings.Split(ext, ".") - return strings.TrimSpace(pt[len(pt)-1]) == "yaml" +func (y *decoder) CanDecodeExt(name string) bool { + var ( + pt = strings.Split(name, ".") + ext = strings.TrimSpace(pt[len(pt)-1]) + ) + return ext == "yaml" || ext == "yml" } func (y *decoder) Decode(ctx context.Context, r io.Reader, dctx *envoy.DecoderOpts) ([]resource.Interface, error) {