207
internal/cmd/compose.go
Archivo normal
207
internal/cmd/compose.go
Archivo normal
@@ -0,0 +1,207 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/yourusername/buque/internal/docker"
|
||||
)
|
||||
|
||||
var upCmd = &cobra.Command{
|
||||
Use: "up [environment...]",
|
||||
Short: "Start environments",
|
||||
Long: `Start one or more environments. If no environment is specified, starts all enabled environments.`,
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
cfg := configMgr.GetConfig()
|
||||
if cfg == nil {
|
||||
return fmt.Errorf("configuration not loaded")
|
||||
}
|
||||
|
||||
compose, err := docker.NewComposeManager()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
detach, _ := cmd.Flags().GetBool("detach")
|
||||
build, _ := cmd.Flags().GetBool("build")
|
||||
|
||||
ctx := context.Background()
|
||||
environments := getEnvironmentsToProcess(args, cfg.Environments)
|
||||
|
||||
for _, env := range environments {
|
||||
if !env.Enabled {
|
||||
fmt.Printf("Skipping disabled environment: %s\n", env.Name)
|
||||
continue
|
||||
}
|
||||
|
||||
fmt.Printf("Starting environment: %s\n", env.Name)
|
||||
|
||||
if build {
|
||||
if err := compose.Build(ctx, env); err != nil {
|
||||
fmt.Printf("Warning: failed to build %s: %v\n", env.Name, err)
|
||||
}
|
||||
}
|
||||
|
||||
if err := compose.Up(ctx, env, detach); err != nil {
|
||||
return fmt.Errorf("failed to start %s: %w", env.Name, err)
|
||||
}
|
||||
|
||||
fmt.Printf("Environment '%s' started successfully!\n", env.Name)
|
||||
}
|
||||
|
||||
return nil
|
||||
},
|
||||
}
|
||||
|
||||
var downCmd = &cobra.Command{
|
||||
Use: "down [environment...]",
|
||||
Short: "Stop environments",
|
||||
Long: `Stop one or more environments. If no environment is specified, stops all environments.`,
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
cfg := configMgr.GetConfig()
|
||||
if cfg == nil {
|
||||
return fmt.Errorf("configuration not loaded")
|
||||
}
|
||||
|
||||
compose, err := docker.NewComposeManager()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
removeVolumes, _ := cmd.Flags().GetBool("volumes")
|
||||
ctx := context.Background()
|
||||
environments := getEnvironmentsToProcess(args, cfg.Environments)
|
||||
|
||||
for _, env := range environments {
|
||||
fmt.Printf("Stopping environment: %s\n", env.Name)
|
||||
|
||||
if err := compose.Down(ctx, env, removeVolumes); err != nil {
|
||||
return fmt.Errorf("failed to stop %s: %w", env.Name, err)
|
||||
}
|
||||
|
||||
fmt.Printf("Environment '%s' stopped successfully!\n", env.Name)
|
||||
}
|
||||
|
||||
return nil
|
||||
},
|
||||
}
|
||||
|
||||
var restartCmd = &cobra.Command{
|
||||
Use: "restart [environment...]",
|
||||
Short: "Restart environments",
|
||||
Long: `Restart one or more environments. If no environment is specified, restarts all enabled environments.`,
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
cfg := configMgr.GetConfig()
|
||||
if cfg == nil {
|
||||
return fmt.Errorf("configuration not loaded")
|
||||
}
|
||||
|
||||
compose, err := docker.NewComposeManager()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
environments := getEnvironmentsToProcess(args, cfg.Environments)
|
||||
|
||||
for _, env := range environments {
|
||||
if !env.Enabled {
|
||||
fmt.Printf("Skipping disabled environment: %s\n", env.Name)
|
||||
continue
|
||||
}
|
||||
|
||||
fmt.Printf("Restarting environment: %s\n", env.Name)
|
||||
|
||||
if err := compose.Restart(ctx, env); err != nil {
|
||||
return fmt.Errorf("failed to restart %s: %w", env.Name, err)
|
||||
}
|
||||
|
||||
fmt.Printf("Environment '%s' restarted successfully!\n", env.Name)
|
||||
}
|
||||
|
||||
return nil
|
||||
},
|
||||
}
|
||||
|
||||
var pullCmd = &cobra.Command{
|
||||
Use: "pull [environment...]",
|
||||
Short: "Pull images for environments",
|
||||
Long: `Pull latest images for one or more environments. If no environment is specified, pulls all enabled environments.`,
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
cfg := configMgr.GetConfig()
|
||||
if cfg == nil {
|
||||
return fmt.Errorf("configuration not loaded")
|
||||
}
|
||||
|
||||
compose, err := docker.NewComposeManager()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
environments := getEnvironmentsToProcess(args, cfg.Environments)
|
||||
|
||||
for _, env := range environments {
|
||||
if !env.Enabled {
|
||||
fmt.Printf("Skipping disabled environment: %s\n", env.Name)
|
||||
continue
|
||||
}
|
||||
|
||||
fmt.Printf("Pulling images for environment: %s\n", env.Name)
|
||||
|
||||
if err := compose.Pull(ctx, env); err != nil {
|
||||
fmt.Printf("Warning: failed to pull images for %s: %v\n", env.Name, err)
|
||||
continue
|
||||
}
|
||||
|
||||
fmt.Printf("Images for '%s' pulled successfully!\n", env.Name)
|
||||
}
|
||||
|
||||
return nil
|
||||
},
|
||||
}
|
||||
|
||||
var updateCmd = &cobra.Command{
|
||||
Use: "update [environment...]",
|
||||
Short: "Update environments",
|
||||
Long: `Update one or more environments by pulling latest images and recreating containers.`,
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
cfg := configMgr.GetConfig()
|
||||
if cfg == nil {
|
||||
return fmt.Errorf("configuration not loaded")
|
||||
}
|
||||
|
||||
compose, err := docker.NewComposeManager()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
environments := getEnvironmentsToProcess(args, cfg.Environments)
|
||||
|
||||
for _, env := range environments {
|
||||
if !env.Enabled {
|
||||
fmt.Printf("Skipping disabled environment: %s\n", env.Name)
|
||||
continue
|
||||
}
|
||||
|
||||
fmt.Printf("Updating environment: %s\n", env.Name)
|
||||
|
||||
if err := compose.Update(ctx, env); err != nil {
|
||||
return fmt.Errorf("failed to update %s: %w", env.Name, err)
|
||||
}
|
||||
|
||||
fmt.Printf("Environment '%s' updated successfully!\n", env.Name)
|
||||
}
|
||||
|
||||
return nil
|
||||
},
|
||||
}
|
||||
|
||||
func init() {
|
||||
upCmd.Flags().BoolP("detach", "d", true, "Detached mode: Run containers in the background")
|
||||
upCmd.Flags().BoolP("build", "b", false, "Build images before starting")
|
||||
|
||||
downCmd.Flags().BoolP("volumes", "v", false, "Remove volumes")
|
||||
}
|
||||
Referencia en una nueva incidencia
Block a user