mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-24 20:24:09 +00:00
Merge pull request #38112 from juanvallejo/jvallejo/add-output-format-support-kubectl-create
Automatic merge from submit-queue Add json,yaml output format support to kubectl create, kubectl apply Fixes: https://github.com/kubernetes/kubernetes/issues/37390 **Release note**: ```release-note Added support for printing in all supported `--output` formats to `kubectl create ...` and `kubectl apply ...` ``` This patch adds the ability to specify an output format other than "name" to `kubectl create ...`. It can be used in conjunction with the `--dry-run` option. Converts unstructured objects into known types in order to support all `--output` values. The patch prints `*resource.Info`s returned by the server. If a resource does not yet exist (and the `--dry-run` option is not set), the resource is created and printed in the specified format. @kubernetes/cli-review @fabianofranz
This commit is contained in:
commit
3951ae4e1d
@ -100,7 +100,6 @@ func NewCmdApply(f cmdutil.Factory, out, errOut io.Writer) *cobra.Command {
|
|||||||
Example: apply_example,
|
Example: apply_example,
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
cmdutil.CheckErr(validateArgs(cmd, args))
|
cmdutil.CheckErr(validateArgs(cmd, args))
|
||||||
cmdutil.CheckErr(cmdutil.ValidateOutputArgs(cmd))
|
|
||||||
cmdutil.CheckErr(validatePruneAll(options.Prune, cmdutil.GetFlagBool(cmd, "all"), options.Selector))
|
cmdutil.CheckErr(validatePruneAll(options.Prune, cmdutil.GetFlagBool(cmd, "all"), options.Selector))
|
||||||
cmdutil.CheckErr(RunApply(f, cmd, out, errOut, &options))
|
cmdutil.CheckErr(RunApply(f, cmd, out, errOut, &options))
|
||||||
},
|
},
|
||||||
@ -164,7 +163,6 @@ func parsePruneResources(gvks []string) ([]pruneResource, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func RunApply(f cmdutil.Factory, cmd *cobra.Command, out, errOut io.Writer, options *ApplyOptions) error {
|
func RunApply(f cmdutil.Factory, cmd *cobra.Command, out, errOut io.Writer, options *ApplyOptions) error {
|
||||||
shortOutput := cmdutil.GetFlagString(cmd, "output") == "name"
|
|
||||||
schema, err := f.Validator(cmdutil.GetFlagBool(cmd, "validate"), cmdutil.GetFlagString(cmd, "schema-cache-dir"))
|
schema, err := f.Validator(cmdutil.GetFlagBool(cmd, "validate"), cmdutil.GetFlagString(cmd, "schema-cache-dir"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -197,6 +195,8 @@ func RunApply(f cmdutil.Factory, cmd *cobra.Command, out, errOut io.Writer, opti
|
|||||||
}
|
}
|
||||||
|
|
||||||
dryRun := cmdutil.GetFlagBool(cmd, "dry-run")
|
dryRun := cmdutil.GetFlagBool(cmd, "dry-run")
|
||||||
|
output := cmdutil.GetFlagString(cmd, "output")
|
||||||
|
shortOutput := output == "name"
|
||||||
|
|
||||||
encoder := f.JSONEncoder()
|
encoder := f.JSONEncoder()
|
||||||
decoder := f.Decoder(false)
|
decoder := f.Decoder(false)
|
||||||
@ -253,6 +253,9 @@ func RunApply(f cmdutil.Factory, cmd *cobra.Command, out, errOut io.Writer, opti
|
|||||||
}
|
}
|
||||||
|
|
||||||
count++
|
count++
|
||||||
|
if len(output) > 0 && !shortOutput {
|
||||||
|
return cmdutil.PrintResourceInfoForCommand(cmd, info, f, out)
|
||||||
|
}
|
||||||
cmdutil.PrintSuccess(mapper, shortOutput, out, info.Mapping.Resource, info.Name, dryRun, "created")
|
cmdutil.PrintSuccess(mapper, shortOutput, out, info.Mapping.Resource, info.Name, dryRun, "created")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -304,6 +307,9 @@ func RunApply(f cmdutil.Factory, cmd *cobra.Command, out, errOut io.Writer, opti
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
count++
|
count++
|
||||||
|
if len(output) > 0 && !shortOutput {
|
||||||
|
return cmdutil.PrintResourceInfoForCommand(cmd, info, f, out)
|
||||||
|
}
|
||||||
cmdutil.PrintSuccess(mapper, shortOutput, out, info.Mapping.Resource, info.Name, dryRun, "configured")
|
cmdutil.PrintSuccess(mapper, shortOutput, out, info.Mapping.Resource, info.Name, dryRun, "configured")
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
@ -131,6 +131,7 @@ func RunCreate(f cmdutil.Factory, cmd *cobra.Command, out, errOut io.Writer, opt
|
|||||||
}
|
}
|
||||||
|
|
||||||
dryRun := cmdutil.GetFlagBool(cmd, "dry-run")
|
dryRun := cmdutil.GetFlagBool(cmd, "dry-run")
|
||||||
|
output := cmdutil.GetFlagString(cmd, "output")
|
||||||
|
|
||||||
count := 0
|
count := 0
|
||||||
err = r.Visit(func(info *resource.Info, err error) error {
|
err = r.Visit(func(info *resource.Info, err error) error {
|
||||||
@ -154,7 +155,11 @@ func RunCreate(f cmdutil.Factory, cmd *cobra.Command, out, errOut io.Writer, opt
|
|||||||
}
|
}
|
||||||
|
|
||||||
count++
|
count++
|
||||||
shortOutput := cmdutil.GetFlagString(cmd, "output") == "name"
|
|
||||||
|
shortOutput := output == "name"
|
||||||
|
if len(output) > 0 && !shortOutput {
|
||||||
|
return cmdutil.PrintResourceInfoForCommand(cmd, info, f, out)
|
||||||
|
}
|
||||||
if !shortOutput {
|
if !shortOutput {
|
||||||
f.PrintObjectSpecificMessage(info.Object, out)
|
f.PrintObjectSpecificMessage(info.Object, out)
|
||||||
}
|
}
|
||||||
|
@ -23,6 +23,7 @@ import (
|
|||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api/meta"
|
"k8s.io/kubernetes/pkg/api/meta"
|
||||||
"k8s.io/kubernetes/pkg/kubectl"
|
"k8s.io/kubernetes/pkg/kubectl"
|
||||||
|
"k8s.io/kubernetes/pkg/kubectl/resource"
|
||||||
"k8s.io/kubernetes/pkg/runtime/schema"
|
"k8s.io/kubernetes/pkg/runtime/schema"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
@ -133,6 +134,24 @@ func PrinterForCommand(cmd *cobra.Command) (kubectl.ResourcePrinter, bool, error
|
|||||||
return maybeWrapSortingPrinter(cmd, printer), generic, nil
|
return maybeWrapSortingPrinter(cmd, printer), generic, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PrintResourceInfoForCommand receives a *cobra.Command and a *resource.Info and
|
||||||
|
// attempts to print an info object based on the specified output format. If the
|
||||||
|
// object passed is non-generic, it attempts to print the object using a HumanReadablePrinter.
|
||||||
|
// Requires that printer flags have been added to cmd (see AddPrinterFlags).
|
||||||
|
func PrintResourceInfoForCommand(cmd *cobra.Command, info *resource.Info, f Factory, out io.Writer) error {
|
||||||
|
printer, generic, err := PrinterForCommand(cmd)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if !generic || printer == nil {
|
||||||
|
printer, err = f.PrinterForMapping(cmd, nil, false)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return printer.PrintObj(info.Object, out)
|
||||||
|
}
|
||||||
|
|
||||||
func maybeWrapSortingPrinter(cmd *cobra.Command, printer kubectl.ResourcePrinter) kubectl.ResourcePrinter {
|
func maybeWrapSortingPrinter(cmd *cobra.Command, printer kubectl.ResourcePrinter) kubectl.ResourcePrinter {
|
||||||
sorting, err := cmd.Flags().GetString("sort-by")
|
sorting, err := cmd.Flags().GetString("sort-by")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user