Skip to content

Commit 1223c86

Browse files
committed
feat(force restart a swarm service)
1 parent 0d19cf7 commit 1223c86

3 files changed

Lines changed: 34 additions & 0 deletions

File tree

internal/dao/docker.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,10 @@ func (d *DockerClient) UpdateServiceImage(id string, image string) error {
310310
return d.Service.UpdateImage(id, image)
311311
}
312312

313+
func (d *DockerClient) RestartService(id string) error {
314+
return d.Service.Restart(id)
315+
}
316+
313317
func (d *DockerClient) RemoveService(id string) error {
314318
return d.Service.Remove(id)
315319
}

internal/dao/swarm/service/service.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,18 @@ func (m *Manager) UpdateImage(id string, image string) error {
192192
return err
193193
}
194194

195+
func (m *Manager) Restart(id string) error {
196+
service, _, err := m.cli.ServiceInspectWithRaw(m.ctx, id, swarm.ServiceInspectOptions{})
197+
if err != nil {
198+
return err
199+
}
200+
201+
service.Spec.TaskTemplate.ForceUpdate++
202+
203+
_, err = m.cli.ServiceUpdate(m.ctx, id, service.Version, service.Spec, swarm.ServiceUpdateOptions{})
204+
return err
205+
}
206+
195207
func (m *Manager) Remove(id string) error {
196208
return m.cli.ServiceRemove(m.ctx, id)
197209
}

internal/ui/views/services/services.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ func GetShortcuts() []string {
149149
common.FormatSCHeader("p", "Ps"),
150150
common.FormatSCHeader("d", "Describe"),
151151
common.FormatSCHeader("s", "Scale"),
152+
common.FormatSCHeader("r", "Restart"),
152153
common.FormatSCHeader("z", "No Replica"),
153154
common.FormatSCHeader("shift-x", "Attach Secrets"),
154155
common.FormatSCHeader("shift-n", "Attach Networks"),
@@ -195,6 +196,9 @@ func InputHandler(v *view.ResourceView, event *tcell.EventKey) *tcell.EventKey {
195196
case 'p':
196197
Ps(app, v)
197198
return nil
199+
case 'r':
200+
RestartAction(app, v)
201+
return nil
198202
case 'z':
199203
ScaleZero(app, v)
200204
return nil
@@ -331,6 +335,20 @@ func ScaleAction(app common.AppController, v *view.ResourceView) {
331335
Scale(app, id, currentReplicas)
332336
}
333337

338+
func RestartAction(app common.AppController, v *view.ResourceView) {
339+
ids, err := v.GetSelectedIDs()
340+
if err != nil {
341+
return
342+
}
343+
344+
dialogs.ShowConfirmation(app, "RESTART", fmt.Sprintf("%d services", len(ids)), func(force bool) {
345+
restartAction := func(id string) error {
346+
return app.GetDocker().RestartService(id)
347+
}
348+
app.PerformAction(restartAction, "restarting", styles.ColorStatusOrange)
349+
})
350+
}
351+
334352
func ScaleZero(app common.AppController, v *view.ResourceView) {
335353
ids, err := v.GetSelectedIDs()
336354
if err != nil { return }

0 commit comments

Comments
 (0)