localenv/deployer/swarm.go
2023-08-05 22:10:48 +02:00

65 lines
1.2 KiB
Go

package deployer
import (
"context"
"localenv/services"
"localenv/utils"
"github.com/docker/docker/client"
"github.com/docker/docker/errdefs"
"github.com/rs/zerolog/log"
)
type Swarm struct {
ID string
cli *client.Client
}
func (s Swarm) deployServices(ctx context.Context) error {
if err := s.createNetworks(ctx); err != nil {
return err
}
if err := s.deployRabbitMQ(ctx); err != nil {
return err
}
if err := s.deployMailhog(ctx); err != nil {
return err
}
if err := s.deployNginx(ctx); err != nil {
return err
}
return nil
}
func (s Swarm) createNetworks(ctx context.Context) error {
log.Info().Str("network", services.NetworkName).Msg("creating network...")
if err := utils.CreateNetwork(ctx, s.cli, services.NetworkName); err != nil {
if !errdefs.IsConflict(err) {
return err
}
}
return nil
}
func (s Swarm) deployRabbitMQ(ctx context.Context) error {
rabbitmq := services.NewRabbitMQ()
return rabbitmq.Deploy(ctx, s.cli)
}
func (s Swarm) deployNginx(ctx context.Context) error {
nginx := services.NewNginx()
return nginx.Deploy(ctx, s.cli)
}
func (s Swarm) deployMailhog(ctx context.Context) error {
mailhog := services.NewMailhog()
return mailhog.Deploy(ctx, s.cli)
}