refactor: use app getting instead of boilerplate
continuous-integration/drone/push Build is failing
Details
continuous-integration/drone/push Build is failing
Details
This commit is contained in:
parent
48bcc9cb36
commit
d4333c2dc0
|
@ -31,23 +31,13 @@ var appBackupCommand = &cli.Command{
|
||||||
Flags: []cli.Flag{backupAllServicesFlag},
|
Flags: []cli.Flag{backupAllServicesFlag},
|
||||||
ArgsUsage: "<service>",
|
ArgsUsage: "<service>",
|
||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
appName := internal.ValidateAppNameArg(c)
|
app := internal.ValidateApp(c)
|
||||||
|
|
||||||
if c.Args().Get(1) != "" && backupAllServices {
|
if c.Args().Get(1) != "" && backupAllServices {
|
||||||
internal.ShowSubcommandHelpAndError(c, errors.New("cannot use '<service>' and '--all' together"))
|
internal.ShowSubcommandHelpAndError(c, errors.New("cannot use '<service>' and '--all' together"))
|
||||||
}
|
}
|
||||||
|
|
||||||
appFiles, err := config.LoadAppFiles("")
|
abraSh := path.Join(config.ABRA_DIR, "apps", app.Type, "abra.sh")
|
||||||
if err != nil {
|
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
appEnv, err := config.GetApp(appFiles, appName)
|
|
||||||
if err != nil {
|
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
abraSh := path.Join(config.ABRA_DIR, "apps", appEnv.Type, "abra.sh")
|
|
||||||
if _, err := os.Stat(abraSh); err != nil {
|
if _, err := os.Stat(abraSh); err != nil {
|
||||||
if os.IsNotExist(err) {
|
if os.IsNotExist(err) {
|
||||||
logrus.Fatalf("'%s' does not exist?", abraSh)
|
logrus.Fatalf("'%s' does not exist?", abraSh)
|
||||||
|
@ -71,7 +61,7 @@ var appBackupCommand = &cli.Command{
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
if !strings.Contains(string(bytes), execCmd) {
|
if !strings.Contains(string(bytes), execCmd) {
|
||||||
logrus.Fatalf("%s doesn't have a '%s' function", appEnv.Type, execCmd)
|
logrus.Fatalf("%s doesn't have a '%s' function", app.Type, execCmd)
|
||||||
}
|
}
|
||||||
|
|
||||||
sourceAndExec := fmt.Sprintf("%s; %s", sourceCmd, execCmd)
|
sourceAndExec := fmt.Sprintf("%s; %s", sourceCmd, execCmd)
|
||||||
|
|
|
@ -17,19 +17,9 @@ var appCheckCommand = &cli.Command{
|
||||||
Aliases: []string{"c"},
|
Aliases: []string{"c"},
|
||||||
ArgsUsage: "<service>",
|
ArgsUsage: "<service>",
|
||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
appName := internal.ValidateAppNameArg(c)
|
app := internal.ValidateApp(c)
|
||||||
|
|
||||||
appFiles, err := config.LoadAppFiles("")
|
envSamplePath := path.Join(config.ABRA_DIR, "apps", app.Type, ".env.sample")
|
||||||
if err != nil {
|
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
appEnv, err := config.GetApp(appFiles, appName)
|
|
||||||
if err != nil {
|
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
envSamplePath := path.Join(config.ABRA_DIR, "apps", appEnv.Type, ".env.sample")
|
|
||||||
if _, err := os.Stat(envSamplePath); err != nil {
|
if _, err := os.Stat(envSamplePath); err != nil {
|
||||||
if os.IsNotExist(err) {
|
if os.IsNotExist(err) {
|
||||||
logrus.Fatalf("'%s' does not exist?", envSamplePath)
|
logrus.Fatalf("'%s' does not exist?", envSamplePath)
|
||||||
|
@ -44,15 +34,14 @@ var appCheckCommand = &cli.Command{
|
||||||
|
|
||||||
var missing []string
|
var missing []string
|
||||||
for k := range envSample {
|
for k := range envSample {
|
||||||
if _, ok := appEnv.Env[k]; !ok {
|
if _, ok := app.Env[k]; !ok {
|
||||||
missing = append(missing, k)
|
missing = append(missing, k)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(missing) > 0 {
|
if len(missing) > 0 {
|
||||||
path := appFiles[appName].Path
|
|
||||||
missingEnvVars := strings.Join(missing, ", ")
|
missingEnvVars := strings.Join(missing, ", ")
|
||||||
logrus.Fatalf("%s is missing %s", path, missingEnvVars)
|
logrus.Fatalf("%s is missing %s", app.Path, missingEnvVars)
|
||||||
}
|
}
|
||||||
|
|
||||||
logrus.Info("All necessary environment variables defined")
|
logrus.Info("All necessary environment variables defined")
|
||||||
|
|
|
@ -5,7 +5,6 @@ import (
|
||||||
"os/exec"
|
"os/exec"
|
||||||
|
|
||||||
"coopcloud.tech/abra/cli/internal"
|
"coopcloud.tech/abra/cli/internal"
|
||||||
"coopcloud.tech/abra/pkg/config"
|
|
||||||
"github.com/AlecAivazis/survey/v2"
|
"github.com/AlecAivazis/survey/v2"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
"github.com/urfave/cli/v2"
|
"github.com/urfave/cli/v2"
|
||||||
|
@ -16,16 +15,7 @@ var appConfigCommand = &cli.Command{
|
||||||
Aliases: []string{"c"},
|
Aliases: []string{"c"},
|
||||||
Usage: "Edit app config",
|
Usage: "Edit app config",
|
||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
appName := internal.ValidateAppNameArg(c)
|
app := internal.ValidateApp(c)
|
||||||
|
|
||||||
appFiles, err := config.LoadAppFiles("")
|
|
||||||
if err != nil {
|
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, ok := appFiles[appName]; !ok {
|
|
||||||
logrus.Fatalf("'%s' doesn't exist?", appName)
|
|
||||||
}
|
|
||||||
|
|
||||||
ed, ok := os.LookupEnv("EDITOR")
|
ed, ok := os.LookupEnv("EDITOR")
|
||||||
if !ok {
|
if !ok {
|
||||||
|
@ -38,7 +28,7 @@ var appConfigCommand = &cli.Command{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd := exec.Command(ed, appFiles[appName].Path)
|
cmd := exec.Command(ed, app.Path)
|
||||||
cmd.Stdin = os.Stdin
|
cmd.Stdin = os.Stdin
|
||||||
cmd.Stdout = os.Stdout
|
cmd.Stdout = os.Stdout
|
||||||
cmd.Stderr = os.Stderr
|
cmd.Stderr = os.Stderr
|
||||||
|
|
|
@ -22,7 +22,7 @@ var appCpCommand = &cli.Command{
|
||||||
ArgsUsage: "<src> <dst>",
|
ArgsUsage: "<src> <dst>",
|
||||||
Usage: "Copy files to/from a running app service",
|
Usage: "Copy files to/from a running app service",
|
||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
appName := internal.ValidateAppNameArg(c)
|
app := internal.ValidateApp(c)
|
||||||
|
|
||||||
src := c.Args().Get(1)
|
src := c.Args().Get(1)
|
||||||
dst := c.Args().Get(2)
|
dst := c.Args().Get(2)
|
||||||
|
@ -67,14 +67,13 @@ var appCpCommand = &cli.Command{
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
appEnv, err := config.GetApp(appFiles, appName)
|
appEnv, err := config.GetApp(appFiles, app.Name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
server := appFiles[appName].Server
|
cl, err := client.New(app.Server)
|
||||||
cl, err := client.New(server)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,45 +16,34 @@ var appDeployCommand = &cli.Command{
|
||||||
Aliases: []string{"d"},
|
Aliases: []string{"d"},
|
||||||
Usage: "Deploy an app",
|
Usage: "Deploy an app",
|
||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
appName := internal.ValidateAppNameArg(c)
|
app := internal.ValidateApp(c)
|
||||||
|
|
||||||
appFiles, err := config.LoadAppFiles("")
|
cl, err := client.New(app.Server)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
appEnv, err := config.GetApp(appFiles, appName)
|
abraShPath := fmt.Sprintf("%s/%s/%s", config.APPS_DIR, app.Type, "abra.sh")
|
||||||
if err != nil {
|
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
server := appFiles[appName].Server
|
|
||||||
cl, err := client.New(server)
|
|
||||||
if err != nil {
|
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
abraShPath := fmt.Sprintf("%s/%s/%s", config.APPS_DIR, appEnv.Type, "abra.sh")
|
|
||||||
abraShEnv, err := config.ReadAbraShEnvVars(abraShPath)
|
abraShEnv, err := config.ReadAbraShEnvVars(abraShPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
for k, v := range abraShEnv {
|
for k, v := range abraShEnv {
|
||||||
appEnv.Env[k] = v
|
app.Env[k] = v
|
||||||
}
|
}
|
||||||
appEnv.Env["STACK_NAME"] = appEnv.StackName()
|
app.Env["STACK_NAME"] = app.StackName()
|
||||||
|
|
||||||
composeFiles, err := config.GetAppComposeFiles(appEnv.Type, appEnv.Env)
|
composeFiles, err := config.GetAppComposeFiles(app.Type, app.Env)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
deployOpts := stack.Deploy{
|
deployOpts := stack.Deploy{
|
||||||
Composefiles: composeFiles,
|
Composefiles: composeFiles,
|
||||||
Namespace: appEnv.StackName(),
|
Namespace: app.StackName(),
|
||||||
Prune: false,
|
Prune: false,
|
||||||
ResolveImage: stack.ResolveImageAlways,
|
ResolveImage: stack.ResolveImageAlways,
|
||||||
}
|
}
|
||||||
compose, err := config.GetAppComposeConfig(appName, deployOpts, appEnv.Env)
|
compose, err := config.GetAppComposeConfig(app.Name, deployOpts, app.Env)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -82,7 +82,7 @@ can take some time.
|
||||||
var tableRow []string
|
var tableRow []string
|
||||||
if app.Type == appType || appType == "" {
|
if app.Type == appType || appType == "" {
|
||||||
// If type flag is set, check for it, if not, Type == ""
|
// If type flag is set, check for it, if not, Type == ""
|
||||||
tableRow = []string{app.File.Server, app.Type, app.Domain}
|
tableRow = []string{app.Server, app.Type, app.Domain}
|
||||||
if status {
|
if status {
|
||||||
if status, ok := statuses[app.StackName()]; ok {
|
if status, ok := statuses[app.StackName()]; ok {
|
||||||
tableRow = append(tableRow, status)
|
tableRow = append(tableRow, status)
|
||||||
|
|
|
@ -9,7 +9,6 @@ import (
|
||||||
|
|
||||||
"coopcloud.tech/abra/cli/internal"
|
"coopcloud.tech/abra/cli/internal"
|
||||||
"coopcloud.tech/abra/pkg/client"
|
"coopcloud.tech/abra/pkg/client"
|
||||||
"coopcloud.tech/abra/pkg/config"
|
|
||||||
"github.com/docker/docker/api/types"
|
"github.com/docker/docker/api/types"
|
||||||
"github.com/docker/docker/api/types/filters"
|
"github.com/docker/docker/api/types/filters"
|
||||||
dockerClient "github.com/docker/docker/client"
|
dockerClient "github.com/docker/docker/client"
|
||||||
|
@ -63,31 +62,20 @@ var appLogsCommand = &cli.Command{
|
||||||
ArgsUsage: "[<service>]",
|
ArgsUsage: "[<service>]",
|
||||||
Usage: "Tail app logs",
|
Usage: "Tail app logs",
|
||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
appName := internal.ValidateAppNameArg(c)
|
app := internal.ValidateApp(c)
|
||||||
|
|
||||||
appFiles, err := config.LoadAppFiles("")
|
|
||||||
if err != nil {
|
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
appEnv, err := config.GetApp(appFiles, appName)
|
|
||||||
if err != nil {
|
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
server := appFiles[appName].Server
|
cl, err := client.New(app.Server)
|
||||||
cl, err := client.New(server)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
serviceName := c.Args().Get(1)
|
serviceName := c.Args().Get(1)
|
||||||
if serviceName == "" {
|
if serviceName == "" {
|
||||||
stackLogs(appEnv.StackName(), cl)
|
stackLogs(app.StackName(), cl)
|
||||||
}
|
}
|
||||||
|
|
||||||
service := fmt.Sprintf("%s_%s", appEnv.StackName(), serviceName)
|
service := fmt.Sprintf("%s_%s", app.StackName(), serviceName)
|
||||||
filters := filters.NewArgs()
|
filters := filters.NewArgs()
|
||||||
filters.Add("name", service)
|
filters.Add("name", service)
|
||||||
serviceOpts := types.ServiceListOptions{Filters: filters}
|
serviceOpts := types.ServiceListOptions{Filters: filters}
|
||||||
|
|
|
@ -7,7 +7,6 @@ import (
|
||||||
abraFormatter "coopcloud.tech/abra/cli/formatter"
|
abraFormatter "coopcloud.tech/abra/cli/formatter"
|
||||||
"coopcloud.tech/abra/cli/internal"
|
"coopcloud.tech/abra/cli/internal"
|
||||||
"coopcloud.tech/abra/pkg/client"
|
"coopcloud.tech/abra/pkg/client"
|
||||||
"coopcloud.tech/abra/pkg/config"
|
|
||||||
"github.com/docker/cli/cli/command/formatter"
|
"github.com/docker/cli/cli/command/formatter"
|
||||||
"github.com/docker/docker/api/types"
|
"github.com/docker/docker/api/types"
|
||||||
"github.com/docker/docker/api/types/filters"
|
"github.com/docker/docker/api/types/filters"
|
||||||
|
@ -20,27 +19,16 @@ var appPsCommand = &cli.Command{
|
||||||
Usage: "Check app status",
|
Usage: "Check app status",
|
||||||
Aliases: []string{"p"},
|
Aliases: []string{"p"},
|
||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
appName := internal.ValidateAppNameArg(c)
|
app := internal.ValidateApp(c)
|
||||||
|
|
||||||
appFiles, err := config.LoadAppFiles("")
|
|
||||||
if err != nil {
|
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
server := appFiles[appName].Server
|
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
cl, err := client.New(server)
|
cl, err := client.New(app.Server)
|
||||||
if err != nil {
|
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
appEnv, err := config.GetApp(appFiles, appName)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
filters := filters.NewArgs()
|
filters := filters.NewArgs()
|
||||||
filters.Add("name", appEnv.StackName())
|
filters.Add("name", app.StackName())
|
||||||
|
|
||||||
containers, err := cl.ContainerList(ctx, types.ContainerListOptions{Filters: filters})
|
containers, err := cl.ContainerList(ctx, types.ContainerListOptions{Filters: filters})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -34,12 +34,12 @@ var appRemoveCommand = &cli.Command{
|
||||||
internal.ForceFlag,
|
internal.ForceFlag,
|
||||||
},
|
},
|
||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
appName := internal.ValidateAppNameArg(c)
|
app := internal.ValidateApp(c)
|
||||||
|
|
||||||
if !internal.Force {
|
if !internal.Force {
|
||||||
response := false
|
response := false
|
||||||
prompt := &survey.Confirm{
|
prompt := &survey.Confirm{
|
||||||
Message: fmt.Sprintf("About to delete %s, are you sure", appName),
|
Message: fmt.Sprintf("About to delete %s, are you sure", app.Name),
|
||||||
}
|
}
|
||||||
if err := survey.AskOne(prompt, &response); err != nil {
|
if err := survey.AskOne(prompt, &response); err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
|
@ -54,10 +54,8 @@ var appRemoveCommand = &cli.Command{
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
appPath := appFiles[appName].Path
|
|
||||||
server := appFiles[appName].Server
|
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
cl, err := client.New(server)
|
cl, err := client.New(app.Server)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
|
@ -67,13 +65,13 @@ var appRemoveCommand = &cli.Command{
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
if statuses[appName] == "deployed" {
|
if statuses[app.Name] == "deployed" {
|
||||||
logrus.Fatalf("'%s' is still deployed. Run \"abra app %s undeploy\" or pass --force", appName, appName)
|
logrus.Fatalf("'%s' is still deployed. Run \"abra app %s undeploy\" or pass --force", app.Name, app.Name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fs := filters.NewArgs()
|
fs := filters.NewArgs()
|
||||||
fs.Add("name", appName)
|
fs.Add("name", app.Name)
|
||||||
secretList, err := cl.SecretList(ctx, types.SecretListOptions{Filters: fs})
|
secretList, err := cl.SecretList(ctx, types.SecretListOptions{Filters: fs})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
|
@ -149,11 +147,11 @@ var appRemoveCommand = &cli.Command{
|
||||||
logrus.Info("No volumes to remove")
|
logrus.Info("No volumes to remove")
|
||||||
}
|
}
|
||||||
|
|
||||||
err = os.Remove(appPath)
|
err = os.Remove(app.Path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
logrus.Info(fmt.Sprintf("File: %s removed", appPath))
|
logrus.Info(fmt.Sprintf("File: %s removed", app.Path))
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
|
|
|
@ -31,23 +31,13 @@ var appRestoreCommand = &cli.Command{
|
||||||
Flags: []cli.Flag{restoreAllServicesFlag},
|
Flags: []cli.Flag{restoreAllServicesFlag},
|
||||||
ArgsUsage: "<service> [<backup file>]",
|
ArgsUsage: "<service> [<backup file>]",
|
||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
appName := internal.ValidateAppNameArg(c)
|
app := internal.ValidateApp(c)
|
||||||
|
|
||||||
if c.Args().Len() > 1 && restoreAllServices {
|
if c.Args().Len() > 1 && restoreAllServices {
|
||||||
internal.ShowSubcommandHelpAndError(c, errors.New("cannot use <service>/<backup file> and '--all' together"))
|
internal.ShowSubcommandHelpAndError(c, errors.New("cannot use <service>/<backup file> and '--all' together"))
|
||||||
}
|
}
|
||||||
|
|
||||||
appFiles, err := config.LoadAppFiles("")
|
abraSh := path.Join(config.ABRA_DIR, "apps", app.Type, "abra.sh")
|
||||||
if err != nil {
|
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
appEnv, err := config.GetApp(appFiles, appName)
|
|
||||||
if err != nil {
|
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
abraSh := path.Join(config.ABRA_DIR, "apps", appEnv.Type, "abra.sh")
|
|
||||||
if _, err := os.Stat(abraSh); err != nil {
|
if _, err := os.Stat(abraSh); err != nil {
|
||||||
if os.IsNotExist(err) {
|
if os.IsNotExist(err) {
|
||||||
logrus.Fatalf("'%s' does not exist?", abraSh)
|
logrus.Fatalf("'%s' does not exist?", abraSh)
|
||||||
|
@ -70,7 +60,7 @@ var appRestoreCommand = &cli.Command{
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
if !strings.Contains(string(bytes), execCmd) {
|
if !strings.Contains(string(bytes), execCmd) {
|
||||||
logrus.Fatalf("%s doesn't have a '%s' function", appEnv.Type, execCmd)
|
logrus.Fatalf("%s doesn't have a '%s' function", app.Type, execCmd)
|
||||||
}
|
}
|
||||||
|
|
||||||
backupFile := c.Args().Get(2)
|
backupFile := c.Args().Get(2)
|
||||||
|
|
|
@ -8,7 +8,6 @@ import (
|
||||||
"coopcloud.tech/abra/cli/internal"
|
"coopcloud.tech/abra/cli/internal"
|
||||||
"coopcloud.tech/abra/pkg/client"
|
"coopcloud.tech/abra/pkg/client"
|
||||||
"coopcloud.tech/abra/pkg/client/container"
|
"coopcloud.tech/abra/pkg/client/container"
|
||||||
"coopcloud.tech/abra/pkg/config"
|
|
||||||
"github.com/docker/cli/cli/command"
|
"github.com/docker/cli/cli/command"
|
||||||
"github.com/docker/docker/api/types"
|
"github.com/docker/docker/api/types"
|
||||||
"github.com/docker/docker/api/types/filters"
|
"github.com/docker/docker/api/types/filters"
|
||||||
|
@ -40,32 +39,21 @@ var appRunCommand = &cli.Command{
|
||||||
ArgsUsage: "<service> <args>...",
|
ArgsUsage: "<service> <args>...",
|
||||||
Usage: "Run a command in a service container",
|
Usage: "Run a command in a service container",
|
||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
appName := internal.ValidateAppNameArg(c)
|
app := internal.ValidateApp(c)
|
||||||
|
|
||||||
if c.Args().Len() < 2 {
|
if c.Args().Len() < 2 {
|
||||||
internal.ShowSubcommandHelpAndError(c, errors.New("no <service> provided"))
|
internal.ShowSubcommandHelpAndError(c, errors.New("no <service> provided"))
|
||||||
}
|
}
|
||||||
|
|
||||||
appFiles, err := config.LoadAppFiles("")
|
|
||||||
if err != nil {
|
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
server := appFiles[appName].Server
|
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
cl, err := client.New(server)
|
cl, err := client.New(app.Server)
|
||||||
if err != nil {
|
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
appEnv, err := config.GetApp(appFiles, appName)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
serviceName := c.Args().Get(1)
|
serviceName := c.Args().Get(1)
|
||||||
filters := filters.NewArgs()
|
filters := filters.NewArgs()
|
||||||
filters.Add("name", fmt.Sprintf("%s_%s", appEnv.StackName(), serviceName))
|
filters.Add("name", fmt.Sprintf("%s_%s", app.StackName(), serviceName))
|
||||||
|
|
||||||
containers, err := cl.ContainerList(ctx, types.ContainerListOptions{Filters: filters})
|
containers, err := cl.ContainerList(ctx, types.ContainerListOptions{Filters: filters})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -9,7 +9,6 @@ import (
|
||||||
abraFormatter "coopcloud.tech/abra/cli/formatter"
|
abraFormatter "coopcloud.tech/abra/cli/formatter"
|
||||||
"coopcloud.tech/abra/cli/internal"
|
"coopcloud.tech/abra/cli/internal"
|
||||||
"coopcloud.tech/abra/pkg/client"
|
"coopcloud.tech/abra/pkg/client"
|
||||||
"coopcloud.tech/abra/pkg/config"
|
|
||||||
"coopcloud.tech/abra/pkg/secret"
|
"coopcloud.tech/abra/pkg/secret"
|
||||||
"github.com/docker/docker/api/types"
|
"github.com/docker/docker/api/types"
|
||||||
"github.com/docker/docker/api/types/filters"
|
"github.com/docker/docker/api/types/filters"
|
||||||
|
@ -32,25 +31,14 @@ var appSecretGenerateCommand = &cli.Command{
|
||||||
ArgsUsage: "<secret> <version>",
|
ArgsUsage: "<secret> <version>",
|
||||||
Flags: []cli.Flag{allSecretsFlag, internal.PassFlag},
|
Flags: []cli.Flag{allSecretsFlag, internal.PassFlag},
|
||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
appName := internal.ValidateAppNameArg(c)
|
app := internal.ValidateApp(c)
|
||||||
|
|
||||||
if c.Args().Get(1) != "" && allSecrets {
|
if c.Args().Get(1) != "" && allSecrets {
|
||||||
internal.ShowSubcommandHelpAndError(c, errors.New("cannot use '<secret> <version>' and '--all' together"))
|
internal.ShowSubcommandHelpAndError(c, errors.New("cannot use '<secret> <version>' and '--all' together"))
|
||||||
}
|
}
|
||||||
|
|
||||||
appFiles, err := config.LoadAppFiles("")
|
|
||||||
if err != nil {
|
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
appEnv, err := config.GetApp(appFiles, appName)
|
|
||||||
if err != nil {
|
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
secretsToCreate := make(map[string]string)
|
secretsToCreate := make(map[string]string)
|
||||||
server := appFiles[appName].Server
|
secretEnvVars := secret.ReadSecretEnvVars(app.Env)
|
||||||
secretEnvVars := secret.ReadSecretEnvVars(appEnv.Env)
|
|
||||||
if allSecrets {
|
if allSecrets {
|
||||||
secretsToCreate = secretEnvVars
|
secretsToCreate = secretEnvVars
|
||||||
} else {
|
} else {
|
||||||
|
@ -64,14 +52,14 @@ var appSecretGenerateCommand = &cli.Command{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
secretVals, err := secret.GenerateSecrets(secretsToCreate, appEnv.StackName(), server)
|
secretVals, err := secret.GenerateSecrets(secretsToCreate, app.StackName(), app.Server)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if internal.Pass {
|
if internal.Pass {
|
||||||
for name, data := range secretVals {
|
for name, data := range secretVals {
|
||||||
if err := secret.PassInsertSecret(data, name, appEnv.StackName(), server); err != nil {
|
if err := secret.PassInsertSecret(data, name, app.StackName(), app.Server); err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -88,7 +76,7 @@ var appSecretInsertCommand = &cli.Command{
|
||||||
Flags: []cli.Flag{internal.PassFlag},
|
Flags: []cli.Flag{internal.PassFlag},
|
||||||
ArgsUsage: "<secret> <version> <data>",
|
ArgsUsage: "<secret> <version> <data>",
|
||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
appName := internal.ValidateAppNameArg(c)
|
app := internal.ValidateApp(c)
|
||||||
|
|
||||||
if c.Args().Len() != 4 {
|
if c.Args().Len() != 4 {
|
||||||
internal.ShowSubcommandHelpAndError(c, errors.New("missing arguments?"))
|
internal.ShowSubcommandHelpAndError(c, errors.New("missing arguments?"))
|
||||||
|
@ -98,24 +86,13 @@ var appSecretInsertCommand = &cli.Command{
|
||||||
version := c.Args().Get(2)
|
version := c.Args().Get(2)
|
||||||
data := c.Args().Get(3)
|
data := c.Args().Get(3)
|
||||||
|
|
||||||
appFiles, err := config.LoadAppFiles("")
|
secretName := fmt.Sprintf("%s_%s_%s", app.StackName(), name, version)
|
||||||
if err != nil {
|
if err := client.StoreSecret(secretName, data, app.Server); err != nil {
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
appEnv, err := config.GetApp(appFiles, appName)
|
|
||||||
if err != nil {
|
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
server := appFiles[appName].Server
|
|
||||||
secretName := fmt.Sprintf("%s_%s_%s", appEnv.StackName(), name, version)
|
|
||||||
if err := client.StoreSecret(secretName, data, server); err != nil {
|
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if internal.Pass {
|
if internal.Pass {
|
||||||
if err := secret.PassInsertSecret(data, name, appEnv.StackName(), server); err != nil {
|
if err := secret.PassInsertSecret(data, name, app.StackName(), app.Server); err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -131,7 +108,7 @@ var appSecretRmCommand = &cli.Command{
|
||||||
Flags: []cli.Flag{allSecretsFlag, internal.PassFlag},
|
Flags: []cli.Flag{allSecretsFlag, internal.PassFlag},
|
||||||
ArgsUsage: "<secret>",
|
ArgsUsage: "<secret>",
|
||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
appName := internal.ValidateAppNameArg(c)
|
app := internal.ValidateApp(c)
|
||||||
|
|
||||||
if c.Args().Get(1) != "" && allSecrets {
|
if c.Args().Get(1) != "" && allSecrets {
|
||||||
internal.ShowSubcommandHelpAndError(c, errors.New("cannot use '<secret>' and '--all' together"))
|
internal.ShowSubcommandHelpAndError(c, errors.New("cannot use '<secret>' and '--all' together"))
|
||||||
|
@ -141,25 +118,14 @@ var appSecretRmCommand = &cli.Command{
|
||||||
internal.ShowSubcommandHelpAndError(c, errors.New("no secret(s) specified?"))
|
internal.ShowSubcommandHelpAndError(c, errors.New("no secret(s) specified?"))
|
||||||
}
|
}
|
||||||
|
|
||||||
appFiles, err := config.LoadAppFiles("")
|
|
||||||
if err != nil {
|
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
appEnv, err := config.GetApp(appFiles, appName)
|
|
||||||
if err != nil {
|
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
server := appFiles[appName].Server
|
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
cl, err := client.New(server)
|
cl, err := client.New(app.Server)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
filters := filters.NewArgs()
|
filters := filters.NewArgs()
|
||||||
filters.Add("name", appEnv.StackName())
|
filters.Add("name", app.StackName())
|
||||||
secretList, err := cl.SecretList(ctx, types.SecretListOptions{Filters: filters})
|
secretList, err := cl.SecretList(ctx, types.SecretListOptions{Filters: filters})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
|
@ -168,13 +134,13 @@ var appSecretRmCommand = &cli.Command{
|
||||||
secretToRm := c.Args().Get(1)
|
secretToRm := c.Args().Get(1)
|
||||||
for _, cont := range secretList {
|
for _, cont := range secretList {
|
||||||
secretName := cont.Spec.Annotations.Name
|
secretName := cont.Spec.Annotations.Name
|
||||||
parsed := secret.ParseGeneratedSecretName(secretName, appEnv)
|
parsed := secret.ParseGeneratedSecretName(secretName, app)
|
||||||
if allSecrets {
|
if allSecrets {
|
||||||
if err := cl.SecretRemove(ctx, secretName); err != nil {
|
if err := cl.SecretRemove(ctx, secretName); err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
if internal.Pass {
|
if internal.Pass {
|
||||||
if err := secret.PassRmSecret(parsed, appEnv.StackName(), server); err != nil {
|
if err := secret.PassRmSecret(parsed, app.StackName(), app.Server); err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -184,7 +150,7 @@ var appSecretRmCommand = &cli.Command{
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
if internal.Pass {
|
if internal.Pass {
|
||||||
if err := secret.PassRmSecret(parsed, appEnv.StackName(), server); err != nil {
|
if err := secret.PassRmSecret(parsed, app.StackName(), app.Server); err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -201,32 +167,20 @@ var appSecretLsCommand = &cli.Command{
|
||||||
Usage: "List all secrets",
|
Usage: "List all secrets",
|
||||||
Aliases: []string{"ls"},
|
Aliases: []string{"ls"},
|
||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
appName := internal.ValidateAppNameArg(c)
|
app := internal.ValidateApp(c)
|
||||||
|
secrets := secret.ReadSecretEnvVars(app.Env)
|
||||||
appFiles, err := config.LoadAppFiles("")
|
|
||||||
if err != nil {
|
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
appEnv, err := config.GetApp(appFiles, appName)
|
|
||||||
if err != nil {
|
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
secrets := secret.ReadSecretEnvVars(appEnv.Env)
|
|
||||||
|
|
||||||
tableCol := []string{"Name", "Version", "Generated Name", "Created On Server"}
|
tableCol := []string{"Name", "Version", "Generated Name", "Created On Server"}
|
||||||
table := abraFormatter.CreateTable(tableCol)
|
table := abraFormatter.CreateTable(tableCol)
|
||||||
|
|
||||||
server := appFiles[appName].Server
|
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
cl, err := client.New(server)
|
cl, err := client.New(app.Server)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
filters := filters.NewArgs()
|
filters := filters.NewArgs()
|
||||||
filters.Add("name", appEnv.StackName())
|
filters.Add("name", app.StackName())
|
||||||
secretList, err := cl.SecretList(ctx, types.SecretListOptions{Filters: filters})
|
secretList, err := cl.SecretList(ctx, types.SecretListOptions{Filters: filters})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
|
@ -244,7 +198,7 @@ var appSecretLsCommand = &cli.Command{
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
secretRemoteName := fmt.Sprintf("%s_%s_%s", appEnv.StackName(), secretName, secVal.Version)
|
secretRemoteName := fmt.Sprintf("%s_%s_%s", app.StackName(), secretName, secVal.Version)
|
||||||
if _, ok := remoteSecretNames[secretRemoteName]; ok {
|
if _, ok := remoteSecretNames[secretRemoteName]; ok {
|
||||||
createdRemote = true
|
createdRemote = true
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,6 @@ import (
|
||||||
"coopcloud.tech/abra/cli/internal"
|
"coopcloud.tech/abra/cli/internal"
|
||||||
"coopcloud.tech/abra/pkg/client"
|
"coopcloud.tech/abra/pkg/client"
|
||||||
stack "coopcloud.tech/abra/pkg/client/stack"
|
stack "coopcloud.tech/abra/pkg/client/stack"
|
||||||
"coopcloud.tech/abra/pkg/config"
|
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
"github.com/urfave/cli/v2"
|
"github.com/urfave/cli/v2"
|
||||||
)
|
)
|
||||||
|
@ -21,26 +20,15 @@ vigilant, as your swarm installation will consider any previously attached
|
||||||
volumes as eligiblef or pruning once undeployed.
|
volumes as eligiblef or pruning once undeployed.
|
||||||
`,
|
`,
|
||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
appName := internal.ValidateAppNameArg(c)
|
app := internal.ValidateApp(c)
|
||||||
|
|
||||||
appFiles, err := config.LoadAppFiles("")
|
|
||||||
if err != nil {
|
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
appEnv, err := config.GetApp(appFiles, appName)
|
|
||||||
if err != nil {
|
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
host := appFiles[appName].Server
|
cl, err := client.New(app.Server)
|
||||||
cl, err := client.New(host)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
rmOpts := stack.Remove{Namespaces: []string{appEnv.StackName()}}
|
rmOpts := stack.Remove{Namespaces: []string{app.StackName()}}
|
||||||
if err := stack.RunRemove(ctx, cl, rmOpts); err != nil {
|
if err := stack.RunRemove(ctx, cl, rmOpts); err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,33 +45,21 @@ var appVersionCommand = &cli.Command{
|
||||||
Aliases: []string{"v"},
|
Aliases: []string{"v"},
|
||||||
Usage: "Show version of all services in app",
|
Usage: "Show version of all services in app",
|
||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
appName := internal.ValidateAppNameArg(c)
|
app := internal.ValidateApp(c)
|
||||||
|
|
||||||
appFiles, err := config.LoadAppFiles("")
|
composeFiles, err := config.GetAppComposeFiles(app.Type, app.Env)
|
||||||
if err != nil {
|
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
appEnv, err := config.GetApp(appFiles, appName)
|
|
||||||
if err != nil {
|
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
app := appFiles[appName]
|
|
||||||
|
|
||||||
composeFiles, err := config.GetAppComposeFiles(appEnv.Type, appEnv.Env)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
opts := stack.Deploy{Composefiles: composeFiles}
|
opts := stack.Deploy{Composefiles: composeFiles}
|
||||||
compose, err := config.GetAppComposeConfig(appEnv.Type, opts, appEnv.Env)
|
compose, err := config.GetAppComposeConfig(app.Type, opts, app.Env)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
ch := make(chan stack.StackStatus, len(compose.Services))
|
ch := make(chan stack.StackStatus, len(compose.Services))
|
||||||
for _, service := range compose.Services {
|
for _, service := range compose.Services {
|
||||||
label := fmt.Sprintf("coop-cloud.%s.%s.version", appEnv.StackName(), service.Name)
|
label := fmt.Sprintf("coop-cloud.%s.%s.version", app.StackName(), service.Name)
|
||||||
go func(s string, l string) {
|
go func(s string, l string) {
|
||||||
ch <- stack.GetDeployedServicesByLabel(s, l)
|
ch <- stack.GetDeployedServicesByLabel(s, l)
|
||||||
}(app.Server, label)
|
}(app.Server, label)
|
||||||
|
@ -96,7 +84,7 @@ var appVersionCommand = &cli.Command{
|
||||||
for _, service := range compose.Services {
|
for _, service := range compose.Services {
|
||||||
if status, ok := statuses[service.Name]; ok {
|
if status, ok := statuses[service.Name]; ok {
|
||||||
statusService := status.Services[0]
|
statusService := status.Services[0]
|
||||||
label := fmt.Sprintf("coop-cloud.%s.%s.version", appEnv.StackName(), service.Name)
|
label := fmt.Sprintf("coop-cloud.%s.%s.version", app.StackName(), service.Name)
|
||||||
version, digest := parseVersionLabel(statusService.Spec.Labels[label])
|
version, digest := parseVersionLabel(statusService.Spec.Labels[label])
|
||||||
image, err := getImagePath(statusService.Spec.Labels["com.docker.stack.image"])
|
image, err := getImagePath(statusService.Spec.Labels["com.docker.stack.image"])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -6,41 +6,24 @@ import (
|
||||||
abraFormatter "coopcloud.tech/abra/cli/formatter"
|
abraFormatter "coopcloud.tech/abra/cli/formatter"
|
||||||
"coopcloud.tech/abra/cli/internal"
|
"coopcloud.tech/abra/cli/internal"
|
||||||
"coopcloud.tech/abra/pkg/client"
|
"coopcloud.tech/abra/pkg/client"
|
||||||
"coopcloud.tech/abra/pkg/config"
|
|
||||||
"github.com/AlecAivazis/survey/v2"
|
"github.com/AlecAivazis/survey/v2"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
"github.com/urfave/cli/v2"
|
"github.com/urfave/cli/v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
// getAppServer retrieves the server of an app.
|
|
||||||
func getAppServer(appName string) string {
|
|
||||||
appFiles, err := config.LoadAppFiles("")
|
|
||||||
if err != nil {
|
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
var server string
|
|
||||||
if app, ok := appFiles[appName]; ok {
|
|
||||||
server = app.Server
|
|
||||||
} else {
|
|
||||||
logrus.Fatalf(`app "%s" does not exist`, appName)
|
|
||||||
}
|
|
||||||
return server
|
|
||||||
}
|
|
||||||
|
|
||||||
var appVolumeListCommand = &cli.Command{
|
var appVolumeListCommand = &cli.Command{
|
||||||
Name: "list",
|
Name: "list",
|
||||||
Usage: "list volumes associated with an app",
|
Usage: "list volumes associated with an app",
|
||||||
Aliases: []string{"ls"},
|
Aliases: []string{"ls"},
|
||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
appName := internal.ValidateAppNameArg(c)
|
app := internal.ValidateApp(c)
|
||||||
|
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
server := getAppServer(appName)
|
volumeList, err := client.GetVolumes(ctx, app.Server, app.Name)
|
||||||
volumeList, err := client.GetVolumes(ctx, server, appName)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
table := abraFormatter.CreateTable([]string{"DRIVER", "VOLUME NAME"})
|
table := abraFormatter.CreateTable([]string{"DRIVER", "VOLUME NAME"})
|
||||||
var volTable [][]string
|
var volTable [][]string
|
||||||
for _, volume := range volumeList {
|
for _, volume := range volumeList {
|
||||||
|
@ -50,8 +33,10 @@ var appVolumeListCommand = &cli.Command{
|
||||||
}
|
}
|
||||||
volTable = append(volTable, volRow)
|
volTable = append(volTable, volRow)
|
||||||
}
|
}
|
||||||
|
|
||||||
table.AppendBulk(volTable)
|
table.AppendBulk(volTable)
|
||||||
table.Render()
|
table.Render()
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -64,10 +49,10 @@ var appVolumeRemoveCommand = &cli.Command{
|
||||||
internal.ForceFlag,
|
internal.ForceFlag,
|
||||||
},
|
},
|
||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
appName := internal.ValidateAppNameArg(c)
|
app := internal.ValidateApp(c)
|
||||||
server := getAppServer(appName)
|
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
volumeList, err := client.GetVolumes(ctx, server, appName)
|
volumeList, err := client.GetVolumes(ctx, app.Server, app.Name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
|
@ -87,11 +72,13 @@ var appVolumeRemoveCommand = &cli.Command{
|
||||||
volumesToRemove = volumeNames
|
volumesToRemove = volumeNames
|
||||||
}
|
}
|
||||||
|
|
||||||
err = client.RemoveVolumes(ctx, server, volumesToRemove, internal.Force)
|
err = client.RemoveVolumes(ctx, app.Server, volumesToRemove, internal.Force)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
logrus.Info("Volumes removed successfully.")
|
logrus.Info("Volumes removed successfully.")
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ package internal
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
|
||||||
|
"coopcloud.tech/abra/pkg/app"
|
||||||
"coopcloud.tech/abra/pkg/config"
|
"coopcloud.tech/abra/pkg/config"
|
||||||
"coopcloud.tech/abra/pkg/recipe"
|
"coopcloud.tech/abra/pkg/recipe"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
|
@ -25,21 +26,17 @@ func ValidateRecipeArg(c *cli.Context) string {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ValidateAppNameArg ensures the app name arg is valid.
|
// ValidateAppNameArg ensures the app name arg is valid.
|
||||||
func ValidateAppNameArg(c *cli.Context) string {
|
func ValidateApp(c *cli.Context) config.App {
|
||||||
appName := c.Args().First()
|
appName := c.Args().First()
|
||||||
|
|
||||||
if appName == "" {
|
if appName == "" {
|
||||||
ShowSubcommandHelpAndError(c, errors.New("no app provided"))
|
ShowSubcommandHelpAndError(c, errors.New("no app provided"))
|
||||||
}
|
}
|
||||||
|
|
||||||
appFiles, err := config.LoadAppFiles("")
|
app, err := app.Get(appName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, ok := appFiles[appName]; !ok {
|
return app
|
||||||
logrus.Fatalf("'%s' doesn't exist?", appName)
|
|
||||||
}
|
|
||||||
|
|
||||||
return appName
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
package app
|
||||||
|
|
||||||
|
import (
|
||||||
|
"coopcloud.tech/abra/pkg/config"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Get retrieves an app
|
||||||
|
func Get(appName string) (config.App, error) {
|
||||||
|
files, err := config.LoadAppFiles("")
|
||||||
|
if err != nil {
|
||||||
|
return config.App{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
app, err := config.GetApp(files, appName)
|
||||||
|
if err != nil {
|
||||||
|
return config.App{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return app, nil
|
||||||
|
}
|
|
@ -40,7 +40,8 @@ type App struct {
|
||||||
Type string
|
Type string
|
||||||
Domain string
|
Domain string
|
||||||
Env AppEnv
|
Env AppEnv
|
||||||
File AppFile
|
Server string
|
||||||
|
Path string
|
||||||
}
|
}
|
||||||
|
|
||||||
// StackName gets what the docker safe stack name is for the app
|
// StackName gets what the docker safe stack name is for the app
|
||||||
|
@ -56,7 +57,7 @@ type ByServer []App
|
||||||
func (a ByServer) Len() int { return len(a) }
|
func (a ByServer) Len() int { return len(a) }
|
||||||
func (a ByServer) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
|
func (a ByServer) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
|
||||||
func (a ByServer) Less(i, j int) bool {
|
func (a ByServer) Less(i, j int) bool {
|
||||||
return strings.ToLower(a[i].File.Server) < strings.ToLower(a[j].File.Server)
|
return strings.ToLower(a[i].Server) < strings.ToLower(a[j].Server)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ByServerAndType sort a slice of Apps
|
// ByServerAndType sort a slice of Apps
|
||||||
|
@ -65,10 +66,10 @@ type ByServerAndType []App
|
||||||
func (a ByServerAndType) Len() int { return len(a) }
|
func (a ByServerAndType) Len() int { return len(a) }
|
||||||
func (a ByServerAndType) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
|
func (a ByServerAndType) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
|
||||||
func (a ByServerAndType) Less(i, j int) bool {
|
func (a ByServerAndType) Less(i, j int) bool {
|
||||||
if a[i].File.Server == a[j].File.Server {
|
if a[i].Server == a[j].Server {
|
||||||
return strings.ToLower(a[i].Type) < strings.ToLower(a[j].Type)
|
return strings.ToLower(a[i].Type) < strings.ToLower(a[j].Type)
|
||||||
}
|
}
|
||||||
return strings.ToLower(a[i].File.Server) < strings.ToLower(a[j].File.Server)
|
return strings.ToLower(a[i].Server) < strings.ToLower(a[j].Server)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ByType sort a slice of Apps
|
// ByType sort a slice of Apps
|
||||||
|
@ -114,7 +115,8 @@ func newApp(env AppEnv, name string, appFile AppFile) (App, error) {
|
||||||
Domain: domain,
|
Domain: domain,
|
||||||
Type: apptype,
|
Type: apptype,
|
||||||
Env: env,
|
Env: env,
|
||||||
File: appFile,
|
Server: appFile.Server,
|
||||||
|
Path: appFile.Path,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue