summaryrefslogtreecommitdiff
path: root/pkg
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
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')
-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
-rw-r--r--pkg/bindings/kube/kube.go96
-rw-r--r--pkg/bindings/kube/types.go (renamed from pkg/bindings/play/types.go)8
-rw-r--r--pkg/bindings/kube/types_play_options.go (renamed from pkg/bindings/play/types_kube_options.go)78
-rw-r--r--pkg/bindings/play/play.go88
-rw-r--r--pkg/domain/entities/play.go2
-rw-r--r--pkg/domain/infra/tunnel/play.go5
11 files changed, 288 insertions, 244 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,
diff --git a/pkg/bindings/kube/kube.go b/pkg/bindings/kube/kube.go
new file mode 100644
index 000000000..b9cc0efa7
--- /dev/null
+++ b/pkg/bindings/kube/kube.go
@@ -0,0 +1,96 @@
+package kube
+
+import (
+ "context"
+ "io"
+ "net/http"
+ "os"
+ "strconv"
+
+ "github.com/containers/image/v5/types"
+ "github.com/containers/podman/v4/pkg/auth"
+ "github.com/containers/podman/v4/pkg/bindings"
+ "github.com/containers/podman/v4/pkg/domain/entities"
+ "github.com/sirupsen/logrus"
+)
+
+func Play(ctx context.Context, path string, options *PlayOptions) (*entities.KubePlayReport, error) {
+ f, err := os.Open(path)
+ if err != nil {
+ return nil, err
+ }
+ defer f.Close()
+
+ return PlayWithBody(ctx, f, options)
+}
+
+func PlayWithBody(ctx context.Context, body io.Reader, options *PlayOptions) (*entities.KubePlayReport, error) {
+ var report entities.KubePlayReport
+ if options == nil {
+ options = new(PlayOptions)
+ }
+
+ conn, err := bindings.GetClient(ctx)
+ if err != nil {
+ return nil, err
+ }
+
+ params, err := options.ToParams()
+ if err != nil {
+ return nil, err
+ }
+ if options.SkipTLSVerify != nil {
+ params.Set("tlsVerify", strconv.FormatBool(options.GetSkipTLSVerify()))
+ }
+ if options.Start != nil {
+ params.Set("start", strconv.FormatBool(options.GetStart()))
+ }
+
+ header, err := auth.MakeXRegistryAuthHeader(&types.SystemContext{AuthFilePath: options.GetAuthfile()}, options.GetUsername(), options.GetPassword())
+ if err != nil {
+ return nil, err
+ }
+
+ response, err := conn.DoRequest(ctx, body, http.MethodPost, "/kube/play", params, header)
+ if err != nil {
+ return nil, err
+ }
+ defer response.Body.Close()
+
+ if err := response.Process(&report); err != nil {
+ return nil, err
+ }
+
+ return &report, nil
+}
+
+func Down(ctx context.Context, path string) (*entities.KubePlayReport, error) {
+ f, err := os.Open(path)
+ if err != nil {
+ return nil, err
+ }
+ defer func() {
+ if err := f.Close(); err != nil {
+ logrus.Warn(err)
+ }
+ }()
+
+ return DownWithBody(ctx, f)
+}
+
+func DownWithBody(ctx context.Context, body io.Reader) (*entities.KubePlayReport, error) {
+ var report entities.KubePlayReport
+ conn, err := bindings.GetClient(ctx)
+ if err != nil {
+ return nil, err
+ }
+
+ response, err := conn.DoRequest(ctx, body, http.MethodDelete, "/kube/play", nil, nil)
+ if err != nil {
+ return nil, err
+ }
+ if err := response.Process(&report); err != nil {
+ return nil, err
+ }
+ return &report, nil
+}
diff --git a/pkg/bindings/play/types.go b/pkg/bindings/kube/types.go
index 5aaa87b8c..783d1912a 100644
--- a/pkg/bindings/play/types.go
+++ b/pkg/bindings/kube/types.go
@@ -1,12 +1,12 @@
-package play
+package kube
import (
"net"
)
-//go:generate go run ../generator/generator.go KubeOptions
-// KubeOptions are optional options for replaying kube YAML files
-type KubeOptions struct {
+//go:generate go run ../generator/generator.go PlayOptions
+// PlayOptions are optional options for replaying kube YAML files
+type PlayOptions struct {
// Annotations - Annotations to add to Pods
Annotations map[string]string
// Authfile - path to an authentication file.
diff --git a/pkg/bindings/play/types_kube_options.go b/pkg/bindings/kube/types_play_options.go
index 54c9a8e74..cdc2e9dd8 100644
--- a/pkg/bindings/play/types_kube_options.go
+++ b/pkg/bindings/kube/types_play_options.go
@@ -1,5 +1,5 @@
// Code generated by go generate; DO NOT EDIT.
-package play
+package kube
import (
"net"
@@ -9,23 +9,23 @@ import (
)
// Changed returns true if named field has been set
-func (o *KubeOptions) Changed(fieldName string) bool {
+func (o *PlayOptions) Changed(fieldName string) bool {
return util.Changed(o, fieldName)
}
// ToParams formats struct fields to be passed to API service
-func (o *KubeOptions) ToParams() (url.Values, error) {
+func (o *PlayOptions) ToParams() (url.Values, error) {
return util.ToParams(o)
}
// WithAnnotations set field Annotations to given value
-func (o *KubeOptions) WithAnnotations(value map[string]string) *KubeOptions {
+func (o *PlayOptions) WithAnnotations(value map[string]string) *PlayOptions {
o.Annotations = value
return o
}
// GetAnnotations returns value of field Annotations
-func (o *KubeOptions) GetAnnotations() map[string]string {
+func (o *PlayOptions) GetAnnotations() map[string]string {
if o.Annotations == nil {
var z map[string]string
return z
@@ -34,13 +34,13 @@ func (o *KubeOptions) GetAnnotations() map[string]string {
}
// WithAuthfile set field Authfile to given value
-func (o *KubeOptions) WithAuthfile(value string) *KubeOptions {
+func (o *PlayOptions) WithAuthfile(value string) *PlayOptions {
o.Authfile = &value
return o
}
// GetAuthfile returns value of field Authfile
-func (o *KubeOptions) GetAuthfile() string {
+func (o *PlayOptions) GetAuthfile() string {
if o.Authfile == nil {
var z string
return z
@@ -49,13 +49,13 @@ func (o *KubeOptions) GetAuthfile() string {
}
// WithCertDir set field CertDir to given value
-func (o *KubeOptions) WithCertDir(value string) *KubeOptions {
+func (o *PlayOptions) WithCertDir(value string) *PlayOptions {
o.CertDir = &value
return o
}
// GetCertDir returns value of field CertDir
-func (o *KubeOptions) GetCertDir() string {
+func (o *PlayOptions) GetCertDir() string {
if o.CertDir == nil {
var z string
return z
@@ -64,13 +64,13 @@ func (o *KubeOptions) GetCertDir() string {
}
// WithUsername set field Username to given value
-func (o *KubeOptions) WithUsername(value string) *KubeOptions {
+func (o *PlayOptions) WithUsername(value string) *PlayOptions {
o.Username = &value
return o
}
// GetUsername returns value of field Username
-func (o *KubeOptions) GetUsername() string {
+func (o *PlayOptions) GetUsername() string {
if o.Username == nil {
var z string
return z
@@ -79,13 +79,13 @@ func (o *KubeOptions) GetUsername() string {
}
// WithPassword set field Password to given value
-func (o *KubeOptions) WithPassword(value string) *KubeOptions {
+func (o *PlayOptions) WithPassword(value string) *PlayOptions {
o.Password = &value
return o
}
// GetPassword returns value of field Password
-func (o *KubeOptions) GetPassword() string {
+func (o *PlayOptions) GetPassword() string {
if o.Password == nil {
var z string
return z
@@ -94,13 +94,13 @@ func (o *KubeOptions) GetPassword() string {
}
// WithNetwork set field Network to given value
-func (o *KubeOptions) WithNetwork(value []string) *KubeOptions {
+func (o *PlayOptions) WithNetwork(value []string) *PlayOptions {
o.Network = &value
return o
}
// GetNetwork returns value of field Network
-func (o *KubeOptions) GetNetwork() []string {
+func (o *PlayOptions) GetNetwork() []string {
if o.Network == nil {
var z []string
return z
@@ -109,13 +109,13 @@ func (o *KubeOptions) GetNetwork() []string {
}
// WithNoHosts set field NoHosts to given value
-func (o *KubeOptions) WithNoHosts(value bool) *KubeOptions {
+func (o *PlayOptions) WithNoHosts(value bool) *PlayOptions {
o.NoHosts = &value
return o
}
// GetNoHosts returns value of field NoHosts
-func (o *KubeOptions) GetNoHosts() bool {
+func (o *PlayOptions) GetNoHosts() bool {
if o.NoHosts == nil {
var z bool
return z
@@ -124,13 +124,13 @@ func (o *KubeOptions) GetNoHosts() bool {
}
// WithQuiet set field Quiet to given value
-func (o *KubeOptions) WithQuiet(value bool) *KubeOptions {
+func (o *PlayOptions) WithQuiet(value bool) *PlayOptions {
o.Quiet = &value
return o
}
// GetQuiet returns value of field Quiet
-func (o *KubeOptions) GetQuiet() bool {
+func (o *PlayOptions) GetQuiet() bool {
if o.Quiet == nil {
var z bool
return z
@@ -139,13 +139,13 @@ func (o *KubeOptions) GetQuiet() bool {
}
// WithSignaturePolicy set field SignaturePolicy to given value
-func (o *KubeOptions) WithSignaturePolicy(value string) *KubeOptions {
+func (o *PlayOptions) WithSignaturePolicy(value string) *PlayOptions {
o.SignaturePolicy = &value
return o
}
// GetSignaturePolicy returns value of field SignaturePolicy
-func (o *KubeOptions) GetSignaturePolicy() string {
+func (o *PlayOptions) GetSignaturePolicy() string {
if o.SignaturePolicy == nil {
var z string
return z
@@ -154,13 +154,13 @@ func (o *KubeOptions) GetSignaturePolicy() string {
}
// WithSkipTLSVerify set field SkipTLSVerify to given value
-func (o *KubeOptions) WithSkipTLSVerify(value bool) *KubeOptions {
+func (o *PlayOptions) WithSkipTLSVerify(value bool) *PlayOptions {
o.SkipTLSVerify = &value
return o
}
// GetSkipTLSVerify returns value of field SkipTLSVerify
-func (o *KubeOptions) GetSkipTLSVerify() bool {
+func (o *PlayOptions) GetSkipTLSVerify() bool {
if o.SkipTLSVerify == nil {
var z bool
return z
@@ -169,13 +169,13 @@ func (o *KubeOptions) GetSkipTLSVerify() bool {
}
// WithSeccompProfileRoot set field SeccompProfileRoot to given value
-func (o *KubeOptions) WithSeccompProfileRoot(value string) *KubeOptions {
+func (o *PlayOptions) WithSeccompProfileRoot(value string) *PlayOptions {
o.SeccompProfileRoot = &value
return o
}
// GetSeccompProfileRoot returns value of field SeccompProfileRoot
-func (o *KubeOptions) GetSeccompProfileRoot() string {
+func (o *PlayOptions) GetSeccompProfileRoot() string {
if o.SeccompProfileRoot == nil {
var z string
return z
@@ -184,13 +184,13 @@ func (o *KubeOptions) GetSeccompProfileRoot() string {
}
// WithStaticIPs set field StaticIPs to given value
-func (o *KubeOptions) WithStaticIPs(value []net.IP) *KubeOptions {
+func (o *PlayOptions) WithStaticIPs(value []net.IP) *PlayOptions {
o.StaticIPs = &value
return o
}
// GetStaticIPs returns value of field StaticIPs
-func (o *KubeOptions) GetStaticIPs() []net.IP {
+func (o *PlayOptions) GetStaticIPs() []net.IP {
if o.StaticIPs == nil {
var z []net.IP
return z
@@ -199,13 +199,13 @@ func (o *KubeOptions) GetStaticIPs() []net.IP {
}
// WithStaticMACs set field StaticMACs to given value
-func (o *KubeOptions) WithStaticMACs(value []net.HardwareAddr) *KubeOptions {
+func (o *PlayOptions) WithStaticMACs(value []net.HardwareAddr) *PlayOptions {
o.StaticMACs = &value
return o
}
// GetStaticMACs returns value of field StaticMACs
-func (o *KubeOptions) GetStaticMACs() []net.HardwareAddr {
+func (o *PlayOptions) GetStaticMACs() []net.HardwareAddr {
if o.StaticMACs == nil {
var z []net.HardwareAddr
return z
@@ -214,13 +214,13 @@ func (o *KubeOptions) GetStaticMACs() []net.HardwareAddr {
}
// WithConfigMaps set field ConfigMaps to given value
-func (o *KubeOptions) WithConfigMaps(value []string) *KubeOptions {
+func (o *PlayOptions) WithConfigMaps(value []string) *PlayOptions {
o.ConfigMaps = &value
return o
}
// GetConfigMaps returns value of field ConfigMaps
-func (o *KubeOptions) GetConfigMaps() []string {
+func (o *PlayOptions) GetConfigMaps() []string {
if o.ConfigMaps == nil {
var z []string
return z
@@ -229,13 +229,13 @@ func (o *KubeOptions) GetConfigMaps() []string {
}
// WithLogDriver set field LogDriver to given value
-func (o *KubeOptions) WithLogDriver(value string) *KubeOptions {
+func (o *PlayOptions) WithLogDriver(value string) *PlayOptions {
o.LogDriver = &value
return o
}
// GetLogDriver returns value of field LogDriver
-func (o *KubeOptions) GetLogDriver() string {
+func (o *PlayOptions) GetLogDriver() string {
if o.LogDriver == nil {
var z string
return z
@@ -244,13 +244,13 @@ func (o *KubeOptions) GetLogDriver() string {
}
// WithLogOptions set field LogOptions to given value
-func (o *KubeOptions) WithLogOptions(value []string) *KubeOptions {
+func (o *PlayOptions) WithLogOptions(value []string) *PlayOptions {
o.LogOptions = &value
return o
}
// GetLogOptions returns value of field LogOptions
-func (o *KubeOptions) GetLogOptions() []string {
+func (o *PlayOptions) GetLogOptions() []string {
if o.LogOptions == nil {
var z []string
return z
@@ -259,13 +259,13 @@ func (o *KubeOptions) GetLogOptions() []string {
}
// WithStart set field Start to given value
-func (o *KubeOptions) WithStart(value bool) *KubeOptions {
+func (o *PlayOptions) WithStart(value bool) *PlayOptions {
o.Start = &value
return o
}
// GetStart returns value of field Start
-func (o *KubeOptions) GetStart() bool {
+func (o *PlayOptions) GetStart() bool {
if o.Start == nil {
var z bool
return z
@@ -274,13 +274,13 @@ func (o *KubeOptions) GetStart() bool {
}
// WithUserns set field Userns to given value
-func (o *KubeOptions) WithUserns(value string) *KubeOptions {
+func (o *PlayOptions) WithUserns(value string) *PlayOptions {
o.Userns = &value
return o
}
// GetUserns returns value of field Userns
-func (o *KubeOptions) GetUserns() string {
+func (o *PlayOptions) GetUserns() string {
if o.Userns == nil {
var z string
return z
diff --git a/pkg/bindings/play/play.go b/pkg/bindings/play/play.go
index 0261b0250..d5d649135 100644
--- a/pkg/bindings/play/play.go
+++ b/pkg/bindings/play/play.go
@@ -3,95 +3,25 @@ package play
import (
"context"
"io"
- "net/http"
- "os"
- "strconv"
- "github.com/containers/image/v5/types"
- "github.com/containers/podman/v4/pkg/auth"
- "github.com/containers/podman/v4/pkg/bindings"
+ "github.com/containers/podman/v4/pkg/bindings/kube"
"github.com/containers/podman/v4/pkg/domain/entities"
- "github.com/sirupsen/logrus"
)
-func Kube(ctx context.Context, path string, options *KubeOptions) (*entities.PlayKubeReport, error) {
- f, err := os.Open(path)
- if err != nil {
- return nil, err
- }
- defer f.Close()
+type KubeOptions = kube.PlayOptions
- return KubeWithBody(ctx, f, options)
+func Kube(ctx context.Context, path string, options *KubeOptions) (*entities.PlayKubeReport, error) {
+ return kube.Play(ctx, path, options)
}
func KubeWithBody(ctx context.Context, body io.Reader, options *KubeOptions) (*entities.PlayKubeReport, error) {
- var report entities.PlayKubeReport
- if options == nil {
- options = new(KubeOptions)
- }
-
- conn, err := bindings.GetClient(ctx)
- if err != nil {
- return nil, err
- }
-
- params, err := options.ToParams()
- if err != nil {
- return nil, err
- }
- if options.SkipTLSVerify != nil {
- params.Set("tlsVerify", strconv.FormatBool(options.GetSkipTLSVerify()))
- }
- if options.Start != nil {
- params.Set("start", strconv.FormatBool(options.GetStart()))
- }
-
- header, err := auth.MakeXRegistryAuthHeader(&types.SystemContext{AuthFilePath: options.GetAuthfile()}, options.GetUsername(), options.GetPassword())
- if err != nil {
- return nil, err
- }
-
- response, err := conn.DoRequest(ctx, body, http.MethodPost, "/play/kube", params, header)
- if err != nil {
- return nil, err
- }
- defer response.Body.Close()
-
- if err := response.Process(&report); err != nil {
- return nil, err
- }
-
- return &report, nil
+ return kube.PlayWithBody(ctx, body, options)
}
-func KubeDown(ctx context.Context, path string) (*entities.PlayKubeReport, error) {
- f, err := os.Open(path)
- if err != nil {
- return nil, err
- }
- defer func() {
- if err := f.Close(); err != nil {
- logrus.Warn(err)
- }
- }()
-
- return KubeDownWithBody(ctx, f)
+func Down(ctx context.Context, path string) (*entities.PlayKubeReport, error) {
+ return kube.Down(ctx, path)
}
-func KubeDownWithBody(ctx context.Context, body io.Reader) (*entities.PlayKubeReport, error) {
- var report entities.PlayKubeReport
- conn, err := bindings.GetClient(ctx)
- if err != nil {
- return nil, err
- }
-
- response, err := conn.DoRequest(ctx, body, http.MethodDelete, "/play/kube", nil, nil)
- if err != nil {
- return nil, err
- }
- if err := response.Process(&report); err != nil {
- return nil, err
- }
-
- return &report, nil
+func DownWithBody(ctx context.Context, body io.Reader) (*entities.PlayKubeReport, error) {
+ return kube.DownWithBody(ctx, body)
}
diff --git a/pkg/domain/entities/play.go b/pkg/domain/entities/play.go
index f1ba21650..35a5d8a4a 100644
--- a/pkg/domain/entities/play.go
+++ b/pkg/domain/entities/play.go
@@ -90,6 +90,8 @@ type PlayKubeReport struct {
PlayKubeTeardown
}
+type KubePlayReport = PlayKubeReport
+
// PlayKubeDownOptions are options for tearing down pods
type PlayKubeDownOptions struct{}
diff --git a/pkg/domain/infra/tunnel/play.go b/pkg/domain/infra/tunnel/play.go
index d731a1d6c..ee9195681 100644
--- a/pkg/domain/infra/tunnel/play.go
+++ b/pkg/domain/infra/tunnel/play.go
@@ -5,12 +5,13 @@ import (
"io"
"github.com/containers/image/v5/types"
+ "github.com/containers/podman/v4/pkg/bindings/kube"
"github.com/containers/podman/v4/pkg/bindings/play"
"github.com/containers/podman/v4/pkg/domain/entities"
)
func (ic *ContainerEngine) PlayKube(ctx context.Context, body io.Reader, opts entities.PlayKubeOptions) (*entities.PlayKubeReport, error) {
- options := new(play.KubeOptions).WithAuthfile(opts.Authfile).WithUsername(opts.Username).WithPassword(opts.Password)
+ options := new(kube.PlayOptions).WithAuthfile(opts.Authfile).WithUsername(opts.Username).WithPassword(opts.Password)
options.WithCertDir(opts.CertDir).WithQuiet(opts.Quiet).WithSignaturePolicy(opts.SignaturePolicy).WithConfigMaps(opts.ConfigMaps)
options.WithLogDriver(opts.LogDriver).WithNetwork(opts.Networks).WithSeccompProfileRoot(opts.SeccompProfileRoot)
options.WithStaticIPs(opts.StaticIPs).WithStaticMACs(opts.StaticMACs)
@@ -31,5 +32,5 @@ func (ic *ContainerEngine) PlayKube(ctx context.Context, body io.Reader, opts en
}
func (ic *ContainerEngine) PlayKubeDown(ctx context.Context, body io.Reader, _ entities.PlayKubeDownOptions) (*entities.PlayKubeReport, error) {
- return play.KubeDownWithBody(ic.ClientCtx, body)
+ return play.DownWithBody(ic.ClientCtx, body)
}