mirror of
https://github.com/containers/podman.git
synced 2025-05-22 09:36:57 +08:00

also includes bumps for c/storage and c/image Signed-off-by: Paul Holzinger <pholzing@redhat.com>
65 lines
2.2 KiB
Go
65 lines
2.2 KiB
Go
package docker
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"net/http"
|
|
)
|
|
|
|
// RestartPolicy represents the policy for automatically restarting a container.
|
|
//
|
|
// Possible values are:
|
|
//
|
|
// - always: the docker daemon will always restart the container
|
|
// - on-failure: the docker daemon will restart the container on failures, at
|
|
// most MaximumRetryCount times
|
|
// - unless-stopped: the docker daemon will always restart the container except
|
|
// when user has manually stopped the container
|
|
// - no: the docker daemon will not restart the container automatically
|
|
type RestartPolicy struct {
|
|
Name string `json:"Name,omitempty" yaml:"Name,omitempty" toml:"Name,omitempty"`
|
|
MaximumRetryCount int `json:"MaximumRetryCount,omitempty" yaml:"MaximumRetryCount,omitempty" toml:"MaximumRetryCount,omitempty"`
|
|
}
|
|
|
|
// AlwaysRestart returns a restart policy that tells the Docker daemon to
|
|
// always restart the container.
|
|
func AlwaysRestart() RestartPolicy {
|
|
return RestartPolicy{Name: "always"}
|
|
}
|
|
|
|
// RestartOnFailure returns a restart policy that tells the Docker daemon to
|
|
// restart the container on failures, trying at most maxRetry times.
|
|
func RestartOnFailure(maxRetry int) RestartPolicy {
|
|
return RestartPolicy{Name: "on-failure", MaximumRetryCount: maxRetry}
|
|
}
|
|
|
|
// RestartUnlessStopped returns a restart policy that tells the Docker daemon to
|
|
// always restart the container except when user has manually stopped the container.
|
|
func RestartUnlessStopped() RestartPolicy {
|
|
return RestartPolicy{Name: "unless-stopped"}
|
|
}
|
|
|
|
// NeverRestart returns a restart policy that tells the Docker daemon to never
|
|
// restart the container on failures.
|
|
func NeverRestart() RestartPolicy {
|
|
return RestartPolicy{Name: "no"}
|
|
}
|
|
|
|
// RestartContainer stops a container, killing it after the given timeout (in
|
|
// seconds), during the stop process.
|
|
//
|
|
// See https://goo.gl/MrAKQ5 for more details.
|
|
func (c *Client) RestartContainer(id string, timeout uint) error {
|
|
path := fmt.Sprintf("/containers/%s/restart?t=%d", id, timeout)
|
|
resp, err := c.do(http.MethodPost, path, doOptions{})
|
|
if err != nil {
|
|
var e *Error
|
|
if errors.As(err, &e) && e.Status == http.StatusNotFound {
|
|
return &NoSuchContainer{ID: id}
|
|
}
|
|
return err
|
|
}
|
|
resp.Body.Close()
|
|
return nil
|
|
}
|