BetterStackHQ / terraform-provider-better-uptime

Apache License 2.0
45 stars 12 forks source link

owner_id getting updated each time #89

Closed hrvalca closed 1 month ago

hrvalca commented 1 month ago

Hello, can somebody point me what I am doing wrong here?

resource "betteruptime_monitor" "Portal" {
  url                = "https://portal.imba.com"
  monitor_type       = "keyword_absence"
  sms                = true
  call               = false
  required_keyword   = "no healthy upstream"
  check_frequency    = 30
  pronounceable_name = "Portal"
  regions            = ["us", "eu", "as", "au"]
  maintenance_days = ["mon", "tue", "wed", "thu", "fri", "sat","sun"]

}

resource "betteruptime_metadata" "portal_metadata" {
  key        = "ENV"
  value      = "prod"
  owner_id   = betteruptime_monitor.Portal.id
  owner_type = "Monitor"
  depends_on = [betteruptime_monitor.Portal]
}

Why is terraform trying to change owner_id and add owner_type this every time?

  # betteruptime_metadata.portal_metadata will be updated in-place
!   resource "betteruptime_metadata" "portal_metadata" {
        id         = "64783441"
!       owner_id   = 0 -> 621955
+       owner_type = "Monitor"
        # (2 unchanged attributes hidden)
    }
PetrHeinz commented 1 month ago

Hello @hrvalca , thank you for reporting this 🙌

We've fixed the issue with owner_id/owner_type being sent of every terraform apply. There's no need to update your Terraform provider, we've managed to fix this on the API level.

Hope this helps 🚀

hrvalca commented 1 month ago

Thanks @PetrHeinz but now I am getting different problems regarding this.

╷
│ Error: json: cannot unmarshal string into Go struct field metadata.data.attributes.owner_id of type int
│ 
│   with betteruptime_metadata.portal_metadata,
│   on main.tf line 16, in resource "betteruptime_metadata" "portal_metadata":
│   16: resource "betteruptime_metadata" "portal_metadata" {

I tried this also

resource "betteruptime_monitor" "Portal" {
  url                = "https://dev.imba.com"
  checks_version        = "v2"
  monitor_type       = "keyword_absence"
  required_keyword   = "no healthy upstream"
  check_frequency    = 180
  sms                = false
  call               = false
  email              = false
  push               = false
  pronounceable_name = "Dev Portal"
  regions            = ["us", "eu", "as", "au"]
  maintenance_days   = ["mon", "tue", "wed", "thu", "fri", "sat", "sun"]
}

resource "betteruptime_metadata" "portal_metadata" {
  key        = "ENV"
  value      = "dev"
  owner_id   = tonumber(betteruptime_monitor.Portal.id)
  owner_type = "Monitor"

Seems like there is some problem with converting data for owner_id?

I tried to output the values

output "monitor_id_int" {
  value = tonumber(betteruptime_monitor.Portal.id)
}

output "monitor_id_str" {
  value = betteruptime_monitor.Portal.id
}

Changes to Outputs:
  + monitor_id_int = ...955
  + monitor_id_str = "...955"
hrvalca commented 3 weeks ago

@PetrHeinz Can you maybe check whats going on? I think issue here is that provider itself expects int but gets string from API call?

PetrHeinz commented 3 weeks ago

Hello @hrvalca, thanks for reporting that 🙌

It looks like https://github.com/BetterStackHQ/terraform-provider-better-uptime/issues/100, an additional issue with type mismatch between Terraform and the API. It should already be fixed in v0.10.3, could you please run terraform init --upgrade and retry? 🙏 Thank you!

Just as a side note, comments on closed issues can be easily overlooked by us - I'd recommend opening a new issue in case of any additional trouble you encounter. It would help a lot in getting a quicker reaction 🚀