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 }