From e4afcd88692935e8864b837e706c9e8c0930f746 Mon Sep 17 00:00:00 2001 From: Julio Chana Date: Tue, 7 Nov 2017 12:43:56 +0100 Subject: [PATCH] Add no edit flag so create instancegroup command is usable on scripts --- cmd/kops/create_ig.go | 71 ++++++++++++++++++++++++------------------- 1 file changed, 39 insertions(+), 32 deletions(-) diff --git a/cmd/kops/create_ig.go b/cmd/kops/create_ig.go index dbff7591a1..79e656b3bc 100644 --- a/cmd/kops/create_ig.go +++ b/cmd/kops/create_ig.go @@ -43,6 +43,8 @@ type CreateInstanceGroupOptions struct { DryRun bool // Output type during a DryRun Output string + // Do not launch editor when creating an instance group + NoEditor bool } var ( @@ -96,6 +98,7 @@ func NewCmdCreateInstanceGroup(f *util.Factory, out io.Writer) *cobra.Command { // DryRun mode that will print YAML or JSON cmd.Flags().BoolVar(&options.DryRun, "dry-run", options.DryRun, "If true, only print the object that would be sent, without sending it. This flag can be used to create a cluster YAML or JSON manifest.") cmd.Flags().StringVarP(&options.Output, "output", "o", options.Output, "Ouput format. One of json|yaml") + cmd.Flags().BoolVar(&options.NoEditor, "no-editor", options.NoEditor, "If true, The instance group will be created by default with no option of editing it") return cmd } @@ -179,42 +182,46 @@ func RunCreateInstanceGroup(f *util.Factory, cmd *cobra.Command, args []string, } } - var ( - edit = editor.NewDefaultEditor(editorEnvs) - ) + if !options.NoEditor { + var ( + edit = editor.NewDefaultEditor(editorEnvs) + ) - raw, err := kopscodecs.ToVersionedYaml(ig) - if err != nil { - return err - } - ext := "yaml" - - // launch the editor - edited, file, err := edit.LaunchTempFile(fmt.Sprintf("%s-edit-", filepath.Base(os.Args[0])), ext, bytes.NewReader(raw)) - defer func() { - if file != "" { - os.Remove(file) + raw, err := kopscodecs.ToVersionedYaml(ig) + if err != nil { + return err } - }() - if err != nil { - return fmt.Errorf("error launching editor: %v", err) + ext := "yaml" + + // launch the editor + edited, file, err := edit.LaunchTempFile(fmt.Sprintf("%s-edit-", filepath.Base(os.Args[0])), ext, bytes.NewReader(raw)) + defer func() { + if file != "" { + os.Remove(file) + } + }() + if err != nil { + return fmt.Errorf("error launching editor: %v", err) + } + + obj, _, err := kopscodecs.ParseVersionedYaml(edited) + if err != nil { + return fmt.Errorf("error parsing yaml: %v", err) + } + group, ok := obj.(*api.InstanceGroup) + if !ok { + return fmt.Errorf("unexpected object type: %T", obj) + } + + err = validation.ValidateInstanceGroup(group) + if err != nil { + return err + } + + ig = group } - obj, _, err := kopscodecs.ParseVersionedYaml(edited) - if err != nil { - return fmt.Errorf("error parsing yaml: %v", err) - } - group, ok := obj.(*api.InstanceGroup) - if !ok { - return fmt.Errorf("unexpected object type: %T", obj) - } - - err = validation.ValidateInstanceGroup(group) - if err != nil { - return err - } - - _, err = clientset.InstanceGroupsFor(cluster).Create(group) + _, err = clientset.InstanceGroupsFor(cluster).Create(ig) if err != nil { return fmt.Errorf("error storing InstanceGroup: %v", err) }