mirror of
https://github.com/ceph/ceph-csi.git
synced 2025-06-14 18:53:35 +00:00
vendor update for CSI 0.3.0
This commit is contained in:
97
vendor/k8s.io/kubernetes/pkg/kubectl/cmd/diff.go
generated
vendored
97
vendor/k8s.io/kubernetes/pkg/kubectl/cmd/diff.go
generated
vendored
@ -26,15 +26,18 @@ import (
|
||||
|
||||
"github.com/ghodss/yaml"
|
||||
"github.com/spf13/cobra"
|
||||
"k8s.io/apimachinery/pkg/api/errors"
|
||||
"k8s.io/apimachinery/pkg/api/meta"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/client-go/dynamic"
|
||||
api "k8s.io/kubernetes/pkg/apis/core"
|
||||
"k8s.io/kubernetes/pkg/kubectl/apply/parse"
|
||||
"k8s.io/kubernetes/pkg/kubectl/apply/strategy"
|
||||
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
||||
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
||||
"k8s.io/kubernetes/pkg/kubectl/resource"
|
||||
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
|
||||
"k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource"
|
||||
"k8s.io/kubernetes/pkg/kubectl/util/i18n"
|
||||
"k8s.io/utils/exec"
|
||||
)
|
||||
@ -101,12 +104,11 @@ func parseDiffArguments(args []string) (string, string, error) {
|
||||
return from, to, nil
|
||||
}
|
||||
|
||||
func NewCmdDiff(f cmdutil.Factory, stdout, stderr io.Writer) *cobra.Command {
|
||||
func NewCmdDiff(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra.Command {
|
||||
var options DiffOptions
|
||||
diff := DiffProgram{
|
||||
Exec: exec.New(),
|
||||
Stdout: stdout,
|
||||
Stderr: stderr,
|
||||
Exec: exec.New(),
|
||||
IOStreams: streams,
|
||||
}
|
||||
cmd := &cobra.Command{
|
||||
Use: "diff -f FILENAME",
|
||||
@ -132,9 +134,8 @@ func NewCmdDiff(f cmdutil.Factory, stdout, stderr io.Writer) *cobra.Command {
|
||||
// KUBERNETES_EXTERNAL_DIFF environment variable will be used a diff
|
||||
// program. By default, `diff(1)` will be used.
|
||||
type DiffProgram struct {
|
||||
Exec exec.Interface
|
||||
Stdout io.Writer
|
||||
Stderr io.Writer
|
||||
Exec exec.Interface
|
||||
genericclioptions.IOStreams
|
||||
}
|
||||
|
||||
func (d *DiffProgram) getCommand(args ...string) exec.Cmd {
|
||||
@ -147,8 +148,8 @@ func (d *DiffProgram) getCommand(args ...string) exec.Cmd {
|
||||
}
|
||||
|
||||
cmd := d.Exec.Command(diff, args...)
|
||||
cmd.SetStdout(d.Stdout)
|
||||
cmd.SetStderr(d.Stderr)
|
||||
cmd.SetStdout(d.Out)
|
||||
cmd.SetStderr(d.ErrOut)
|
||||
|
||||
return cmd
|
||||
}
|
||||
@ -264,6 +265,7 @@ type Object interface {
|
||||
// InfoObject is an implementation of the Object interface. It gets all
|
||||
// the information from the Info object.
|
||||
type InfoObject struct {
|
||||
Remote runtime.Unstructured
|
||||
Info *resource.Info
|
||||
Encoder runtime.Encoder
|
||||
Parser *parse.Factory
|
||||
@ -289,14 +291,10 @@ func (obj InfoObject) Local() (map[string]interface{}, error) {
|
||||
}
|
||||
|
||||
func (obj InfoObject) Live() (map[string]interface{}, error) {
|
||||
if obj.Info.Object == nil {
|
||||
if obj.Remote == nil {
|
||||
return nil, nil // Object doesn't exist on cluster.
|
||||
}
|
||||
data, err := runtime.Encode(obj.Encoder, obj.Info.Object)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return obj.toMap(data)
|
||||
return obj.Remote.UnstructuredContent(), nil
|
||||
}
|
||||
|
||||
func (obj InfoObject) Merged() (map[string]interface{}, error) {
|
||||
@ -328,10 +326,10 @@ func (obj InfoObject) Merged() (map[string]interface{}, error) {
|
||||
}
|
||||
|
||||
func (obj InfoObject) Last() (map[string]interface{}, error) {
|
||||
if obj.Info.Object == nil {
|
||||
if obj.Remote == nil {
|
||||
return nil, nil // No object is live, return empty
|
||||
}
|
||||
accessor, err := meta.Accessor(obj.Info.Object)
|
||||
accessor, err := meta.Accessor(obj.Remote)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -391,6 +389,50 @@ func (d *Differ) TearDown() {
|
||||
d.To.Dir.Delete() // Ignore error
|
||||
}
|
||||
|
||||
type Downloader struct {
|
||||
mapper meta.RESTMapper
|
||||
dclient dynamic.Interface
|
||||
ns string
|
||||
}
|
||||
|
||||
func NewDownloader(f cmdutil.Factory) (*Downloader, error) {
|
||||
var err error
|
||||
var d Downloader
|
||||
|
||||
d.mapper, err = f.ToRESTMapper()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
d.dclient, err = f.DynamicClient()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
d.ns, _, _ = f.ToRawKubeConfigLoader().Namespace()
|
||||
|
||||
return &d, nil
|
||||
}
|
||||
|
||||
func (d *Downloader) Download(info *resource.Info) (*unstructured.Unstructured, error) {
|
||||
gvk := info.Object.GetObjectKind().GroupVersionKind()
|
||||
mapping, err := d.mapper.RESTMapping(gvk.GroupKind(), gvk.Version)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var resource dynamic.ResourceInterface
|
||||
switch mapping.Scope.Name() {
|
||||
case meta.RESTScopeNameNamespace:
|
||||
if info.Namespace == "" {
|
||||
info.Namespace = d.ns
|
||||
}
|
||||
resource = d.dclient.Resource(mapping.Resource).Namespace(info.Namespace)
|
||||
case meta.RESTScopeNameRoot:
|
||||
resource = d.dclient.Resource(mapping.Resource)
|
||||
}
|
||||
|
||||
return resource.Get(info.Name, metav1.GetOptions{})
|
||||
}
|
||||
|
||||
// RunDiff uses the factory to parse file arguments, find the version to
|
||||
// diff, and find each Info object for each files, and runs against the
|
||||
// differ.
|
||||
@ -409,7 +451,7 @@ func RunDiff(f cmdutil.Factory, diff *DiffProgram, options *DiffOptions, from, t
|
||||
|
||||
printer := Printer{}
|
||||
|
||||
cmdNamespace, enforceNamespace, err := f.DefaultNamespace()
|
||||
cmdNamespace, enforceNamespace, err := f.ToRawKubeConfigLoader().Namespace()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -418,25 +460,26 @@ func RunDiff(f cmdutil.Factory, diff *DiffProgram, options *DiffOptions, from, t
|
||||
Unstructured().
|
||||
NamespaceParam(cmdNamespace).DefaultNamespace().
|
||||
FilenameParam(enforceNamespace, &options.FilenameOptions).
|
||||
Local().
|
||||
Flatten().
|
||||
Do()
|
||||
if err := r.Err(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
dl, err := NewDownloader(f)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = r.Visit(func(info *resource.Info, err error) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := info.Get(); err != nil {
|
||||
if !errors.IsNotFound(err) {
|
||||
return cmdutil.AddSourceToErr(fmt.Sprintf("retrieving current configuration of:\n%v\nfrom server for:", info), info.Source, err)
|
||||
}
|
||||
info.Object = nil
|
||||
}
|
||||
|
||||
remote, _ := dl.Download(info)
|
||||
obj := InfoObject{
|
||||
Remote: remote,
|
||||
Info: info,
|
||||
Parser: parser,
|
||||
Encoder: cmdutil.InternalVersionJSONEncoder(),
|
||||
|
Reference in New Issue
Block a user