120 lines
3.1 KiB
Go
120 lines
3.1 KiB
Go
package autocomplete
|
|
|
|
import (
|
|
"sort"
|
|
|
|
"coopcloud.tech/abra/pkg/app"
|
|
appPkg "coopcloud.tech/abra/pkg/app"
|
|
"coopcloud.tech/abra/pkg/log"
|
|
"coopcloud.tech/abra/pkg/recipe"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
// AppNameComplete copletes app names.
|
|
func AppNameComplete() ([]string, cobra.ShellCompDirective) {
|
|
appNames, err := app.GetAppNames()
|
|
if err != nil {
|
|
log.Debugf("autocomplete failed: %s", err)
|
|
return nil, cobra.ShellCompDirectiveError
|
|
}
|
|
|
|
return appNames, cobra.ShellCompDirectiveDefault
|
|
}
|
|
|
|
func ServiceNameComplete(appName string) ([]string, cobra.ShellCompDirective) {
|
|
serviceNames, err := app.GetAppServiceNames(appName)
|
|
if err != nil {
|
|
log.Debugf("autocomplete failed: %s", err)
|
|
return nil, cobra.ShellCompDirectiveError
|
|
}
|
|
|
|
return serviceNames, cobra.ShellCompDirectiveDefault
|
|
}
|
|
|
|
// RecipeNameComplete completes recipe names.
|
|
func RecipeNameComplete() ([]string, cobra.ShellCompDirective) {
|
|
catl, err := recipe.ReadRecipeCatalogue(false)
|
|
if err != nil {
|
|
log.Debugf("autocomplete failed: %s", err)
|
|
return nil, cobra.ShellCompDirectiveError
|
|
}
|
|
|
|
var recipeNames []string
|
|
for name := range catl {
|
|
recipeNames = append(recipeNames, name)
|
|
}
|
|
|
|
return recipeNames, cobra.ShellCompDirectiveDefault
|
|
}
|
|
|
|
// RecipeVersionComplete completes versions for the recipe.
|
|
func RecipeVersionComplete(recipeName string) ([]string, cobra.ShellCompDirective) {
|
|
catl, err := recipe.ReadRecipeCatalogue(false)
|
|
if err != nil {
|
|
log.Debugf("autocomplete failed: %s", err)
|
|
return nil, cobra.ShellCompDirectiveError
|
|
}
|
|
|
|
var recipeVersions []string
|
|
for _, v := range catl[recipeName].Versions {
|
|
for v2 := range v {
|
|
recipeVersions = append(recipeVersions, v2)
|
|
}
|
|
}
|
|
|
|
return recipeVersions, cobra.ShellCompDirectiveDefault
|
|
}
|
|
|
|
// ServerNameComplete completes server names.
|
|
func ServerNameComplete() ([]string, cobra.ShellCompDirective) {
|
|
files, err := app.LoadAppFiles("")
|
|
if err != nil {
|
|
log.Debugf("autocomplete failed: %s", err)
|
|
return nil, cobra.ShellCompDirectiveError
|
|
}
|
|
|
|
var serverNames []string
|
|
for _, appFile := range files {
|
|
serverNames = append(serverNames, appFile.Server)
|
|
}
|
|
|
|
return serverNames, cobra.ShellCompDirectiveDefault
|
|
}
|
|
|
|
// CommandNameComplete completes recipe commands.
|
|
func CommandNameComplete(appName string) ([]string, cobra.ShellCompDirective) {
|
|
app, err := app.Get(appName)
|
|
if err != nil {
|
|
log.Debugf("autocomplete failed: %s", err)
|
|
return nil, cobra.ShellCompDirectiveError
|
|
}
|
|
|
|
cmdNames, err := appPkg.ReadAbraShCmdNames(app.Recipe.AbraShPath)
|
|
if err != nil {
|
|
log.Debugf("autocomplete failed: %s", err)
|
|
return nil, cobra.ShellCompDirectiveError
|
|
}
|
|
|
|
sort.Strings(cmdNames)
|
|
|
|
return cmdNames, cobra.ShellCompDirectiveDefault
|
|
}
|
|
|
|
// SecretsComplete completes recipe secrets.
|
|
func SecretComplete(recipeName string) ([]string, cobra.ShellCompDirective) {
|
|
r := recipe.Get(recipeName)
|
|
|
|
config, err := r.GetComposeConfig(nil)
|
|
if err != nil {
|
|
log.Debugf("autocomplete failed: %s", err)
|
|
return nil, cobra.ShellCompDirectiveError
|
|
}
|
|
|
|
var secretNames []string
|
|
for name := range config.Secrets {
|
|
secretNames = append(secretNames, name)
|
|
}
|
|
|
|
return secretNames, cobra.ShellCompDirectiveDefault
|
|
}
|