2023-08-08 10:56:22 +02:00

72 lines
1.2 KiB
Go

package services
import (
"fmt"
"localenv/utils"
"github.com/docker/docker/api/types/swarm"
"github.com/docker/docker/client"
"golang.org/x/net/context"
)
const (
NginxImageName string = "localenv-nginx:latest"
NginxServiceName string = "nginx"
NginxServicePort uint32 = 4443
)
type Nginx struct {
Service
}
func NewNginx() Nginx {
var nx Nginx
nx.name = fmt.Sprintf("localenv-%s", NginxServiceName)
nx.spec = nx.getServiceSpec(
WithMSNetwork(),
WithHostEndpoint(NginxServicePort),
WithRestartPolicy(),
)
return nx
}
func (n *Nginx) getServiceSpec(opts ...ServiceOption) swarm.ServiceSpec {
spec := swarm.ServiceSpec{
Annotations: swarm.Annotations{
Name: n.name,
},
TaskTemplate: swarm.TaskSpec{
ContainerSpec: &swarm.ContainerSpec{
Image: NginxImageName,
},
},
Mode: swarm.ServiceMode{
Replicated: &swarm.ReplicatedService{
Replicas: &SwarmServiceReplicas,
},
},
}
for _, opt := range opts {
opt(&spec)
}
return spec
}
func (n *Nginx) Deploy(ctx context.Context, cli *client.Client) error {
if err := utils.CreateService(ctx, cli, &n.spec); err != nil {
return err
}
if err := utils.CheckServiceHealthWithRetry(ctx, cli, n.name); err != nil {
return err
}
return nil
}