@@ -26,15 +26,13 @@ func resourceRepoRetentionRuleUpdate(d *schema.ResourceData, meta interface{}) e
2626 namespace := requiredString (d , "namespace" )
2727 repo := requiredString (d , "repository" )
2828
29- // Check if the operation is a delete operation
30- isDelete := ! d .Get ("retention_enabled" ).(bool )
31-
3229 req := pc .APIClient .ReposApi .RepoRetentionPartialUpdate (pc .Auth , namespace , repo )
3330 updateData := cloudsmith.RepositoryRetentionRulesRequestPatch {
3431 RetentionEnabled : optionalBool (d , "retention_enabled" ),
3532 RetentionGroupByName : optionalBool (d , "retention_group_by_name" ),
3633 RetentionGroupByFormat : optionalBool (d , "retention_group_by_format" ),
3734 RetentionGroupByPackageType : optionalBool (d , "retention_group_by_package_type" ),
35+ RetentionPackageQueryString : nullableString (d , "retention_package_query_string" ),
3836 }
3937
4038 // Explicitly set these values, even if they're zero
@@ -53,13 +51,6 @@ func resourceRepoRetentionRuleUpdate(d *schema.ResourceData, meta interface{}) e
5351
5452 req = req .Data (updateData )
5553
56- // If it's a delete operation, disable the retention rule
57- if isDelete {
58- req = req .Data (cloudsmith.RepositoryRetentionRulesRequestPatch {
59- RetentionEnabled : cloudsmith .PtrBool (false ),
60- })
61- }
62-
6354 // Execute the request
6455 _ , httpResp , err := req .Execute ()
6556 if err != nil {
@@ -101,27 +92,59 @@ func resourceRepoRetentionRuleRead(d *schema.ResourceData, meta interface{}) err
10192 }
10293 }
10394
104- // Handle the response
10595 d .Set ("retention_count_limit" , resp .RetentionCountLimit )
10696 d .Set ("retention_days_limit" , resp .RetentionDaysLimit )
10797 d .Set ("retention_enabled" , resp .RetentionEnabled )
10898 d .Set ("retention_group_by_name" , resp .RetentionGroupByName )
10999 d .Set ("retention_group_by_format" , resp .RetentionGroupByFormat )
110100 d .Set ("retention_group_by_package_type" , resp .RetentionGroupByPackageType )
111101 d .Set ("retention_size_limit" , resp .RetentionSizeLimit )
112-
113- d .Set ("namespace" , namespace )
102+ if resp .RetentionPackageQueryString .IsSet () && resp .RetentionPackageQueryString .Get () != nil {
103+ d .Set ("retention_package_query_string" , * resp .RetentionPackageQueryString .Get ())
104+ } else {
105+ d .Set ("retention_package_query_string" , "" )
106+ }
114107 d .SetId (fmt .Sprintf ("%s.%s" , namespace , repo ))
115108
116109 return nil
117110}
118111
112+ func resourceRepoRetentionRuleDelete (d * schema.ResourceData , meta interface {}) error {
113+ pc := meta .(* providerConfig )
114+
115+ namespace := requiredString (d , "namespace" )
116+ repo := requiredString (d , "repository" )
117+
118+ req := pc .APIClient .ReposApi .RepoRetentionPartialUpdate (pc .Auth , namespace , repo )
119+ updateData := cloudsmith.RepositoryRetentionRulesRequestPatch {
120+ RetentionEnabled : cloudsmith .PtrBool (false ),
121+ }
122+ req = req .Data (updateData )
123+
124+ _ , httpResp , err := req .Execute ()
125+ if err != nil {
126+ switch httpResp .StatusCode {
127+ case 400 :
128+ return fmt .Errorf ("request could not be processed: %s" , err )
129+ case 404 :
130+ return nil
131+ case 422 :
132+ return fmt .Errorf ("missing or invalid parameters: %s" , err )
133+ default :
134+ return fmt .Errorf ("error disabling repository retention rule: %s" , err )
135+ }
136+ }
137+
138+ d .SetId ("" )
139+ return nil
140+ }
141+
119142func resourceRepoRetentionRule () * schema.Resource {
120143 return & schema.Resource {
121144 Create : resourceRepoRetentionRuleUpdate ,
122145 Read : resourceRepoRetentionRuleRead ,
123146 Update : resourceRepoRetentionRuleUpdate ,
124- Delete : resourceRepoRetentionRuleUpdate ,
147+ Delete : resourceRepoRetentionRuleDelete ,
125148 Importer : & schema.ResourceImporter {
126149 State : importRepoRetentionRule ,
127150 },
@@ -182,6 +205,11 @@ func resourceRepoRetentionRule() *schema.Resource {
182205 Optional : true ,
183206 Description : "The maximum total size (in bytes) of packages to retain. Must be between 0 and 21474836480 (21.47 GB / 21474.83 MB)." ,
184207 },
208+ "retention_package_query_string" : {
209+ Type : schema .TypeString ,
210+ Optional : true ,
211+ Description : "A package search expression which, if provided, filters the packages to be deleted." ,
212+ },
185213 },
186214 }
187215}
0 commit comments