github.com/hanks177/podman/v4@v4.1.3-0.20220613032544-16d90015bc83/pkg/api/handlers/compat/containers_restart.go (about)

     1  package compat
     2  
     3  import (
     4  	"net/http"
     5  
     6  	"github.com/hanks177/podman/v4/libpod"
     7  	"github.com/hanks177/podman/v4/libpod/define"
     8  	"github.com/hanks177/podman/v4/pkg/api/handlers/utils"
     9  	api "github.com/hanks177/podman/v4/pkg/api/types"
    10  	"github.com/hanks177/podman/v4/pkg/domain/entities"
    11  	"github.com/hanks177/podman/v4/pkg/domain/infra/abi"
    12  	"github.com/gorilla/schema"
    13  	"github.com/pkg/errors"
    14  )
    15  
    16  func RestartContainer(w http.ResponseWriter, r *http.Request) {
    17  	runtime := r.Context().Value(api.RuntimeKey).(*libpod.Runtime)
    18  	decoder := r.Context().Value(api.DecoderKey).(*schema.Decoder)
    19  	// Now use the ABI implementation to prevent us from having duplicate
    20  	// code.
    21  	containerEngine := abi.ContainerEngine{Libpod: runtime}
    22  
    23  	// /{version}/containers/(name)/restart
    24  	query := struct {
    25  		All           bool `schema:"all"`
    26  		DockerTimeout uint `schema:"t"`
    27  		LibpodTimeout uint `schema:"timeout"`
    28  	}{
    29  		// override any golang type defaults
    30  	}
    31  	if err := decoder.Decode(&query, r.URL.Query()); err != nil {
    32  		utils.Error(w, http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
    33  		return
    34  	}
    35  
    36  	name := utils.GetName(r)
    37  
    38  	options := entities.RestartOptions{
    39  		All:     query.All,
    40  		Timeout: &query.DockerTimeout,
    41  	}
    42  	if utils.IsLibpodRequest(r) {
    43  		options.Timeout = &query.LibpodTimeout
    44  	}
    45  	report, err := containerEngine.ContainerRestart(r.Context(), []string{name}, options)
    46  	if err != nil {
    47  		if errors.Cause(err) == define.ErrNoSuchCtr {
    48  			utils.ContainerNotFound(w, name, err)
    49  			return
    50  		}
    51  
    52  		utils.InternalServerError(w, err)
    53  		return
    54  	}
    55  
    56  	if len(report) > 0 && report[0].Err != nil {
    57  		utils.InternalServerError(w, report[0].Err)
    58  		return
    59  	}
    60  
    61  	// Success
    62  	utils.WriteResponse(w, http.StatusNoContent, nil)
    63  }