atlassian / terraform-provider-artifactory

Terraform provider to manage Artifactory
Apache License 2.0
89 stars 42 forks source link

Strings that change to empty fail to be updated. #97

Open medains opened 3 years ago

medains commented 3 years ago

Community Note

Terraform Version

terraform 0.13.2

Affected Resource(s)

Probably all resources that have string fields that it is valid to be the empty string.

Terraform Configuration Files

Using gocenter.io as a remote for the purposes of this example

Initial state

resource "artifactory_remote_repository" "someremote" {
  url             = "https://gocenter.io"
  key             = "gocenter"
  package_type    = "go"
  repo_layout_ref = "go-default"
  proxy           = "someproxy"
}

Second apply

resource "artifactory_remote_repository" "someremote" {
  url             = "https://gocenter.io"
  key             = "gocenter"
  package_type    = "go"
  repo_layout_ref = "go-default"
  proxy           = ""
}

Expected Behavior

Proxy should have been removed with a change of

proxy "someproxy" -> ""

Actual Behavior

Proxy field not passed to the API, as it got reduced to null

proxy "someproxy" => null

This retains the value "someproxy" in the remote.

Steps to Reproduce

This affects any string field in which changing the field to "" in the API would be a valid change.

  1. terraform apply with initial state
  2. terraform apply after changing a string field to ""

Possible fix

At https://github.com/atlassian/terraform-provider-artifactory/blob/master/pkg/artifactory/util.go#L15 d.GetOk(key) should perhaps be d.GetOkExists(key) so that empty strings are not treated as null

peters95 commented 3 years ago

migrated -> https://github.com/jfrog/terraform-provider-artifactory/issues/18