Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(database): Skip questions when values provided via flags #86

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
171 changes: 99 additions & 72 deletions stacks/database.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand All @@ -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)
}

Expand Down
Loading