forked from toolshed/abra
fix: use scale for restarting
The other approach wasn't working. Duplicating containers on restart. You'd end up with 2 containers per restart...
This commit is contained in:
44
pkg/upstream/service/scale.go
Normal file
44
pkg/upstream/service/scale.go
Normal file
@ -0,0 +1,44 @@
|
||||
package upstream
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"github.com/docker/docker/api/types"
|
||||
"github.com/docker/docker/client"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
// RunServiceScale scales a service (useful for restart action)
|
||||
func RunServiceScale(ctx context.Context, cl *client.Client, serviceID string, scale uint64) error {
|
||||
service, _, err := cl.ServiceInspectWithRaw(ctx, serviceID, types.ServiceInspectOptions{})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
serviceMode := &service.Spec.Mode
|
||||
if serviceMode.Replicated != nil {
|
||||
serviceMode.Replicated.Replicas = &scale
|
||||
} else if serviceMode.ReplicatedJob != nil {
|
||||
serviceMode.ReplicatedJob.TotalCompletions = &scale
|
||||
} else {
|
||||
return fmt.Errorf("scale can only be used with replicated or replicated-job mode")
|
||||
}
|
||||
|
||||
response, err := cl.ServiceUpdate(
|
||||
ctx,
|
||||
service.ID,
|
||||
service.Version,
|
||||
service.Spec,
|
||||
types.ServiceUpdateOptions{},
|
||||
)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, warning := range response.Warnings {
|
||||
logrus.Warn(warning)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
Reference in New Issue
Block a user