fivetran / terraform-provider-fivetran

Terraform Provider for Fivetran
https://fivetran.com
Apache License 2.0
40 stars 23 forks source link

Provider produced inconsistent result after apply - dynamo, amplitude, business central connectors #258

Closed ann8ty closed 6 months ago

ann8ty commented 8 months ago

Describe the bug A clear and concise description of what the bug is.

Been stuck on 0.7.3 because of business central connector not existing. Now in 1.1.11 it exists, so I attempted to upgrade. Unsucessful.

To Reproduce Provide an example .tf configuration

amplitude:

data "aws_secretsmanager_secret" "amplitude_app_secret_by_name" {
  name = "${var.tags.Environment}-amplitude"
}

data "aws_secretsmanager_secret_version" "amplitude_app_secret" {
  secret_id = data.aws_secretsmanager_secret.amplitude_app_secret_by_name.id
}

resource "fivetran_connector" "amplitude_connector" {
  group_id           = data.aws_ssm_parameter.fivetran_group_id_external_id_versioned.value
  service            = "amplitude"
  run_setup_tests    = true
  trust_fingerprints = true
  trust_certificates = true

  destination_schema {
    name = local.amplitude_connector_name
  }

  config {
    project_credentials {
      project    = jsondecode(data.aws_secretsmanager_secret_version.amplitude_app_secret.secret_string)["project_name"]
      api_key    = jsondecode(data.aws_secretsmanager_secret_version.amplitude_app_secret.secret_string)["api_key"]
      secret_key = jsondecode(data.aws_secretsmanager_secret_version.amplitude_app_secret.secret_string)["secret_key"]
    }
  }
}

resource "fivetran_connector_schedule" "amplitude_schedule" {
  connector_id      = fivetran_connector.amplitude_connector.id
  sync_frequency    = var.fivetran_sync_frequency
  daily_sync_time   = var.fivetran_daily_sync_time
  paused            = var.fivetran_paused
  pause_after_trial = var.fivetran_paused
  schedule_type     = var.fivetran_schedule_type
}

business central

resource "fivetran_connector" "business_central_connector" {
  group_id           = data.aws_ssm_parameter.fivetran_group_id_external_id_versioned.value
  service            = "business_central"
  run_setup_tests    = true
  trust_fingerprints = true
  trust_certificates = true

  destination_schema {
    name = local.business_central_connector_name
  }
}

# 
# schedule handles timing and state
#  github actions handles pause / resume for connectors
#
resource "fivetran_connector_schedule" "business_central_schedule" {
  connector_id      = fivetran_connector.business_central_connector.id
  sync_frequency    = var.fivetran_sync_frequency
  daily_sync_time   = var.fivetran_daily_sync_time
  paused            = var.fivetran_paused
  pause_after_trial = var.fivetran_paused
  schedule_type     = var.fivetran_schedule_type
}

dynamodb

resource "fivetran_connector" "dynamodb_connector" {
  group_id           = data.aws_ssm_parameter.fivetran_group_id_external_id_versioned.value
  service            = "dynamodb"
  run_setup_tests    = true
  trust_fingerprints = true
  trust_certificates = true

  destination_schema {
    name = local.dynamodb_connector_name
  }

  config {
    aws_region_code = var.app_data_mapping.app_aws_region
    role_arn  = "<arn>"
    sync_mode = "UseUnpackedModeOnly"
  }
}

# 
# schedule handles timing and state
#  github actions handles pause / resume for connectors
#
resource "fivetran_connector_schedule" "dynamodb_schedule" {
  connector_id      = fivetran_connector.dynamodb_connector.id
  sync_frequency    = var.fivetran_sync_frequency
  daily_sync_time   = var.fivetran_daily_sync_time
  paused            = var.fivetran_paused
  pause_after_trial = var.fivetran_paused
  schedule_type     = var.fivetran_schedule_type
}

Expected behavior should return consistent state

Logs & Output Provide terraform CLI output on plan | apply. If it is possible, please, refer to this guide to enable debug output.

plan

 # fivetran_connector_schedule.amplitude_schedule must be replaced
-/+ resource "fivetran_connector_schedule" "amplitude_schedule" {
      ~ connector_id      = "<id>" # forces replacement -> (known after apply) # forces replacement
      + daily_sync_time   = "12:00"
      ~ id                = "<id>" -> (known after apply)
      ~ paused            = "false" -> "true"
        # (3 unchanged attributes hidden)
    }

  # fivetran_connector_schedule.business_central_schedule must be replaced
