From 8d7428f31b2cac5e0e5c16881d6e84c2c1355f31 Mon Sep 17 00:00:00 2001 From: ayushmaheshwari Date: Wed, 29 Nov 2023 16:19:07 +0530 Subject: [PATCH 1/3] adding job delete options --- utils/k8s/K8sUtil.go | 21 +++++++++++---------- utils/k8s/bean.go | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 10 deletions(-) diff --git a/utils/k8s/K8sUtil.go b/utils/k8s/K8sUtil.go index 866ff95d..0fd8278a 100644 --- a/utils/k8s/K8sUtil.go +++ b/utils/k8s/K8sUtil.go @@ -382,22 +382,23 @@ func (impl K8sUtil) DeleteSecret(namespace string, name string, client *v12.Core return nil } -func (impl K8sUtil) DeleteJob(namespace string, name string, clusterConfig *ClusterConfig) error { - _, _, clientSet, err := impl.GetK8sConfigAndClients(clusterConfig) +func (impl K8sUtil) DeleteJob(jobName string, deleteAndCreateJobRequest *DeleteAndCreateJobRequest) error { + _, _, clientSet, err := impl.GetK8sConfigAndClients(deleteAndCreateJobRequest.ClusterConfig) if err != nil { impl.logger.Errorw("clientSet err, DeleteJob", "err", err) return err } - jobs := clientSet.BatchV1().Jobs(namespace) + jobs := clientSet.BatchV1().Jobs(deleteAndCreateJobRequest.Namespace) - job, err := jobs.Get(context.Background(), name, metav1.GetOptions{}) + job, err := jobs.Get(context.Background(), jobName, metav1.GetOptions{}) if err != nil && errors.IsNotFound(err) { impl.logger.Errorw("get job err, DeleteJob", "err", err) return nil } if job != nil { - err := jobs.Delete(context.Background(), name, metav1.DeleteOptions{}) + deleteOptions := deleteAndCreateJobRequest.GetK8sDeleteOptions() + err := jobs.Delete(context.Background(), jobName, deleteOptions) if err != nil && !errors.IsNotFound(err) { impl.logger.Errorw("delete err, DeleteJob", "err", err) return err @@ -559,30 +560,30 @@ func (impl K8sUtil) DeletePodByLabel(namespace string, labels string, clusterCon } // DeleteAndCreateJob Deletes and recreates if job exists else creates the job -func (impl K8sUtil) DeleteAndCreateJob(content []byte, namespace string, clusterConfig *ClusterConfig) error { +func (impl K8sUtil) DeleteAndCreateJob(deleteAndCreateJob *DeleteAndCreateJobRequest) error { // Job object from content var job batchV1.Job - err := yaml.Unmarshal(content, &job) + err := yaml.Unmarshal(deleteAndCreateJob.Content, &job) if err != nil { impl.logger.Errorw("Unmarshal err, CreateJobSafely", "err", err) return err } // delete job if exists - err = impl.DeleteJob(namespace, job.Name, clusterConfig) + err = impl.DeleteJob(job.Name, deleteAndCreateJob) if err != nil { impl.logger.Errorw("DeleteJobIfExists err, CreateJobSafely", "err", err) return err } labels := "job-name=" + job.Name - err = impl.DeletePodByLabel(namespace, labels, clusterConfig) + err = impl.DeletePodByLabel(deleteAndCreateJob.Namespace, labels, deleteAndCreateJob.ClusterConfig) if err != nil { impl.logger.Errorw("DeleteJobIfExists err, CreateJobSafely", "err", err) return err } // create job - err = impl.CreateJob(namespace, job.Name, clusterConfig, &job) + err = impl.CreateJob(deleteAndCreateJob.Namespace, job.Name, deleteAndCreateJob.ClusterConfig, &job) if err != nil { impl.logger.Errorw("CreateJob err, CreateJobSafely", "err", err) return err diff --git a/utils/k8s/bean.go b/utils/k8s/bean.go index 8999c5ad..f699c8ca 100644 --- a/utils/k8s/bean.go +++ b/utils/k8s/bean.go @@ -109,3 +109,42 @@ func GetResourceKey(obj *unstructured.Unstructured) ResourceKey { gvk := obj.GroupVersionKind() return NewResourceKey(gvk.Group, gvk.Kind, obj.GetNamespace(), obj.GetName()) } + +type DeletionPropagationOptions = string + +const ( + DeletePropagationOrphan DeletionPropagationOptions = "Orphan" + DeletePropagationBackground DeletionPropagationOptions = "Background" + DeletePropagationForeground DeletionPropagationOptions = "Foreground" +) + +type DeleteOptions struct { + Kind string + APIVersion string + GracePeriodSeconds *int64 + Preconditions string + OrphanDependents *bool + PropagationPolicy DeletionPropagationOptions + DryRun []string +} + +type DeleteAndCreateJobRequest struct { + Content []byte + Namespace string + ClusterConfig *ClusterConfig + DeleteOptions DeleteOptions +} + +func (impl DeleteAndCreateJobRequest) GetK8sDeleteOptions() v12.DeleteOptions { + deletionPropagation := v12.DeletionPropagation(impl.DeleteOptions.PropagationPolicy) + deleteOptions := v12.DeleteOptions{ + TypeMeta: v12.TypeMeta{ + Kind: impl.DeleteOptions.Kind, + APIVersion: impl.DeleteOptions.APIVersion, + }, + GracePeriodSeconds: impl.DeleteOptions.GracePeriodSeconds, + PropagationPolicy: &deletionPropagation, + DryRun: impl.DeleteOptions.DryRun, + } + return deleteOptions +} From 6c0f58a430321a28553b2b8d47d0956d1fa3aaf5 Mon Sep 17 00:00:00 2001 From: ayushmaheshwari Date: Wed, 29 Nov 2023 16:32:43 +0530 Subject: [PATCH 2/3] adding job delete options --- utils/k8s/bean.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/k8s/bean.go b/utils/k8s/bean.go index f699c8ca..800ad427 100644 --- a/utils/k8s/bean.go +++ b/utils/k8s/bean.go @@ -110,7 +110,7 @@ func GetResourceKey(obj *unstructured.Unstructured) ResourceKey { return NewResourceKey(gvk.Group, gvk.Kind, obj.GetNamespace(), obj.GetName()) } -type DeletionPropagationOptions = string +type DeletionPropagationOptions string const ( DeletePropagationOrphan DeletionPropagationOptions = "Orphan" From 128e40c27b836f11c8c6cbab38639282f0dcea99 Mon Sep 17 00:00:00 2001 From: ayushmaheshwari Date: Wed, 29 Nov 2023 18:15:24 +0530 Subject: [PATCH 3/3] nil check --- utils/k8s/bean.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/utils/k8s/bean.go b/utils/k8s/bean.go index 800ad427..2eec1382 100644 --- a/utils/k8s/bean.go +++ b/utils/k8s/bean.go @@ -132,19 +132,24 @@ type DeleteAndCreateJobRequest struct { Content []byte Namespace string ClusterConfig *ClusterConfig - DeleteOptions DeleteOptions + DeleteOptions *DeleteOptions } func (impl DeleteAndCreateJobRequest) GetK8sDeleteOptions() v12.DeleteOptions { - deletionPropagation := v12.DeletionPropagation(impl.DeleteOptions.PropagationPolicy) + if impl.DeleteOptions == nil { + return v12.DeleteOptions{} + } deleteOptions := v12.DeleteOptions{ TypeMeta: v12.TypeMeta{ Kind: impl.DeleteOptions.Kind, APIVersion: impl.DeleteOptions.APIVersion, }, GracePeriodSeconds: impl.DeleteOptions.GracePeriodSeconds, - PropagationPolicy: &deletionPropagation, DryRun: impl.DeleteOptions.DryRun, } + deletionPropagation := v12.DeletionPropagation(impl.DeleteOptions.PropagationPolicy) + if len(deletionPropagation) > 0 { + deleteOptions.PropagationPolicy = &deletionPropagation + } return deleteOptions }