From ef833b9be8e57d0725e0298329d1eb426a8e52d2 Mon Sep 17 00:00:00 2001 From: Rajat Chopra Date: Wed, 5 Sep 2018 18:14:00 -0400 Subject: [PATCH] default values for some fields in install_config Signed-off-by: Rajat Chopra --- pkg/asset/installconfig/platform.go | 11 ++++++----- pkg/asset/installconfig/stock.go | 10 ++++++---- pkg/asset/userprovided.go | 16 ++++++++++++---- pkg/asset/userprovided_test.go | 14 +++++++++++++- 4 files changed, 37 insertions(+), 14 deletions(-) diff --git a/pkg/asset/installconfig/platform.go b/pkg/asset/installconfig/platform.go index 053149cf4ce..6fb6d0eb207 100644 --- a/pkg/asset/installconfig/platform.go +++ b/pkg/asset/installconfig/platform.go @@ -16,8 +16,9 @@ const ( ) var ( - validPlatforms = []string{AWSPlatformType, LibvirtPlatformType} - platformPrompt = fmt.Sprintf("Platform (%s):", strings.Join(validPlatforms, ", ")) + validPlatforms = []string{AWSPlatformType, LibvirtPlatformType} + defaultPlatformValue = AWSPlatformType + platformPrompt = fmt.Sprintf("Platform (%s):", strings.Join(validPlatforms, ", ")) ) // Platform is an asset that queries the user for the platform on which to install @@ -56,7 +57,7 @@ func (a *Platform) Generate(map[asset.Asset]*asset.State) (*asset.State, error) func (a *Platform) queryUserForPlatform() string { for { - input := asset.QueryUser(a.InputReader, platformPrompt) + input := asset.QueryUser(a.InputReader, platformPrompt, defaultPlatformValue) input = strings.ToLower(input) for _, p := range validPlatforms { if input == p { @@ -70,7 +71,7 @@ func (a *Platform) queryUserForPlatform() string { func (a *Platform) awsPlatform() (*asset.State, error) { return assetStateForStringContents( AWSPlatformType, - asset.QueryUser(a.InputReader, "Region:"), + asset.QueryUser(a.InputReader, "Region:", "us-east-1"), ), nil } @@ -78,7 +79,7 @@ func (a *Platform) libvirtPlatform() (*asset.State, error) { return assetStateForStringContents( LibvirtPlatformType, // TODO(yifan): Set the default URI. - asset.QueryUser(a.InputReader, "URI:"), + asset.QueryUser(a.InputReader, "URI:", "qemu:///system"), ), nil } diff --git a/pkg/asset/installconfig/stock.go b/pkg/asset/installconfig/stock.go index 0e33a9125b3..0316177256a 100644 --- a/pkg/asset/installconfig/stock.go +++ b/pkg/asset/installconfig/stock.go @@ -51,12 +51,14 @@ func (s *StockImpl) EstablishStock(directory string, inputReader *bufio.Reader) } s.clusterID = &clusterID{} s.emailAddress = &asset.UserProvided{ - Prompt: "Email Address:", - InputReader: inputReader, + Prompt: "Email Address:", + DefaultValue: "a@b.c", + InputReader: inputReader, } s.password = &asset.UserProvided{ - Prompt: "Password:", - InputReader: inputReader, + Prompt: "Password:", + DefaultValue: "verysecure", + InputReader: inputReader, } s.sshKey = &sshPublicKey{ inputReader: inputReader, diff --git a/pkg/asset/userprovided.go b/pkg/asset/userprovided.go index 77c8d9e6e72..c3372e6f44b 100644 --- a/pkg/asset/userprovided.go +++ b/pkg/asset/userprovided.go @@ -4,12 +4,14 @@ import ( "bufio" "fmt" "io" + "strings" ) // UserProvided generates an asset that is supplied by a user. type UserProvided struct { - InputReader *bufio.Reader - Prompt string + InputReader *bufio.Reader + DefaultValue string + Prompt string } var _ Asset = (*UserProvided)(nil) @@ -21,7 +23,7 @@ func (a *UserProvided) Dependencies() []Asset { // Generate queries for input from the user. func (a *UserProvided) Generate(map[Asset]*State) (*State, error) { - input := QueryUser(a.InputReader, a.Prompt) + input := QueryUser(a.InputReader, a.Prompt, a.DefaultValue) return &State{ Contents: []Content{ {Data: []byte(input)}, @@ -30,7 +32,10 @@ func (a *UserProvided) Generate(map[Asset]*State) (*State, error) { } // QueryUser queries the user for input. -func QueryUser(inputReader *bufio.Reader, prompt string) string { +func QueryUser(inputReader *bufio.Reader, prompt, defaultValue string) string { + if defaultValue != "" { + prompt = strings.Join([]string{prompt, "[", defaultValue, "]"}, "") + } for { fmt.Println(prompt) input, err := inputReader.ReadString('\n') @@ -41,6 +46,9 @@ func QueryUser(inputReader *bufio.Reader, prompt string) string { if input != "" && input[len(input)-1] == '\n' { input = input[:len(input)-1] } + if input == "" { + input = defaultValue + } return input } } diff --git a/pkg/asset/userprovided_test.go b/pkg/asset/userprovided_test.go index d3a4a9b21fd..0c195a059c7 100644 --- a/pkg/asset/userprovided_test.go +++ b/pkg/asset/userprovided_test.go @@ -12,40 +12,52 @@ func TestQueryUser(t *testing.T) { cases := []struct { name string input string + defaultValue string expectedOutput string }{ { name: "single word", input: "test", + defaultValue: "default", expectedOutput: "test", }, { name: "with newline", input: `test `, + defaultValue: "default", expectedOutput: "test", }, { name: "multiple words", input: "this is a test", + defaultValue: "default", expectedOutput: "this is a test", }, { name: "multiple lines", input: `first second`, + defaultValue: "default", expectedOutput: "first", }, { name: "empty", input: "", + defaultValue: "", expectedOutput: "", }, + { + name: "default value", + input: "", + defaultValue: "default", + expectedOutput: "default", + }, } for _, tc := range cases { t.Run(tc.name, func(t *testing.T) { inputReader := bufio.NewReader(strings.NewReader(tc.input)) - actual := QueryUser(inputReader, "prompt") + actual := QueryUser(inputReader, "prompt", tc.defaultValue) assert.Equal(t, tc.expectedOutput, actual, "unexpected output") }) }