2019-01-12 04:58:27 +00:00
/ *
Copyright 2018 The Kubernetes Authors .
Licensed under the Apache License , Version 2.0 ( the "License" ) ;
you may not use this file except in compliance with the License .
You may obtain a copy of the License at
http : //www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing , software
distributed under the License is distributed on an "AS IS" BASIS ,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied .
See the License for the specific language governing permissions and
limitations under the License .
* /
package genericclioptions
import (
"strings"
"github.com/spf13/cobra"
2019-04-07 17:07:55 +00:00
"k8s.io/cli-runtime/pkg/printers"
2019-01-12 04:58:27 +00:00
)
2021-03-18 22:40:29 +00:00
// AllowedFormats returns slice of string of allowed JSONYaml printing format
2019-01-12 04:58:27 +00:00
func ( f * JSONYamlPrintFlags ) AllowedFormats ( ) [ ] string {
if f == nil {
return [ ] string { }
}
return [ ] string { "json" , "yaml" }
}
// JSONYamlPrintFlags provides default flags necessary for json/yaml printing.
// Given the following flag values, a printer can be requested that knows
// how to handle printing based on these values.
type JSONYamlPrintFlags struct {
2021-03-18 22:40:29 +00:00
showManagedFields bool
2019-01-12 04:58:27 +00:00
}
// ToPrinter receives an outputFormat and returns a printer capable of
// handling --output=(yaml|json) printing.
// Returns false if the specified outputFormat does not match a supported format.
// Supported Format types can be found in pkg/printers/printers.go
func ( f * JSONYamlPrintFlags ) ToPrinter ( outputFormat string ) ( printers . ResourcePrinter , error ) {
var printer printers . ResourcePrinter
outputFormat = strings . ToLower ( outputFormat )
switch outputFormat {
case "json" :
printer = & printers . JSONPrinter { }
case "yaml" :
printer = & printers . YAMLPrinter { }
default :
return nil , NoCompatiblePrinterError { OutputFormat : & outputFormat , AllowedFormats : f . AllowedFormats ( ) }
}
2021-03-18 22:40:29 +00:00
if ! f . showManagedFields {
printer = & printers . OmitManagedFieldsPrinter { Delegate : printer }
}
2019-01-12 04:58:27 +00:00
return printer , nil
}
// AddFlags receives a *cobra.Command reference and binds
// flags related to JSON or Yaml printing to it
2021-03-18 22:40:29 +00:00
func ( f * JSONYamlPrintFlags ) AddFlags ( c * cobra . Command ) {
if f == nil {
return
}
c . Flags ( ) . BoolVar ( & f . showManagedFields , "show-managed-fields" , f . showManagedFields , "If true, keep the managedFields when printing objects in JSON or YAML format." )
}
2019-01-12 04:58:27 +00:00
// NewJSONYamlPrintFlags returns flags associated with
// yaml or json printing, with default values set.
func NewJSONYamlPrintFlags ( ) * JSONYamlPrintFlags {
return & JSONYamlPrintFlags { }
}