BetterStackHQ/terraform-provider-better-uptime

owner_id getting updated each time

Closed this issue ยท 4 comments

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)
    }

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 ๐Ÿš€

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"

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

Hello @hrvalca, thanks for reporting that ๐Ÿ™Œ

It looks like #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 ๐Ÿš€