summaryrefslogtreecommitdiff
path: root/pkg/bindings/kube/kube.go
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/bindings/kube/kube.go
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/bindings/kube/kube.go')
-rw-r--r--pkg/bindings/kube/kube.go96
1 files changed, 96 insertions, 0 deletions
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
+}