...

Source file src/sigs.k8s.io/cli-utils/pkg/manifestreader/manifestloader.go

Documentation: sigs.k8s.io/cli-utils/pkg/manifestreader

     1  // Copyright 2020 The Kubernetes Authors.
     2  // SPDX-License-Identifier: Apache-2.0
     3  
     4  package manifestreader
     5  
     6  import (
     7  	"io"
     8  
     9  	"k8s.io/kubectl/pkg/cmd/util"
    10  )
    11  
    12  // ManifestLoader is an interface for reading
    13  // and parsing the resources
    14  type ManifestLoader interface {
    15  	ManifestReader(reader io.Reader, path string) (ManifestReader, error)
    16  }
    17  
    18  // manifestLoader implements the ManifestLoader interface
    19  type manifestLoader struct {
    20  	factory util.Factory
    21  }
    22  
    23  // NewManifestLoader returns an instance of manifestLoader.
    24  func NewManifestLoader(f util.Factory) ManifestLoader {
    25  	return &manifestLoader{
    26  		factory: f,
    27  	}
    28  }
    29  
    30  func (f *manifestLoader) ManifestReader(reader io.Reader, path string) (ManifestReader, error) {
    31  	// Fetch the namespace from the configloader. The source of this
    32  	// either the namespace flag or the context. If the namespace is provided
    33  	// with the flag, enforceNamespace will be true. In this case, it is
    34  	// an error if any of the resources in the package has a different
    35  	// namespace set.
    36  	namespace, enforceNamespace, err := f.factory.ToRawKubeConfigLoader().Namespace()
    37  	if err != nil {
    38  		return nil, err
    39  	}
    40  
    41  	mapper, err := f.factory.ToRESTMapper()
    42  	if err != nil {
    43  		return nil, err
    44  	}
    45  
    46  	readerOptions := ReaderOptions{
    47  		Mapper:           mapper,
    48  		Namespace:        namespace,
    49  		EnforceNamespace: enforceNamespace,
    50  	}
    51  
    52  	return mReader(path, reader, readerOptions), nil
    53  }
    54  
    55  // mReader returns the ManifestReader based in the input args
    56  func mReader(path string, reader io.Reader, readerOptions ReaderOptions) ManifestReader {
    57  	var mReader ManifestReader
    58  	// Read from stdin if "-" is specified, similar to kubectl
    59  	if path == "-" {
    60  		mReader = &StreamManifestReader{
    61  			ReaderName:    "stdin",
    62  			Reader:        reader,
    63  			ReaderOptions: readerOptions,
    64  		}
    65  	} else {
    66  		mReader = &PathManifestReader{
    67  			Path:          path,
    68  			ReaderOptions: readerOptions,
    69  		}
    70  	}
    71  	return mReader
    72  }
    73  

View as plain text