feat: caddy deploy command and stub implementation

This commit is contained in:
Pavel Sviderski
2025-02-15 08:52:14 +10:00
parent c4398f9f06
commit 98db5ed440
4 changed files with 79 additions and 0 deletions
+51
View File
@@ -0,0 +1,51 @@
package caddy
import (
"context"
"fmt"
"github.com/spf13/cobra"
"uncloud/internal/cli"
)
type deployOptions struct {
image string
cluster string
}
func NewDeployCommand() *cobra.Command {
opts := deployOptions{}
cmd := &cobra.Command{
Use: "deploy",
Short: "Deploy or upgrade Caddy reverse proxy across all machines in the cluster.",
Long: "Deploy or upgrade Caddy reverse proxy across all machines in the cluster.\n" +
"It performs a rolling update if Caddy is already running.",
RunE: func(cmd *cobra.Command, args []string) error {
uncli := cmd.Context().Value("cli").(*cli.CLI)
return deploy(cmd.Context(), uncli, opts)
},
}
cmd.Flags().StringVar(&opts.image, "image", "",
"Caddy Docker image to deploy. (default caddy:LATEST_VERSION)")
cmd.Flags().StringVarP(
&opts.cluster, "cluster", "c", "",
"Name of the cluster to deploy to. (default is the current cluster)",
)
return cmd
}
func deploy(ctx context.Context, uncli *cli.CLI, opts deployOptions) error {
client, err := uncli.ConnectCluster(ctx, opts.cluster)
if err != nil {
return fmt.Errorf("connect to cluster: %w", err)
}
defer client.Close()
if err = client.DeployCaddy(ctx, opts.image); err != nil {
return fmt.Errorf("deploy caddy: %w", err)
}
return nil
}
+16
View File
@@ -0,0 +1,16 @@
package caddy
import (
"github.com/spf13/cobra"
)
func NewRootCommand() *cobra.Command {
cmd := &cobra.Command{
Use: "caddy",
Short: "Manage Caddy reverse proxy service.",
}
cmd.AddCommand(
NewDeployCommand(),
)
return cmd
}
+2
View File
@@ -6,6 +6,7 @@ import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
"os" "os"
"strings" "strings"
"uncloud/cmd/uncloud/caddy"
"uncloud/cmd/uncloud/machine" "uncloud/cmd/uncloud/machine"
"uncloud/cmd/uncloud/service" "uncloud/cmd/uncloud/service"
"uncloud/internal/cli" "uncloud/internal/cli"
@@ -41,6 +42,7 @@ func main() {
_ = cmd.MarkPersistentFlagFilename("uncloud-config", "toml") _ = cmd.MarkPersistentFlagFilename("uncloud-config", "toml")
cmd.AddCommand( cmd.AddCommand(
caddy.NewRootCommand(),
machine.NewRootCommand(), machine.NewRootCommand(),
service.NewRootCommand(), service.NewRootCommand(),
service.NewInspectCommand(), service.NewInspectCommand(),
+10
View File
@@ -0,0 +1,10 @@
package client
import (
"context"
"errors"
)
func (cli *Client) DeployCaddy(ctx context.Context, image string) error {
return errors.New("not implemented")
}