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  }