github.com/redhat-appstudio/e2e-tests@v0.0.0-20240520140907-9709f6f59323/pkg/clients/release/plans.go (about)

     1  package release
     2  
     3  import (
     4  	"context"
     5  	"strconv"
     6  
     7  	"github.com/redhat-appstudio/release-service/tekton/utils"
     8  	"k8s.io/apimachinery/pkg/runtime"
     9  
    10  	releaseApi "github.com/redhat-appstudio/release-service/api/v1alpha1"
    11  	releaseMetadata "github.com/redhat-appstudio/release-service/metadata"
    12  	k8sErrors "k8s.io/apimachinery/pkg/api/errors"
    13  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    14  	"k8s.io/apimachinery/pkg/types"
    15  )
    16  
    17  // CreateReleasePlan creates a new ReleasePlan using the given parameters.
    18  func (r *ReleaseController) CreateReleasePlan(name, namespace, application, targetNamespace, autoReleaseLabel string, data *runtime.RawExtension) (*releaseApi.ReleasePlan, error) {
    19  	var releasePlan *releaseApi.ReleasePlan = &releaseApi.ReleasePlan{
    20  		ObjectMeta: metav1.ObjectMeta{
    21  			GenerateName: name,
    22  			Name:         name,
    23  			Namespace:    namespace,
    24  			Labels: map[string]string{
    25  				releaseMetadata.AutoReleaseLabel: autoReleaseLabel,
    26  				releaseMetadata.AttributionLabel: "true",
    27  			},
    28  		},
    29  		Spec: releaseApi.ReleasePlanSpec{
    30  			Application: application,
    31  			Data:        data,
    32  			Target:      targetNamespace,
    33  		},
    34  	}
    35  	if autoReleaseLabel == "" || autoReleaseLabel == "true" {
    36  		releasePlan.ObjectMeta.Labels[releaseMetadata.AutoReleaseLabel] = "true"
    37  	} else {
    38  		releasePlan.ObjectMeta.Labels[releaseMetadata.AutoReleaseLabel] = "false"
    39  	}
    40  
    41  	return releasePlan, r.KubeRest().Create(context.Background(), releasePlan)
    42  }
    43  
    44  // CreateReleasePlanAdmission creates a new ReleasePlanAdmission using the given parameters.
    45  func (r *ReleaseController) CreateReleasePlanAdmission(name, namespace, environment, origin, policy, serviceAccount string, applications []string, autoRelease bool, pipelineRef *utils.PipelineRef, data *runtime.RawExtension) (*releaseApi.ReleasePlanAdmission, error) {
    46  	releasePlanAdmission := &releaseApi.ReleasePlanAdmission{
    47  		ObjectMeta: metav1.ObjectMeta{
    48  			Name:      name,
    49  			Namespace: namespace,
    50  			Labels: map[string]string{
    51  				releaseMetadata.AutoReleaseLabel: strconv.FormatBool(autoRelease),
    52  			},
    53  		},
    54  		Spec: releaseApi.ReleasePlanAdmissionSpec{
    55  			Applications: applications,
    56  			Data:         data,
    57  			Environment:  environment,
    58  			Origin:       origin,
    59  			Pipeline: &utils.Pipeline{
    60  				PipelineRef:    *pipelineRef,
    61  				ServiceAccount: serviceAccount,
    62  			},
    63  			Policy: policy,
    64  		},
    65  	}
    66  
    67  	return releasePlanAdmission, r.KubeRest().Create(context.Background(), releasePlanAdmission)
    68  }
    69  
    70  // GetReleasePlan returns the ReleasePlan with the given name in the given namespace.
    71  func (r *ReleaseController) GetReleasePlan(name, namespace string) (*releaseApi.ReleasePlan, error) {
    72  	releasePlan := &releaseApi.ReleasePlan{}
    73  
    74  	err := r.KubeRest().Get(context.Background(), types.NamespacedName{
    75  		Name:      name,
    76  		Namespace: namespace,
    77  	}, releasePlan)
    78  
    79  	return releasePlan, err
    80  }
    81  
    82  // GetReleasePlanAdmission returns the ReleasePlanAdmission with the given name in the given namespace.
    83  func (r *ReleaseController) GetReleasePlanAdmission(name, namespace string) (*releaseApi.ReleasePlanAdmission, error) {
    84  	releasePlanAdmission := &releaseApi.ReleasePlanAdmission{}
    85  
    86  	err := r.KubeRest().Get(context.Background(), types.NamespacedName{
    87  		Name:      name,
    88  		Namespace: namespace,
    89  	}, releasePlanAdmission)
    90  
    91  	return releasePlanAdmission, err
    92  }
    93  
    94  // DeleteReleasePlan deletes a given ReleasePlan name in given namespace.
    95  func (r *ReleaseController) DeleteReleasePlan(name, namespace string, failOnNotFound bool) error {
    96  	releasePlan := &releaseApi.ReleasePlan{
    97  		ObjectMeta: metav1.ObjectMeta{
    98  			Name:      name,
    99  			Namespace: namespace,
   100  		},
   101  	}
   102  	err := r.KubeRest().Delete(context.Background(), releasePlan)
   103  	if err != nil && !failOnNotFound && k8sErrors.IsNotFound(err) {
   104  		err = nil
   105  	}
   106  	return err
   107  }
   108  
   109  // DeleteReleasePlanAdmission deletes the ReleasePlanAdmission resource with the given name from the given namespace.
   110  // Optionally, it can avoid returning an error if the resource did not exist:
   111  // specify 'false', if it's likely the ReleasePlanAdmission has already been deleted (for example, because the Namespace was deleted)
   112  func (r *ReleaseController) DeleteReleasePlanAdmission(name, namespace string, failOnNotFound bool) error {
   113  	releasePlanAdmission := releaseApi.ReleasePlanAdmission{
   114  		ObjectMeta: metav1.ObjectMeta{
   115  			Name:      name,
   116  			Namespace: namespace,
   117  		},
   118  	}
   119  	err := r.KubeRest().Delete(context.Background(), &releasePlanAdmission)
   120  	if err != nil && !failOnNotFound && k8sErrors.IsNotFound(err) {
   121  		err = nil
   122  	}
   123  	return err
   124  }