aboutsummaryrefslogtreecommitdiff
path: root/pkg/api
diff options
context:
space:
mode:
authorNiall Crowe <nicrowe@redhat.com>2022-06-24 15:43:05 +0100
committerNiall Crowe <nicrowe@redhat.com>2022-07-13 15:27:03 +0100
commite08a77ce64eec5cd0192ae1970fa859c00440174 (patch)
tree434b8a11abe0eb43a5a4e5e99ac4e04fdcc1730f /pkg/api
parent4df6122aaa3bc858e9488d366a2c9c91b6671170 (diff)
downloadpodman-e08a77ce64eec5cd0192ae1970fa859c00440174.tar.gz
podman-e08a77ce64eec5cd0192ae1970fa859c00440174.tar.bz2
podman-e08a77ce64eec5cd0192ae1970fa859c00440174.zip
Add "podman kube play" cmd
The "podman kube play" command is designed to be a replacement for the "podman play kube" command. It performs the same function as "play kube" while also still working with the same flags and options. The "podman play kube" command is still functional as an alias of "kube play". Closes #12475 Signed-off-by: Niall Crowe <nicrowe@redhat.com> Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
Diffstat (limited to 'pkg/api')
-rw-r--r--pkg/api/handlers/libpod/kube.go123
-rw-r--r--pkg/api/handlers/libpod/play.go114
-rw-r--r--pkg/api/handlers/swagger/responses.go2
-rw-r--r--pkg/api/server/register_kube.go (renamed from pkg/api/server/register_play.go)14
-rw-r--r--pkg/api/server/server.go2
5 files changed, 135 insertions, 120 deletions
diff --git a/pkg/api/handlers/libpod/kube.go b/pkg/api/handlers/libpod/kube.go
new file mode 100644
index 000000000..6cad58795
--- /dev/null
+++ b/pkg/api/handlers/libpod/kube.go
@@ -0,0 +1,123 @@
+package libpod
+
+import (
+ "fmt"
+ "net"
+ "net/http"
+
+ "github.com/containers/image/v5/types"
+ "github.com/containers/podman/v4/libpod"
+ "github.com/containers/podman/v4/pkg/api/handlers/utils"
+ api "github.com/containers/podman/v4/pkg/api/types"
+ "github.com/containers/podman/v4/pkg/auth"
+ "github.com/containers/podman/v4/pkg/domain/entities"
+ "github.com/containers/podman/v4/pkg/domain/infra/abi"
+ "github.com/gorilla/schema"
+)
+
+func KubePlay(w http.ResponseWriter, r *http.Request) {
+ runtime := r.Context().Value(api.RuntimeKey).(*libpod.Runtime)
+ decoder := r.Context().Value(api.DecoderKey).(*schema.Decoder)
+ query := struct {
+ Annotations map[string]string `schema:"annotations"`
+ Network []string `schema:"network"`
+ TLSVerify bool `schema:"tlsVerify"`
+ LogDriver string `schema:"logDriver"`
+ LogOptions []string `schema:"logOptions"`
+ Start bool `schema:"start"`
+ StaticIPs []string `schema:"staticIPs"`
+ StaticMACs []string `schema:"staticMACs"`
+ NoHosts bool `schema:"noHosts"`
+ }{
+ TLSVerify: true,
+ Start: true,
+ }
+
+ if err := decoder.Decode(&query, r.URL.Query()); err != nil {
+ utils.Error(w, http.StatusBadRequest, fmt.Errorf("failed to parse parameters for %s: %w", r.URL.String(), err))
+ return
+ }
+
+ staticIPs := make([]net.IP, 0, len(query.StaticIPs))
+ for _, ipString := range query.StaticIPs {
+ ip := net.ParseIP(ipString)
+ if ip == nil {
+ utils.Error(w, http.StatusBadRequest, fmt.Errorf("invalid IP address %s", ipString))
+ return
+ }
+ staticIPs = append(staticIPs, ip)
+ }
+
+ staticMACs := make([]net.HardwareAddr, 0, len(query.StaticMACs))
+ for _, macString := range query.StaticMACs {
+ mac, err := net.ParseMAC(macString)
+ if err != nil {
+ utils.Error(w, http.StatusBadRequest, err)
+ return
+ }
+ staticMACs = append(staticMACs, mac)
+ }
+
+ authConf, authfile, err := auth.GetCredentials(r)
+ if err != nil {
+ utils.Error(w, http.StatusBadRequest, err)
+ return
+ }
+ defer auth.RemoveAuthfile(authfile)
+ var username, password string
+ if authConf != nil {
+ username = authConf.Username
+ password = authConf.Password
+ }
+
+ logDriver := query.LogDriver
+ if logDriver == "" {
+ config, err := runtime.GetConfig()
+ if err != nil {
+ utils.Error(w, http.StatusInternalServerError, err)
+ return
+ }
+ logDriver = config.Containers.LogDriver
+ }
+
+ containerEngine := abi.ContainerEngine{Libpod: runtime}
+ options := entities.PlayKubeOptions{
+ Annotations: query.Annotations,
+ Authfile: authfile,
+ Username: username,
+ Password: password,
+ Networks: query.Network,
+ NoHosts: query.NoHosts,
+ Quiet: true,
+ LogDriver: logDriver,
+ LogOptions: query.LogOptions,
+ StaticIPs: staticIPs,
+ StaticMACs: staticMACs,
+ }
+ if _, found := r.URL.Query()["tlsVerify"]; found {
+ options.SkipTLSVerify = types.NewOptionalBool(!query.TLSVerify)
+ }
+ if _, found := r.URL.Query()["start"]; found {
+ options.Start = types.NewOptionalBool(query.Start)
+ }
+ report, err := containerEngine.PlayKube(r.Context(), r.Body, options)
+ _ = r.Body.Close()
+ if err != nil {
+ utils.Error(w, http.StatusInternalServerError, fmt.Errorf("error playing YAML file: %w", err))
+ return
+ }
+ utils.WriteResponse(w, http.StatusOK, report)
+}
+
+func KubePlayDown(w http.ResponseWriter, r *http.Request) {
+ runtime := r.Context().Value(api.RuntimeKey).(*libpod.Runtime)
+ containerEngine := abi.ContainerEngine{Libpod: runtime}
+ options := new(entities.PlayKubeDownOptions)
+ report, err := containerEngine.PlayKubeDown(r.Context(), r.Body, *options)
+ _ = r.Body.Close()
+ if err != nil {
+ utils.Error(w, http.StatusInternalServerError, fmt.Errorf("error tearing down YAML file: %w", err))
+ return
+ }
+ utils.WriteResponse(w, http.StatusOK, report)
+}
diff --git a/pkg/api/handlers/libpod/play.go b/pkg/api/handlers/libpod/play.go
index f8ce52a72..74830badb 100644
--- a/pkg/api/handlers/libpod/play.go
+++ b/pkg/api/handlers/libpod/play.go
@@ -1,123 +1,13 @@
package libpod
import (
- "fmt"
- "net"
"net/http"
-
- "github.com/containers/image/v5/types"
- "github.com/containers/podman/v4/libpod"
- "github.com/containers/podman/v4/pkg/api/handlers/utils"
- api "github.com/containers/podman/v4/pkg/api/types"
- "github.com/containers/podman/v4/pkg/auth"
- "github.com/containers/podman/v4/pkg/domain/entities"
- "github.com/containers/podman/v4/pkg/domain/infra/abi"
- "github.com/gorilla/schema"
)
func PlayKube(w http.ResponseWriter, r *http.Request) {
- runtime := r.Context().Value(api.RuntimeKey).(*libpod.Runtime)
- decoder := r.Context().Value(api.DecoderKey).(*schema.Decoder)
- query := struct {
- Annotations map[string]string `schema:"annotations"`
- Network []string `schema:"network"`
- TLSVerify bool `schema:"tlsVerify"`
- LogDriver string `schema:"logDriver"`
- LogOptions []string `schema:"logOptions"`
- Start bool `schema:"start"`
- StaticIPs []string `schema:"staticIPs"`
- StaticMACs []string `schema:"staticMACs"`
- NoHosts bool `schema:"noHosts"`
- }{
- TLSVerify: true,
- Start: true,
- }
-
- if err := decoder.Decode(&query, r.URL.Query()); err != nil {
- utils.Error(w, http.StatusBadRequest, fmt.Errorf("failed to parse parameters for %s: %w", r.URL.String(), err))
- return
- }
-
- staticIPs := make([]net.IP, 0, len(query.StaticIPs))
- for _, ipString := range query.StaticIPs {
- ip := net.ParseIP(ipString)
- if ip == nil {
- utils.Error(w, http.StatusBadRequest, fmt.Errorf("invalid IP address %s", ipString))
- return
- }
- staticIPs = append(staticIPs, ip)
- }
-
- staticMACs := make([]net.HardwareAddr, 0, len(query.StaticMACs))
- for _, macString := range query.StaticMACs {
- mac, err := net.ParseMAC(macString)
- if err != nil {
- utils.Error(w, http.StatusBadRequest, err)
- return
- }
- staticMACs = append(staticMACs, mac)
- }
-
- authConf, authfile, err := auth.GetCredentials(r)
- if err != nil {
- utils.Error(w, http.StatusBadRequest, err)
- return
- }
- defer auth.RemoveAuthfile(authfile)
- var username, password string
- if authConf != nil {
- username = authConf.Username
- password = authConf.Password
- }
-
- logDriver := query.LogDriver
- if logDriver == "" {
- config, err := runtime.GetConfig()
- if err != nil {
- utils.Error(w, http.StatusInternalServerError, err)
- return
- }
- logDriver = config.Containers.LogDriver
- }
-
- containerEngine := abi.ContainerEngine{Libpod: runtime}
- options := entities.PlayKubeOptions{
- Annotations: query.Annotations,
- Authfile: authfile,
- Username: username,
- Password: password,
- Networks: query.Network,
- NoHosts: query.NoHosts,
- Quiet: true,
- LogDriver: logDriver,
- LogOptions: query.LogOptions,
- StaticIPs: staticIPs,
- StaticMACs: staticMACs,
- }
- if _, found := r.URL.Query()["tlsVerify"]; found {
- options.SkipTLSVerify = types.NewOptionalBool(!query.TLSVerify)
- }
- if _, found := r.URL.Query()["start"]; found {
- options.Start = types.NewOptionalBool(query.Start)
- }
- report, err := containerEngine.PlayKube(r.Context(), r.Body, options)
- _ = r.Body.Close()
- if err != nil {
- utils.Error(w, http.StatusInternalServerError, fmt.Errorf("error playing YAML file: %w", err))
- return
- }
- utils.WriteResponse(w, http.StatusOK, report)
+ KubePlay(w, r)
}
func PlayKubeDown(w http.ResponseWriter, r *http.Request) {
- runtime := r.Context().Value(api.RuntimeKey).(*libpod.Runtime)
- containerEngine := abi.ContainerEngine{Libpod: runtime}
- options := new(entities.PlayKubeDownOptions)
- report, err := containerEngine.PlayKubeDown(r.Context(), r.Body, *options)
- _ = r.Body.Close()
- if err != nil {
- utils.Error(w, http.StatusInternalServerError, fmt.Errorf("error tearing down YAML file: %w", err))
- return
- }
- utils.WriteResponse(w, http.StatusOK, report)
+ KubePlayDown(w, r)
}
diff --git a/pkg/api/handlers/swagger/responses.go b/pkg/api/handlers/swagger/responses.go
index 93a508b39..5731f8edd 100644
--- a/pkg/api/handlers/swagger/responses.go
+++ b/pkg/api/handlers/swagger/responses.go
@@ -71,7 +71,7 @@ type imagesRemoveResponseLibpod struct {
// PlayKube response
// swagger:response
-type playKubeResponseLibpod struct {
+type kubePlayResponseLibpod struct {
// in:body
Body entities.PlayKubeReport
}
diff --git a/pkg/api/server/register_play.go b/pkg/api/server/register_kube.go
index 35da80ccc..6ae9e8123 100644
--- a/pkg/api/server/register_play.go
+++ b/pkg/api/server/register_kube.go
@@ -7,8 +7,8 @@ import (
"github.com/gorilla/mux"
)
-func (s *APIServer) registerPlayHandlers(r *mux.Router) error {
- // swagger:operation POST /libpod/play/kube libpod PlayKubeLibpod
+func (s *APIServer) registerKubeHandlers(r *mux.Router) error {
+ // swagger:operation POST /libpod/kube/play libpod KubePlayLibpod
// ---
// tags:
// - containers
@@ -57,24 +57,26 @@ func (s *APIServer) registerPlayHandlers(r *mux.Router) error {
// - application/json
// responses:
// 200:
- // $ref: "#/responses/playKubeResponseLibpod"
+ // $ref: "#/responses/kubePlayResponseLibpod"
// 500:
// $ref: "#/responses/internalError"
+ r.HandleFunc(VersionedPath("/libpod/kube/play"), s.APIHandler(libpod.KubePlay)).Methods(http.MethodPost)
r.HandleFunc(VersionedPath("/libpod/play/kube"), s.APIHandler(libpod.PlayKube)).Methods(http.MethodPost)
- // swagger:operation DELETE /libpod/play/kube libpod PlayKubeDownLibpod
+ // swagger:operation DELETE /libpod/kube/play libpod KubePlayDownLibpod
// ---
// tags:
// - containers
// - pods
- // summary: Remove pods from play kube
+ // summary: Remove pods from kube play
// description: Tears down pods defined in a YAML file
// produces:
// - application/json
// responses:
// 200:
- // $ref: "#/responses/playKubeResponseLibpod"
+ // $ref: "#/responses/kubePlayResponseLibpod"
// 500:
// $ref: "#/responses/internalError"
+ r.HandleFunc(VersionedPath("/libpod/kube/play"), s.APIHandler(libpod.KubePlayDown)).Methods(http.MethodDelete)
r.HandleFunc(VersionedPath("/libpod/play/kube"), s.APIHandler(libpod.PlayKubeDown)).Methods(http.MethodDelete)
return nil
}
diff --git a/pkg/api/server/server.go b/pkg/api/server/server.go
index 5482a8ec2..a6d8b5e4c 100644
--- a/pkg/api/server/server.go
+++ b/pkg/api/server/server.go
@@ -126,11 +126,11 @@ func newServer(runtime *libpod.Runtime, listener net.Listener, opts entities.Ser
server.registerHealthCheckHandlers,
server.registerImagesHandlers,
server.registerInfoHandlers,
+ server.registerKubeHandlers,
server.registerManifestHandlers,
server.registerMonitorHandlers,
server.registerNetworkHandlers,
server.registerPingHandlers,
- server.registerPlayHandlers,
server.registerPluginsHandlers,
server.registerPodsHandlers,
server.registerSecretHandlers,