From 3066a1cdada2132778d5f9a54a25c6a7b103cc54 Mon Sep 17 00:00:00 2001 From: aiordache Date: Fri, 30 Oct 2020 18:50:56 +0100 Subject: [PATCH] cleanup Signed-off-by: aiordache --- cli/cmd/context/create_ecs.go | 4 ++ ecs/context.go | 82 ++++++++++++++++++++--------------- 2 files changed, 51 insertions(+), 35 deletions(-) diff --git a/cli/cmd/context/create_ecs.go b/cli/cmd/context/create_ecs.go index 3c35ddee..5fb68a10 100644 --- a/cli/cmd/context/create_ecs.go +++ b/cli/cmd/context/create_ecs.go @@ -18,6 +18,7 @@ package context import ( "context" + "fmt" "github.com/pkg/errors" "github.com/spf13/cobra" @@ -46,6 +47,9 @@ func createEcsCommand() *cobra.Command { Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { opts.Name = args[0] + if opts.CredsFromEnv && opts.Profile != "" { + return fmt.Errorf("--profile and --from-env flags cannot be set at the same time") + } if localSimulation { return runCreateLocalSimulation(cmd.Context(), args[0], opts) } diff --git a/ecs/context.go b/ecs/context.go index e91e24b0..15d5d068 100644 --- a/ecs/context.go +++ b/ecs/context.go @@ -66,6 +66,53 @@ func newContextCreateHelper() contextCreateAWSHelper { } } +func (h contextCreateAWSHelper) createContextData(_ context.Context, opts ContextParams) (interface{}, string, error) { + if opts.CredsFromEnv { + ecsCtx, descr := h.createContext(&opts) + return ecsCtx, descr, nil + } + if opts.Profile != "" { + // check profile exists + profilesList, err := getProfiles() + if err != nil { + return nil, "", err + } + if !contains(profilesList, opts.Profile) { + return nil, "", fmt.Errorf("profile %q not found", opts.Profile) + } + ecsCtx, descr := h.createContext(&opts) + return ecsCtx, descr, nil + } + options := []string{ + "An existing AWS profile", + "A new AWS profile", + "AWS environment variables", + } + + selected, err := h.user.Select("Create a Docker context using:", options) + if err != nil { + if err == terminal.InterruptErr { + return nil, "", errdefs.ErrCanceled + } + return nil, "", err + } + + switch selected { + case 0: + err = h.selectFromLocalProfile(&opts) + case 1: + err = h.createProfileFromCredentials(&opts) + case 2: + opts.CredsFromEnv = true + + } + if err != nil { + return nil, "", err + } + ecsCtx, descr := h.createContext(&opts) + return ecsCtx, descr, nil +} + func (h contextCreateAWSHelper) createContext(c *ContextParams) (interface{}, string) { if c.Profile == "default" { c.Profile = "" @@ -134,41 +181,6 @@ func (h contextCreateAWSHelper) createProfileFromCredentials(opts *ContextParams return h.saveRegion(opts.Name, opts.Region) } -func (h contextCreateAWSHelper) createContextData(_ context.Context, opts ContextParams) (interface{}, string, error) { - if opts.CredsFromEnv { - ecsCtx, descr := h.createContext(&opts) - return ecsCtx, descr, nil - } - options := []string{ - "An existing AWS profile", - "A new AWS profile", - "AWS environment variables", - } - - selected, err := h.user.Select("Create a Docker context using:", options) - if err != nil { - if err == terminal.InterruptErr { - return nil, "", errdefs.ErrCanceled - } - return nil, "", err - } - - switch selected { - case 0: - err = h.selectFromLocalProfile(&opts) - case 1: - err = h.createProfileFromCredentials(&opts) - case 2: - opts.CredsFromEnv = true - - } - if err != nil { - return nil, "", err - } - ecsCtx, descr := h.createContext(&opts) - return ecsCtx, descr, nil -} - func (h contextCreateAWSHelper) saveCredentials(profile string, accessKeyID string, secretAccessKey string) error { p := credentials.SharedCredentialsProvider{Profile: profile} _, err := p.Retrieve()