make kubectl create --edit iterate

pull/6/head
ymqytw 2016-11-14 14:12:24 -08:00
parent 5c21cc892c
commit 189348df2b
1 changed files with 170 additions and 148 deletions

View File

@ -143,7 +143,7 @@ func runEdit(f cmdutil.Factory, out, errOut io.Writer, cmd *cobra.Command, args
return err
}
infos, err := r.Infos()
normalEditInfos, err := r.Infos()
if err != nil {
return err
}
@ -153,6 +153,7 @@ func runEdit(f cmdutil.Factory, out, errOut io.Writer, cmd *cobra.Command, args
edit = editor.NewDefaultEditor(f.EditorEnvs())
)
editFn := func(info *resource.Info, err error) error {
var (
results = editResults{}
original = []byte{}
@ -161,7 +162,16 @@ func runEdit(f cmdutil.Factory, out, errOut io.Writer, cmd *cobra.Command, args
)
containsError := false
var infos []*resource.Info
for {
switch editMode {
case NormalEditMode:
infos = normalEditInfos
case EditBeforeCreateMode:
infos = []*resource.Info{info}
default:
err = fmt.Errorf("Not supported edit mode %q", editMode)
}
originalObj, err := resource.AsVersionedObject(infos, false, defaultVersion, encoder)
if err != nil {
return err
@ -318,6 +328,18 @@ func runEdit(f cmdutil.Factory, out, errOut io.Writer, cmd *cobra.Command, args
containsError = true
}
}
}
switch editMode {
// If doing normal edit we cannot use Visit because we need to edit a list for convenience. Ref: #20519
case NormalEditMode:
return editFn(nil, nil)
// If doing an edit before created, we don't want a list and instead want the normal behavior as kubectl create.
case EditBeforeCreateMode:
return r.Visit(editFn)
default:
return fmt.Errorf("Not supported edit mode %q", editMode)
}
}
func getPrinter(cmd *cobra.Command) (*editPrinterOptions, error) {