Skip to content

Commit

Permalink
refactor: Improve setup process and Docker credential handling
Browse files Browse the repository at this point in the history
  • Loading branch information
yarlson committed Nov 2, 2024
1 parent acf9749 commit 98c3ac0
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 41 deletions.
98 changes: 60 additions & 38 deletions cmd/setup.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import (
"github.com/yarlson/ftl/pkg/server"
)

// setupCmd represents the setup command
var setupCmd = &cobra.Command{
Use: "setup",
Short: "Prepare servers for deployment",
Expand All @@ -32,50 +33,27 @@ func runSetup(cmd *cobra.Command, args []string) {
return
}

var dockerUsername, dockerPassword string

needDockerHubLogin := false
for _, service := range cfg.Services {
if imageFromDockerHub(service.Image) {
needDockerHubLogin = true
break
}
}

if needDockerHubLogin {
console.Input("Enter Docker Hub username:")
dockerUsername, err = console.ReadLine()
if err != nil {
console.ErrPrintln("Failed to read Docker Hub username:", err)
return
}

console.Input("Enter Docker Hub password:")
dockerPassword, err = console.ReadPassword()
if err != nil {
console.ErrPrintln("Failed to read Docker Hub password:", err)
return
}
fmt.Println()
dockerCreds, err := getDockerCredentials(cfg.Services)
if err != nil {
console.ErrPrintln("Failed to get Docker credentials:", err)
return
}

console.Input("Enter server user password:")
newUserPassword, err := console.ReadPassword()
newUserPassword, err := getUserPassword()
if err != nil {
console.ErrPrintln("Failed to read password:", err)
return
}
fmt.Println()

if dockerUsername != "" && dockerPassword != "" {
if err := server.DockerLogin(context.Background(), dockerUsername, dockerPassword); err != nil {
if dockerCreds.Username != "" && dockerCreds.Password != "" {
if err := server.DockerLogin(context.Background(), dockerCreds.Username, dockerCreds.Password); err != nil {
console.ErrPrintln("Failed to login to Docker Hub:", err)
return
}
}

for _, s := range cfg.Servers {
if err := setupServer(s, dockerUsername, dockerPassword, newUserPassword); err != nil {
if err := setupServer(s, dockerCreds, newUserPassword); err != nil {
console.ErrPrintln(fmt.Sprintf("Failed to setup server %s:", s.Host), err)
continue
}
Expand All @@ -85,24 +63,68 @@ func runSetup(cmd *cobra.Command, args []string) {
console.Success("Server setup completed successfully.")
}

func setupServer(serverConfig config.Server, dockerUsername, dockerPassword, newUserPassword string) error {
type dockerCredentials struct {
Username string
Password string
}

func getDockerCredentials(services []config.Service) (dockerCredentials, error) {
var creds dockerCredentials

if !needDockerHubLogin(services) {
return creds, nil
}

console.Input("Enter Docker Hub username:")
username, err := console.ReadLine()
if err != nil {
return creds, fmt.Errorf("failed to read Docker Hub username: %w", err)
}

console.Input("Enter Docker Hub password:")
password, err := console.ReadPassword()
if err != nil {
return creds, fmt.Errorf("failed to read Docker Hub password: %w", err)
}
fmt.Println()

return dockerCredentials{Username: username, Password: password}, nil
}

func getUserPassword() (string, error) {
console.Input("Enter server user password:")
password, err := console.ReadPassword()
if err != nil {
return "", fmt.Errorf("failed to read password: %w", err)
}
fmt.Println()
return password, nil
}

func setupServer(serverConfig config.Server, dockerCreds dockerCredentials, newUserPassword string) error {
console.Info(fmt.Sprintf("Setting up server %s...", serverConfig.Host))

ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute)
defer cancel()

s, err := server.NewServer(&serverConfig)
if err != nil {
return err
return fmt.Errorf("failed to create server: %w", err)
}

return s.RunSetup(ctx, dockerUsername, dockerPassword)
return s.RunSetup(ctx, dockerCreds.Username, dockerCreds.Password)
}

func needDockerHubLogin(services []config.Service) bool {
for _, service := range services {
if imageFromDockerHub(service.Image) {
return true
}
}
return false
}

func imageFromDockerHub(image string) bool {
parts := strings.SplitN(image, "/", 2)
if len(parts) > 1 && strings.Contains(parts[0], ".") {
return false
}
return true
return len(parts) == 1 || !strings.Contains(parts[0], ".")
}
6 changes: 3 additions & 3 deletions pkg/deployment/deployment.go
Original file line number Diff line number Diff line change
Expand Up @@ -129,9 +129,9 @@ func (d *Deployment) startProxy(project string, cfg *config.Config) error {
return fmt.Errorf("failed to reload nginx config: %w", err)
}

if err := d.deployCertRenewer(project, cfg); err != nil {
return fmt.Errorf("failed to deploy certrenewer service: %w", err)
}
//if err := d.deployCertRenewer(project, cfg); err != nil {
// return fmt.Errorf("failed to deploy certrenewer service: %w", err)
//}

return nil
}
Expand Down

0 comments on commit 98c3ac0

Please sign in to comment.