-/+ resource "fivetran_connector_schedule" "business_central_schedule" {
      ~ connector_id      = "<id>" # forces replacement -> (known after apply) # forces replacement
      + daily_sync_time   = "12:00"
      ~ id                = "<id>" -> (known after apply)
      ~ paused            = "false" -> "true"
        # (3 unchanged attributes hidden)
    }

  # fivetran_connector_schedule.dynamodb_schedule will be updated in-place
  ~ resource "fivetran_connector_schedule" "dynamodb_schedule" {
      + daily_sync_time   = "12:00"
      ~ id                = "<id>" -> (known after apply)
      ~ paused            = "false" -> "true"
        # (4 unchanged attributes hidden)
    }
Error: Provider produced inconsistent result after apply
│ 
│ When applying changes to fivetran_connector_schedule.dynamodb_schedule, provider "provider[\"registry.terraform.io/fivetran/fivetran\"]" produced an unexpected new value: .daily_sync_time: was
│ cty.StringVal("12:00"), but now cty.StringVal("").
│ 
│ This is a bug in the provider, which should be reported in the provider's own issue tracker.
╵
╷
│ Error: Provider produced inconsistent result after apply
│ 
│ When applying changes to fivetran_connector.amplitude_connector, provider "provider[\"registry.terraform.io/fivetran/fivetran\"]" produced an unexpected new value: .config.project_credentials: planned set element
│ cty.ObjectVal(map[string]cty.Value{"api_key":cty.StringVal("<removed>"), "project":cty.StringVal("<name>"), "secret_key":cty.StringVal("<removed>")})
│ does not correlate with any element in actual.
│ 
│ This is a bug in the provider, which should be reported in the provider's own issue tracker.
╵
╷
│ Error: Provider produced inconsistent result after apply
│ 
│ When applying changes to fivetran_connector_schedule.business_central_schedule, provider "provider[\"registry.terraform.io/fivetran/fivetran\"]" produced an unexpected new value: .daily_sync_time: was
│ cty.StringVal("12:00"), but now cty.StringVal("").
│ 
│ This is a bug in the provider, which should be reported in the provider's own issue tracker.
╵

Plugin version: 0.7.3 > 1.1.11

Additional context Add any other context about the problem here.

beevital commented 8 months ago

Thank you - this feedback is very helpful. Working on this!

MaxymVlasov commented 8 months ago

Same issue in

tf plan:

Terraform will perform the following actions:

  # module.fivetran_connector[0].fivetran_connector_schedule.schedule will be created
  + resource "fivetran_connector_schedule" "schedule" {
      + connector_id      = "proponent_inordinate"
      + daily_sync_time   = "07:00"
      + id                = (known after apply)
      + pause_after_trial = "true"
      + paused            = "false"
      + schedule_type     = "auto"
      + sync_frequency    = "180"
    }

Plan: 1 to add, 0 to change, 0 to destroy.

tf apply:

module.fivetran_connector[0].fivetran_connector_schedule.schedule: Creating...
╷
│ Error: Provider produced inconsistent result after apply
│ 
│ When applying changes to
│ module.fivetran_connector[0].fivetran_connector_schedule.schedule, provider
│ "provider[\"registry.terraform.io/fivetran/fivetran\"]" produced an
│ unexpected new value: .daily_sync_time: was cty.StringVal("07:00"), but now
│ cty.StringVal("").
│ 
│ This is a bug in the provider, which should be reported in the provider's
│ own issue tracker.
╵

TF version: 1.5.4 provider "registry.terraform.io/fivetran/fivetran" version: "1.1.11"

No issues in fivetran 1.1.10


UPD. I see https://github.com/fivetran/terraform-provider-fivetran/releases/tag/v1.1.12 should fix it, I'll check it right now

MaxymVlasov commented 8 months ago

Fix in 1.1.12 works for me

module.fivetran_connector[0].fivetran_connector_schedule.schedule: Destroying... [id=proponent_inordinate]
module.fivetran_connector[0].fivetran_connector_schedule.schedule: Destruction complete after 0s
module.fivetran_connector[0].fivetran_connector_schedule.schedule: Creating...
module.fivetran_connector[0].fivetran_connector_schedule.schedule: Creation complete after 0s [id=proponent_inordinate]

Apply complete! Resources: 1 added, 0 changed, 1 destroyed.
ann8ty commented 6 months ago

fixed 1.1.17!