2021-09-04 23:55:10 +00:00
|
|
|
package internal
|
|
|
|
|
|
|
|
import (
|
|
|
|
"errors"
|
|
|
|
|
2021-09-05 21:17:35 +00:00
|
|
|
"coopcloud.tech/abra/pkg/app"
|
2021-10-22 06:21:46 +00:00
|
|
|
"coopcloud.tech/abra/pkg/catalogue"
|
2021-09-05 20:04:48 +00:00
|
|
|
"coopcloud.tech/abra/pkg/config"
|
2021-09-05 19:37:03 +00:00
|
|
|
"coopcloud.tech/abra/pkg/recipe"
|
2021-10-22 06:21:46 +00:00
|
|
|
"github.com/AlecAivazis/survey/v2"
|
2021-09-04 23:55:10 +00:00
|
|
|
"github.com/sirupsen/logrus"
|
|
|
|
"github.com/urfave/cli/v2"
|
|
|
|
)
|
|
|
|
|
2021-09-05 22:45:13 +00:00
|
|
|
// ValidateRecipe ensures the recipe arg is valid.
|
2021-09-05 23:41:16 +00:00
|
|
|
func ValidateRecipe(c *cli.Context) recipe.Recipe {
|
2021-09-04 23:55:10 +00:00
|
|
|
recipeName := c.Args().First()
|
|
|
|
|
|
|
|
if recipeName == "" {
|
|
|
|
ShowSubcommandHelpAndError(c, errors.New("no recipe provided"))
|
|
|
|
}
|
|
|
|
|
2021-09-05 23:41:16 +00:00
|
|
|
recipe, err := recipe.Get(recipeName)
|
|
|
|
if err != nil {
|
2021-09-04 23:55:10 +00:00
|
|
|
logrus.Fatal(err)
|
|
|
|
}
|
|
|
|
|
2021-09-10 22:54:02 +00:00
|
|
|
logrus.Debugf("validated '%s' as recipe argument", recipeName)
|
|
|
|
|
2021-09-05 23:41:16 +00:00
|
|
|
return recipe
|
2021-09-04 23:55:10 +00:00
|
|
|
}
|
2021-09-05 20:04:48 +00:00
|
|
|
|
2021-10-22 06:21:46 +00:00
|
|
|
// ValidateRecipeWithPrompt ensures a recipe argument is present before
|
|
|
|
// validating, asking for input if required.
|
|
|
|
func ValidateRecipeWithPrompt(c *cli.Context) recipe.Recipe {
|
|
|
|
recipeName := c.Args().First()
|
|
|
|
|
|
|
|
if recipeName == "" && !NoInput {
|
|
|
|
catl, err := catalogue.ReadRecipeCatalogue()
|
|
|
|
if err != nil {
|
|
|
|
logrus.Fatal(err)
|
|
|
|
}
|
|
|
|
var recipes []string
|
|
|
|
for name := range catl {
|
|
|
|
recipes = append(recipes, name)
|
|
|
|
}
|
|
|
|
prompt := &survey.Select{
|
|
|
|
Message: "Select recipe",
|
|
|
|
Options: recipes,
|
|
|
|
}
|
|
|
|
if err := survey.AskOne(prompt, &recipeName); err != nil {
|
|
|
|
logrus.Fatal(err)
|
|
|
|
}
|
2021-11-02 12:33:46 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if recipeName == "" {
|
2021-10-22 06:21:46 +00:00
|
|
|
ShowSubcommandHelpAndError(c, errors.New("no recipe provided"))
|
|
|
|
}
|
|
|
|
|
|
|
|
recipe, err := recipe.Get(recipeName)
|
|
|
|
if err != nil {
|
|
|
|
logrus.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
logrus.Debugf("validated '%s' as recipe argument", recipeName)
|
|
|
|
|
|
|
|
return recipe
|
|
|
|
}
|
|
|
|
|
2021-09-05 22:26:45 +00:00
|
|
|
// ValidateApp ensures the app name arg is valid.
|
2021-09-05 21:17:35 +00:00
|
|
|
func ValidateApp(c *cli.Context) config.App {
|
2021-09-05 20:04:48 +00:00
|
|
|
appName := c.Args().First()
|
|
|
|
|
|
|
|
if appName == "" {
|
|
|
|
ShowSubcommandHelpAndError(c, errors.New("no app provided"))
|
|
|
|
}
|
|
|
|
|
2021-09-05 21:17:35 +00:00
|
|
|
app, err := app.Get(appName)
|
2021-09-05 20:04:48 +00:00
|
|
|
if err != nil {
|
|
|
|
logrus.Fatal(err)
|
|
|
|
}
|
|
|
|
|
2021-10-10 22:34:23 +00:00
|
|
|
if err := recipe.EnsureExists(app.Type); err != nil {
|
|
|
|
logrus.Fatal(err)
|
|
|
|
}
|
|
|
|
|
2021-09-10 22:54:02 +00:00
|
|
|
logrus.Debugf("validated '%s' as app argument", appName)
|
|
|
|
|
2021-09-05 21:17:35 +00:00
|
|
|
return app
|
2021-09-05 20:04:48 +00:00
|
|
|
}
|
2021-09-10 12:49:25 +00:00
|
|
|
|
|
|
|
// ValidateDomain ensures the domain name arg is valid.
|
2021-10-25 07:02:24 +00:00
|
|
|
func ValidateDomain(c *cli.Context) (string, error) {
|
2021-09-10 12:49:25 +00:00
|
|
|
domainName := c.Args().First()
|
|
|
|
|
2021-10-25 07:02:24 +00:00
|
|
|
if domainName == "" && !NoInput {
|
|
|
|
prompt := &survey.Input{
|
|
|
|
Message: "Specify a domain name",
|
|
|
|
Default: "example.com",
|
|
|
|
}
|
|
|
|
if err := survey.AskOne(prompt, &domainName); err != nil {
|
|
|
|
return domainName, err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-09-10 12:49:25 +00:00
|
|
|
if domainName == "" {
|
|
|
|
ShowSubcommandHelpAndError(c, errors.New("no domain provided"))
|
|
|
|
}
|
|
|
|
|
2021-09-10 22:54:02 +00:00
|
|
|
logrus.Debugf("validated '%s' as domain argument", domainName)
|
|
|
|
|
2021-10-25 07:02:24 +00:00
|
|
|
return domainName, nil
|
2021-09-10 12:49:25 +00:00
|
|
|
}
|