mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-05-17 18:25:26 +00:00
- ensure OpenAPI definitions always uses strings for setter values - allow the field type to be defined -- integer,boolean,string - format values using yaml 1.1 compatibility
114 lines
3.5 KiB
Go
114 lines
3.5 KiB
Go
// Copyright 2019 The Kubernetes Authors.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package commands
|
|
|
|
import (
|
|
"github.com/spf13/cobra"
|
|
"sigs.k8s.io/kustomize/cmd/config/ext"
|
|
"sigs.k8s.io/kustomize/cmd/config/internal/generateddocs/commands"
|
|
"sigs.k8s.io/kustomize/kyaml/kio"
|
|
"sigs.k8s.io/kustomize/kyaml/setters"
|
|
"sigs.k8s.io/kustomize/kyaml/setters2/settersutil"
|
|
)
|
|
|
|
// NewCreateSetterRunner returns a command runner.
|
|
func NewCreateSetterRunner(parent string) *CreateSetterRunner {
|
|
r := &CreateSetterRunner{}
|
|
set := &cobra.Command{
|
|
Use: "create-setter DIR NAME VALUE",
|
|
Args: cobra.ExactArgs(3),
|
|
Short: commands.CreateSetterShort,
|
|
Long: commands.CreateSetterLong,
|
|
Example: commands.CreateSetterExamples,
|
|
PreRunE: r.preRunE,
|
|
RunE: r.runE,
|
|
}
|
|
set.Flags().StringVar(&r.Set.SetPartialField.SetBy, "set-by", "",
|
|
"record who the field was default by.")
|
|
set.Flags().StringVar(&r.Set.SetPartialField.Description, "description", "",
|
|
"record a description for the current setter value.")
|
|
set.Flags().StringVar(&r.Set.SetPartialField.Field, "field", "",
|
|
"name of the field to set -- e.g. --field port. defaults to all fields match"+
|
|
"VALUE. maybe be the field name, field path, or partial field path (suffix)")
|
|
set.Flags().StringVar(&r.Set.ResourceMeta.Name, "name", "",
|
|
"name of the Resource on which to create the setter.")
|
|
set.Flags().MarkHidden("name")
|
|
set.Flags().StringVar(&r.Set.ResourceMeta.Kind, "kind", "",
|
|
"kind of the Resource on which to create the setter.")
|
|
set.Flags().MarkHidden("kind")
|
|
set.Flags().StringVar(&r.Set.SetPartialField.Type, "type", "",
|
|
"OpenAPI field type for the setter -- e.g. integer,boolean,string.")
|
|
set.Flags().BoolVar(&r.Set.SetPartialField.Partial, "partial", false,
|
|
"create a partial setter for only part of the field value.")
|
|
set.Flags().MarkHidden("partial")
|
|
set.Flags().StringVar(&setterVersion, "version", "",
|
|
"use this version of the setter format")
|
|
set.Flags().MarkHidden("version")
|
|
fixDocs(parent, set)
|
|
r.Command = set
|
|
return r
|
|
}
|
|
|
|
func CreateSetterCommand(parent string) *cobra.Command {
|
|
return NewCreateSetterRunner(parent).Command
|
|
}
|
|
|
|
type CreateSetterRunner struct {
|
|
Command *cobra.Command
|
|
Set setters.CreateSetter
|
|
CreateSetter settersutil.SetterCreator
|
|
OpenAPIFile string
|
|
}
|
|
|
|
func (r *CreateSetterRunner) runE(c *cobra.Command, args []string) error {
|
|
return handleError(c, r.set(c, args))
|
|
}
|
|
|
|
func (r *CreateSetterRunner) preRunE(c *cobra.Command, args []string) error {
|
|
var err error
|
|
r.Set.SetPartialField.Setter.Name = args[1]
|
|
r.Set.SetPartialField.Setter.Value = args[2]
|
|
r.CreateSetter.Name = args[1]
|
|
r.CreateSetter.FieldValue = args[2]
|
|
r.CreateSetter.FieldName, err = c.Flags().GetString("field")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if setterVersion == "" {
|
|
if len(args) < 3 {
|
|
setterVersion = "v1"
|
|
} else if err := initSetterVersion(c, args); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
if setterVersion == "v2" {
|
|
var err error
|
|
r.OpenAPIFile, err = ext.GetOpenAPIFile(args)
|
|
r.CreateSetter.Description = r.Set.SetPartialField.Description
|
|
r.CreateSetter.SetBy = r.Set.SetPartialField.SetBy
|
|
r.CreateSetter.Type = r.Set.SetPartialField.Type
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (r *CreateSetterRunner) set(c *cobra.Command, args []string) error {
|
|
if setterVersion == "v2" {
|
|
return r.CreateSetter.Create(r.OpenAPIFile, args[0])
|
|
}
|
|
|
|
rw := &kio.LocalPackageReadWriter{PackagePath: args[0]}
|
|
err := kio.Pipeline{
|
|
Inputs: []kio.Reader{rw},
|
|
Filters: []kio.Filter{&r.Set},
|
|
Outputs: []kio.Writer{rw}}.Execute()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|