Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 11 additions & 13 deletions cloudsmith/resource_repository_retention_rule.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,27 +27,25 @@ func resourceRepoRetentionRuleUpdate(d *schema.ResourceData, meta interface{}) e
repo := requiredString(d, "repository")

req := pc.APIClient.ReposApi.RepoRetentionPartialUpdate(pc.Auth, namespace, repo)

// For integer fields with defaults, we need to always send the value to handle
// the case where users explicitly set them to 0 (which would otherwise be
// indistinguishable from "not set" using GetOk)
retentionCountLimit := int64(d.Get("retention_count_limit").(int))
retentionDaysLimit := int64(d.Get("retention_days_limit").(int))

updateData := cloudsmith.RepositoryRetentionRulesRequestPatch{
RetentionEnabled: optionalBool(d, "retention_enabled"),
RetentionGroupByName: optionalBool(d, "retention_group_by_name"),
RetentionGroupByFormat: optionalBool(d, "retention_group_by_format"),
RetentionGroupByPackageType: optionalBool(d, "retention_group_by_package_type"),
RetentionPackageQueryString: nullableString(d, "retention_package_query_string"),
RetentionCountLimit: &retentionCountLimit,
RetentionDaysLimit: &retentionDaysLimit,
}

// Explicitly set these values, even if they're zero
if d.HasChange("retention_count_limit") {
value := int64(d.Get("retention_count_limit").(int))
updateData.RetentionCountLimit = &value
}
if d.HasChange("retention_days_limit") {
value := int64(d.Get("retention_days_limit").(int))
updateData.RetentionDaysLimit = &value
}
if d.HasChange("retention_size_limit") {
value := int64(d.Get("retention_size_limit").(int))
updateData.RetentionSizeLimit = &value
}
// retention_size_limit has no default, so use optionalInt64 to only send if set
updateData.RetentionSizeLimit = optionalInt64(d, "retention_size_limit")

req = req.Data(updateData)

Expand Down
56 changes: 42 additions & 14 deletions cloudsmith/resource_repository_retention_rule_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,34 +36,62 @@ func TestAccRepositoryRetentionRule_basic(t *testing.T) {
resource.TestCheckResourceAttr("cloudsmith_repository_retention_rule.test", "retention_package_query_string", "name:test"),
),
},
{
Config: testAccRepositoryRetentionRuleConfigZero,
Check: resource.ComposeTestCheckFunc(
testAccRepositoryCheckExists("cloudsmith_repository.test-retention"),
resource.TestCheckResourceAttr("cloudsmith_repository_retention_rule.test", "retention_count_limit", "0"),
resource.TestCheckResourceAttr("cloudsmith_repository_retention_rule.test", "retention_days_limit", "0"),
),
},
},
CheckDestroy: testAccRepositoryCheckDestroy("cloudsmith_repository.test-retention"),
})
}

var testAccRepositoryConfig = fmt.Sprintf(`
resource "cloudsmith_repository" "test-retention" {
name = "terraform-acc-repo-retention-rule"
namespace = "%s"
name = "terraform-acc-repo-retention-rule"
namespace = "%s"
}
`, os.Getenv("CLOUDSMITH_NAMESPACE"))

var testAccRepositoryRetentionRuleConfigBasic = fmt.Sprintf(`
resource "cloudsmith_repository" "test-retention" {
name = "terraform-acc-repo-retention-rule"
namespace = "%s"
name = "terraform-acc-repo-retention-rule"
namespace = "%s"
}

resource "cloudsmith_repository_retention_rule" "test" {
namespace = "%s"
repository = cloudsmith_repository.test-retention.name
retention_enabled = false
retention_count_limit = 100
retention_days_limit = 28
retention_group_by_name = false
retention_group_by_format = false
retention_group_by_package_type = false
retention_size_limit = 0
retention_package_query_string = "name:test"
}
`, os.Getenv("CLOUDSMITH_NAMESPACE"), os.Getenv("CLOUDSMITH_NAMESPACE"))

var testAccRepositoryRetentionRuleConfigZero = fmt.Sprintf(`
resource "cloudsmith_repository" "test-retention" {
name = "terraform-acc-repo-retention-rule"
namespace = "%s"
}

resource "cloudsmith_repository_retention_rule" "test" {
namespace = "%s"
repository = cloudsmith_repository.test-retention.name
retention_enabled = false
retention_count_limit = 100
retention_days_limit = 28
retention_group_by_name = false
retention_group_by_format = false
retention_group_by_package_type = false
retention_size_limit = 0
retention_package_query_string = "name:test"
namespace = "%s"
repository = cloudsmith_repository.test-retention.name
retention_enabled = false
retention_count_limit = 0
retention_days_limit = 0
retention_group_by_name = false
retention_group_by_format = false
retention_group_by_package_type = false
retention_size_limit = 0
retention_package_query_string = "name:test"
}
`, os.Getenv("CLOUDSMITH_NAMESPACE"), os.Getenv("CLOUDSMITH_NAMESPACE"))
Loading