summaryrefslogtreecommitdiff
path: root/pkg/bindings/kube/kube.go
diff options
context:
space:
mode:
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
+}