From d9897e5d1e7c34ddca26048f4eefbd57e581bfc1 Mon Sep 17 00:00:00 2001 From: Pavel Sviderski Date: Wed, 19 Feb 2025 16:53:55 +1000 Subject: [PATCH] feat: set restart policy for all services to always --- internal/cli/client/container.go | 5 +++++ test/e2e/service_test.go | 29 +++++++++++++++++++++-------- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/internal/cli/client/container.go b/internal/cli/client/container.go index dc3f8621..aad8315b 100644 --- a/internal/cli/client/container.go +++ b/internal/cli/client/container.go @@ -85,6 +85,11 @@ func (cli *Client) CreateContainer( Binds: spec.Container.Volumes, Init: spec.Container.Init, PortBindings: portBindings, + // Always restart service containers if they exit or a machine restarts. + // For one-off containers and batch jobs we plan to use a different service type/mode. + RestartPolicy: container.RestartPolicy{ + Name: container.RestartPolicyAlways, + }, } netConfig := &network.NetworkingConfig{ EndpointsConfig: map[string]*network.EndpointSettings{ diff --git a/test/e2e/service_test.go b/test/e2e/service_test.go index 3107f17f..0eaf76a2 100644 --- a/test/e2e/service_test.go +++ b/test/e2e/service_test.go @@ -340,6 +340,11 @@ func TestDeployment(t *testing.T) { }, } assert.Equal(t, expectedPorts, ports) + + assert.Equal(t, container.RestartPolicy{ + Name: container.RestartPolicyAlways, + MaximumRetryCount: 0, + }, ctr.HostConfig.RestartPolicy) }) t.Run("caddy with machine filter", func(t *testing.T) { @@ -446,6 +451,10 @@ func TestRunService(t *testing.T) { assert.Nil(t, ctr.HostConfig.Init) assert.Empty(t, ctr.HostConfig.Binds) assert.Empty(t, ctr.HostConfig.PortBindings) + assert.Equal(t, container.RestartPolicy{ + Name: container.RestartPolicyAlways, + MaximumRetryCount: 0, + }, ctr.HostConfig.RestartPolicy) // Verify labels. assert.Equal(t, serviceID, ctr.Config.Labels[api.LabelServiceID]) @@ -514,14 +523,6 @@ func TestRunService(t *testing.T) { assert.Len(t, ctr.HostConfig.Binds, 1) assert.Contains(t, ctr.HostConfig.Binds, spec.Container.Volumes[0]) - // Verify labels. - assert.Equal(t, serviceID, ctr.Config.Labels[api.LabelServiceID]) - assert.Equal(t, spec.Name, ctr.Config.Labels[api.LabelServiceName]) - assert.Equal(t, api.ServiceModeGlobal, ctr.Config.Labels[api.LabelServiceMode]) - assert.Equal(t, "127.0.0.1:80:8080/tcp@host,app.example.com:8000/https", ctr.Config.Labels[api.LabelServicePorts]) - assert.Contains(t, ctr.Config.Labels, api.LabelManaged) - - // Verify port bindings. assert.Len(t, ctr.HostConfig.PortBindings, 1) expectedPort := []nat.PortBinding{ { @@ -531,6 +532,18 @@ func TestRunService(t *testing.T) { } assert.Equal(t, expectedPort, ctr.HostConfig.PortBindings[nat.Port("8080/tcp")]) + assert.Equal(t, container.RestartPolicy{ + Name: container.RestartPolicyAlways, + MaximumRetryCount: 0, + }, ctr.HostConfig.RestartPolicy) + + // Verify labels. + assert.Equal(t, serviceID, ctr.Config.Labels[api.LabelServiceID]) + assert.Equal(t, spec.Name, ctr.Config.Labels[api.LabelServiceName]) + assert.Equal(t, api.ServiceModeGlobal, ctr.Config.Labels[api.LabelServiceMode]) + assert.Equal(t, "127.0.0.1:80:8080/tcp@host,app.example.com:8000/https", ctr.Config.Labels[api.LabelServicePorts]) + assert.Contains(t, ctr.Config.Labels, api.LabelManaged) + // Verify network settings. assert.Len(t, ctr.NetworkSettings.Networks, 1) assert.Contains(t, ctr.NetworkSettings.Networks, machinedocker.NetworkName)