@@ -28,6 +28,7 @@ func resourceKubernetesJobV1() *schema.Resource {
2828 ReadContext : resourceKubernetesJobV1Read ,
2929 UpdateContext : resourceKubernetesJobV1Update ,
3030 DeleteContext : resourceKubernetesJobV1Delete ,
31+ CustomizeDiff : resourceKubernetesJobV1CustomizeDiff ,
3132 Importer : & schema.ResourceImporter {
3233 StateContext : schema .ImportStatePassthroughContext ,
3334 },
@@ -48,6 +49,42 @@ func resourceKubernetesJobV1() *schema.Resource {
4849 }
4950}
5051
52+ func resourceKubernetesJobV1CustomizeDiff (ctx context.Context , d * schema.ResourceDiff , meta interface {}) error {
53+ if d .Id () == "" {
54+ log .Printf ("[DEBUG] Resource ID is empty, resource not created yet." )
55+ return nil
56+ }
57+
58+ conn , err := meta .(KubeClientsets ).MainClientset ()
59+ if err != nil {
60+ return err
61+ }
62+
63+ namespace , name , err := idParts (d .Id ())
64+ if err != nil {
65+ return err
66+ }
67+
68+ ttlAttr := d .Get ("spec.0.ttl_seconds_after_finished" )
69+ ttlSeconds , ok := ttlAttr .(int )
70+ if ! ok || ttlSeconds != 0 {
71+ return nil
72+ }
73+
74+ // getting the job
75+ _ , err = conn .BatchV1 ().Jobs (namespace ).Get (ctx , name , metav1.GetOptions {})
76+ if err != nil {
77+ if errors .IsNotFound (err ) {
78+ // Suppress diff
79+ d .Clear ("spec" )
80+ d .Clear ("metadata" )
81+ return nil
82+ }
83+ return err
84+ }
85+ return nil
86+ }
87+
5188func resourceKubernetesJobV1Schema () map [string ]* schema.Schema {
5289 return map [string ]* schema.Schema {
5390 "metadata" : jobMetadataSchema (),
@@ -118,8 +155,17 @@ func resourceKubernetesJobV1Read(ctx context.Context, d *schema.ResourceData, me
118155 return diag .FromErr (err )
119156 }
120157 if ! exists {
121- d .SetId ("" )
122- return diag.Diagnostics {}
158+ // Check if ttl_seconds_after_finished is set
159+ if ttl , ok := d .GetOk ("spec.0.ttl_seconds_after_finished" ); ok {
160+ // ttl_seconds_after_finished is set, Job is deleted due to TTL
161+ // We don't need to remove the resource from the state
162+ log .Printf ("[INFO] Job %s has been deleted by Kubernetes due to TTL (ttl_seconds_after_finished = %v), keeping resource in state" , d .Id (), ttl )
163+ return diag.Diagnostics {}
164+ } else {
165+ // ttl_seconds_after_finished is not set, remove the resource from the state
166+ d .SetId ("" )
167+ return diag.Diagnostics {}
168+ }
123169 }
124170 conn , err := meta .(KubeClientsets ).MainClientset ()
125171 if err != nil {
0 commit comments