summaryrefslogtreecommitdiff
path: root/pkg/api/handlers
diff options
context:
space:
mode:
authoropenshift-ci[bot] <75433959+openshift-ci[bot]@users.noreply.github.com>2022-07-13 19:29:16 +0000
committerGitHub <noreply@github.com>2022-07-13 19:29:16 +0000
commit5c3eec55895c9ca4c36571e1e919f0cb8632bedb (patch)
tree711c52400d7bfa70c053cfde9a63d013d3e08bcd /pkg/api/handlers
parent5f8d08d593d625beaa224c48e7da945c4f90ea48 (diff)
parente08a77ce64eec5cd0192ae1970fa859c00440174 (diff)
downloadpodman-5c3eec55895c9ca4c36571e1e919f0cb8632bedb.tar.gz
podman-5c3eec55895c9ca4c36571e1e919f0cb8632bedb.tar.bz2
podman-5c3eec55895c9ca4c36571e1e919f0cb8632bedb.zip
Merge pull request #14772 from nicrowe00/12475
Add "podman kube play" cmd
Diffstat (limited to 'pkg/api/handlers')
-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
3 files changed, 126 insertions, 113 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
}