github.com/hanks177/podman/v4@v4.1.3-0.20220613032544-16d90015bc83/pkg/bindings/play/play.go (about) 1 package play 2 3 import ( 4 "context" 5 "io" 6 "net/http" 7 "os" 8 "strconv" 9 10 "github.com/containers/image/v5/types" 11 "github.com/hanks177/podman/v4/pkg/auth" 12 "github.com/hanks177/podman/v4/pkg/bindings" 13 "github.com/hanks177/podman/v4/pkg/domain/entities" 14 "github.com/sirupsen/logrus" 15 ) 16 17 func Kube(ctx context.Context, path string, options *KubeOptions) (*entities.PlayKubeReport, error) { 18 f, err := os.Open(path) 19 if err != nil { 20 return nil, err 21 } 22 defer f.Close() 23 24 return KubeWithBody(ctx, f, options) 25 } 26 27 func KubeWithBody(ctx context.Context, body io.Reader, options *KubeOptions) (*entities.PlayKubeReport, error) { 28 var report entities.PlayKubeReport 29 if options == nil { 30 options = new(KubeOptions) 31 } 32 33 conn, err := bindings.GetClient(ctx) 34 if err != nil { 35 return nil, err 36 } 37 38 params, err := options.ToParams() 39 if err != nil { 40 return nil, err 41 } 42 if options.SkipTLSVerify != nil { 43 params.Set("tlsVerify", strconv.FormatBool(options.GetSkipTLSVerify())) 44 } 45 if options.Start != nil { 46 params.Set("start", strconv.FormatBool(options.GetStart())) 47 } 48 49 header, err := auth.MakeXRegistryAuthHeader(&types.SystemContext{AuthFilePath: options.GetAuthfile()}, options.GetUsername(), options.GetPassword()) 50 if err != nil { 51 return nil, err 52 } 53 54 response, err := conn.DoRequest(ctx, body, http.MethodPost, "/play/kube", params, header) 55 if err != nil { 56 return nil, err 57 } 58 defer response.Body.Close() 59 60 if err := response.Process(&report); err != nil { 61 return nil, err 62 } 63 64 return &report, nil 65 } 66 67 func KubeDown(ctx context.Context, path string) (*entities.PlayKubeReport, error) { 68 f, err := os.Open(path) 69 if err != nil { 70 return nil, err 71 } 72 defer func() { 73 if err := f.Close(); err != nil { 74 logrus.Warn(err) 75 } 76 }() 77 78 return KubeDownWithBody(ctx, f) 79 } 80 81 func KubeDownWithBody(ctx context.Context, body io.Reader) (*entities.PlayKubeReport, error) { 82 var report entities.PlayKubeReport 83 conn, err := bindings.GetClient(ctx) 84 if err != nil { 85 return nil, err 86 } 87 88 response, err := conn.DoRequest(ctx, body, http.MethodDelete, "/play/kube", nil, nil) 89 if err != nil { 90 return nil, err 91 } 92 if err := response.Process(&report); err != nil { 93 return nil, err 94 } 95 96 return &report, nil 97 }