forked from toolshed/abra
		
	
		
			
				
	
	
		
			136 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			136 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package autocomplete
 | 
						|
 | 
						|
import (
 | 
						|
	"sort"
 | 
						|
	"strings"
 | 
						|
 | 
						|
	"coopcloud.tech/abra/pkg/app"
 | 
						|
	appPkg "coopcloud.tech/abra/pkg/app"
 | 
						|
	"coopcloud.tech/abra/pkg/i18n"
 | 
						|
	"coopcloud.tech/abra/pkg/recipe"
 | 
						|
	"github.com/spf13/cobra"
 | 
						|
)
 | 
						|
 | 
						|
// AppNameComplete copletes app names.
 | 
						|
func AppNameComplete() ([]string, cobra.ShellCompDirective) {
 | 
						|
	appFiles, err := app.LoadAppFiles("")
 | 
						|
	if err != nil {
 | 
						|
		err := i18n.G("autocomplete failed: %s", err)
 | 
						|
		return []string{err}, cobra.ShellCompDirectiveError
 | 
						|
	}
 | 
						|
 | 
						|
	var appNames []string
 | 
						|
	for appName := range appFiles {
 | 
						|
		appNames = append(appNames, appName)
 | 
						|
	}
 | 
						|
 | 
						|
	return appNames, cobra.ShellCompDirectiveDefault
 | 
						|
}
 | 
						|
 | 
						|
func ServiceNameComplete(appName string) ([]string, cobra.ShellCompDirective) {
 | 
						|
	serviceNames, err := app.GetAppServiceNames(appName)
 | 
						|
	if err != nil {
 | 
						|
		err := i18n.G("autocomplete failed: %s", err)
 | 
						|
		return []string{err}, cobra.ShellCompDirectiveError
 | 
						|
	}
 | 
						|
 | 
						|
	return serviceNames, cobra.ShellCompDirectiveDefault
 | 
						|
}
 | 
						|
 | 
						|
// RecipeNameComplete completes recipe names.
 | 
						|
func RecipeNameComplete() ([]string, cobra.ShellCompDirective) {
 | 
						|
	catl, err := recipe.ReadRecipeCatalogue(true)
 | 
						|
	if err != nil {
 | 
						|
		err := i18n.G("autocomplete failed: %s", err)
 | 
						|
		return []string{err}, cobra.ShellCompDirectiveError
 | 
						|
	}
 | 
						|
 | 
						|
	localRecipes, err := recipe.GetRecipesLocal()
 | 
						|
	if err != nil && !strings.Contains(err.Error(), "empty") {
 | 
						|
		err := i18n.G("autocomplete failed: %s", err)
 | 
						|
		return []string{err}, cobra.ShellCompDirectiveError
 | 
						|
	}
 | 
						|
 | 
						|
	var recipeNames []string
 | 
						|
	for name := range catl {
 | 
						|
		recipeNames = append(recipeNames, name)
 | 
						|
	}
 | 
						|
 | 
						|
	for _, recipeLocal := range localRecipes {
 | 
						|
		recipeNames = append(recipeNames, recipeLocal)
 | 
						|
	}
 | 
						|
 | 
						|
	return recipeNames, cobra.ShellCompDirectiveDefault
 | 
						|
}
 | 
						|
 | 
						|
// RecipeVersionComplete completes versions for the recipe.
 | 
						|
func RecipeVersionComplete(recipeName string) ([]string, cobra.ShellCompDirective) {
 | 
						|
	catl, err := recipe.ReadRecipeCatalogue(true)
 | 
						|
	if err != nil {
 | 
						|
		err := i18n.G("autocomplete failed: %s", err)
 | 
						|
		return []string{err}, 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 {
 | 
						|
		err := i18n.G("autocomplete failed: %s", err)
 | 
						|
		return []string{err}, 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 {
 | 
						|
		err := i18n.G("autocomplete failed: %s", err)
 | 
						|
		return []string{err}, cobra.ShellCompDirectiveError
 | 
						|
	}
 | 
						|
 | 
						|
	cmdNames, err := appPkg.ReadAbraShCmdNames(app.Recipe.AbraShPath)
 | 
						|
	if err != nil {
 | 
						|
		err := i18n.G("autocomplete failed: %s", err)
 | 
						|
		return []string{err}, 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 {
 | 
						|
		err := i18n.G("autocomplete failed: %s", err)
 | 
						|
		return []string{err}, cobra.ShellCompDirectiveError
 | 
						|
	}
 | 
						|
 | 
						|
	var secretNames []string
 | 
						|
	for name := range config.Secrets {
 | 
						|
		secretNames = append(secretNames, name)
 | 
						|
	}
 | 
						|
 | 
						|
	return secretNames, cobra.ShellCompDirectiveDefault
 | 
						|
}
 |