diff --git a/stacks/database.go b/stacks/database.go index 021ecac..8f73858 100644 --- a/stacks/database.go +++ b/stacks/database.go @@ -254,48 +254,51 @@ func (a *DatabaseStack) UpdateFromFlags(flags *pflag.FlagSet) error { func (a *DatabaseStack) AskQuestions(sess *session.Session) error { var questions []*ui.QuestionExtra var err error - var aurora bool + var aurora bool = false if a.Stack == nil { - err = AskForCluster( - sess, - "Which cluster should this Database be installed in?", - "A cluster represents an isolated network and its associated resources (Apps, Database, Redis, etc.).", - a.Parameters, - ) - if err != nil { - return err + if a.Parameters.ClusterStackName == "" { + err = AskForCluster( + sess, + "Which cluster should this Database be installed in?", + "A cluster represents an isolated network and its associated resources (Apps, Database, Redis, etc.).", + a.Parameters, + ) + if err != nil { + return err + } } - - questions = append(questions, []*ui.QuestionExtra{ - { - Verbose: "What engine should this Database use?", - HelpText: "", - Question: &survey.Question{ - Name: "Engine", - Prompt: &survey.Select{ - Message: "Type", - Options: []string{"postgres", "mysql"}, - FilterMessage: "", - Default: "postgres", + if a.Parameters.Engine == "" { + questions = append(questions, []*ui.QuestionExtra{ + { + Verbose: "What engine should this Database use?", + HelpText: "", + Question: &survey.Question{ + Name: "Engine", + Prompt: &survey.Select{ + Message: "Type", + Options: []string{"postgres", "mysql"}, + FilterMessage: "", + Default: "postgres", + }, + Validate: survey.Required, }, - Validate: survey.Required, }, - }, - { - Verbose: "Should this Database use the Aurora engine variant?", - HelpText: "Aurora provides many benefits over the standard engines, but is not available on very small instance sizes. For more info see https://aws.amazon.com/rds/aurora/.", - WriteTo: &ui.BooleanOptionProxy{Value: &aurora}, - Question: &survey.Question{ - Prompt: &survey.Select{ - Message: "Aurora", - Options: []string{"yes", "no"}, - FilterMessage: "", - Default: ui.BooleanAsYesNo(aurora), + { + Verbose: "Should this Database use the Aurora engine variant?", + HelpText: "Aurora provides many benefits over the standard engines, but is not available on very small instance sizes. For more info see https://aws.amazon.com/rds/aurora/.", + WriteTo: &ui.BooleanOptionProxy{Value: &aurora}, + Question: &survey.Question{ + Prompt: &survey.Select{ + Message: "Aurora", + Options: []string{"yes", "no"}, + FilterMessage: "", + Default: ui.BooleanAsYesNo(aurora), + }, + Validate: survey.Required, }, - Validate: survey.Required, }, - }, - }...) + }...) + } if err = ui.AskQuestions(questions, a.Parameters); err != nil { return err } @@ -313,47 +316,71 @@ func (a *DatabaseStack) AskQuestions(sess *session.Session) error { return err } questions = []*ui.QuestionExtra{} + ui.Spinner.Stop() } - ui.StartSpinner() - ui.Spinner.Suffix = fmt.Sprintf(" retrieving instance classes for %s", a.Parameters.Engine) - instanceClasses, err := listRDSInstanceClasses(sess, &a.Parameters.Engine, &a.Parameters.Version) - if err != nil { - return err - } - ui.Spinner.Stop() - ui.Spinner.Suffix = "" - questions = append(questions, []*ui.QuestionExtra{ - { - Verbose: "What instance class should be used for this Database?", - HelpText: "Enter the Database instance class. For more info see https://aws.amazon.com/rds/pricing/.", - Question: &survey.Question{ - Name: "InstanceClass", - Prompt: &survey.Select{ - Message: "Instance Class", - Options: instanceClasses, - FilterMessage: "", - Default: a.Parameters.InstanceClass, + if a.Parameters.InstanceClass == "" { + ui.StartSpinner() + ui.Spinner.Suffix = fmt.Sprintf(" retrieving instance classes for %s", a.Parameters.Engine) + instanceClasses, err := listRDSInstanceClasses(sess, &a.Parameters.Engine, &a.Parameters.Version) + if err != nil { + return err + } + ui.Spinner.Stop() + ui.Spinner.Suffix = "" + questions = append(questions, []*ui.QuestionExtra{ + { + Verbose: "What instance class should be used for this Database?", + HelpText: "Enter the Database instance class. For more info see https://aws.amazon.com/rds/pricing/.", + Question: &survey.Question{ + Name: "InstanceClass", + Prompt: &survey.Select{ + Message: "Instance Class", + Options: instanceClasses, + FilterMessage: "", + Default: a.Parameters.InstanceClass, + }, + Validate: survey.Required, + }, + }, + { + Verbose: "Should this Database be setup in multiple availability zones?", + HelpText: "Multiple availability zones (AZs) provide more resilience in the case of an AZ outage, " + + "but double the cost at AWS. In the case of Aurora databases, enabling multiple availability zones will give you access to a read-replica." + + "For more info see https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.MultiAZ.html.", + WriteTo: &ui.BooleanOptionProxy{Value: &a.Parameters.MultiAZ}, + Question: &survey.Question{ + Prompt: &survey.Select{ + Message: "Multi AZ", + Options: []string{"yes", "no"}, + FilterMessage: "", + Default: ui.BooleanAsYesNo(a.Parameters.MultiAZ), + }, + Validate: survey.Required, }, - Validate: survey.Required, }, - }, - { - Verbose: "Should this Database be setup in multiple availability zones?", - HelpText: "Multiple availability zones (AZs) provide more resilience in the case of an AZ outage, " + - "but double the cost at AWS. In the case of Aurora databases, enabling multiple availability zones will give you access to a read-replica." + - "For more info see https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.MultiAZ.html.", - WriteTo: &ui.BooleanOptionProxy{Value: &a.Parameters.MultiAZ}, - Question: &survey.Question{ - Prompt: &survey.Select{ - Message: "Multi AZ", - Options: []string{"yes", "no"}, - FilterMessage: "", - Default: ui.BooleanAsYesNo(a.Parameters.MultiAZ), + }...) + } + + if !a.Parameters.MultiAZ { + questions = append(questions, []*ui.QuestionExtra{ + { + Verbose: "Should this Database be setup in multiple availability zones?", + HelpText: "Multiple availability zones (AZs) provide more resilience in the case of an AZ outage, " + + "but double the cost at AWS. In the case of Aurora databases, enabling multiple availability zones will give you access to a read-replica." + + "For more info see https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.MultiAZ.html.", + WriteTo: &ui.BooleanOptionProxy{Value: &a.Parameters.MultiAZ}, + Question: &survey.Question{ + Prompt: &survey.Select{ + Message: "Multi AZ", + Options: []string{"yes", "no"}, + FilterMessage: "", + Default: ui.BooleanAsYesNo(a.Parameters.MultiAZ), + }, + Validate: survey.Required, }, - Validate: survey.Required, }, - }, - }...) + }...) + } return ui.AskQuestions(questions, a.Parameters) }