PagerDuty / terraform-provider-pagerduty

Terraform PagerDuty provider
https://www.terraform.io/docs/providers/pagerduty/
Mozilla Public License 2.0
206 stars 210 forks source link

Cannot delete user and remove it from all schedules at the same time #833

Open Homulvas opened 7 months ago

Homulvas commented 7 months ago

Terraform Version

1.7.4

Provider Version

3.9.0

Affected Resource(s)

Please list the resources as a list, for example:

Terraform Configuration Files

resource "pagerduty_schedule" "test_schedule" {
  name      = "Test schedule"
  time_zone = "Etc/UTC"
  layer {
    name                         = "Test"
    rotation_turn_length_seconds = 604800 # 7*24*60*60
    users = [
      pagerduty_user.test_user.id,
    ]
    start                  = "2024-02-25T23:00:00Z"
    rotation_virtual_start = "2024-02-25T23:00:00Z"
  }
}

resource "pagerduty_user" "test_user" {
  email = "test.user@test.com"
  name  = "Test User"
}

Expected Behavior

Schedule is updated first and user is deleted successfully.

Actual Behavior

Apply tries to delete the user first even though it has references.

pagerduty_user.test_user: Destroying... [id=P2FUWI1]
pagerduty_user.test_user: Still destroying... [id=P2FUWI1, 10s elapsed]
pagerduty_user.test_user: Still destroying... [id=P2FUWI1, 20s elapsed]
pagerduty_user.test_user: Still destroying... [id=P2FUWI1, 30s elapsed]
pagerduty_user.test_user: Still destroying... [id=P2FUWI1, 40s elapsed]
pagerduty_user.test_user: Still destroying... [id=P2FUWI1, 50s elapsed]
pagerduty_user.test_user: Still destroying... [id=P2FUWI1, 1m0s elapsed]
pagerduty_user.test_user: Still destroying... [id=P2FUWI1, 1m10s elapsed]
pagerduty_user.test_user: Still destroying... [id=P2FUWI1, 1m20s elapsed]
pagerduty_user.test_user: Still destroying... [id=P2FUWI1, 1m30s elapsed]
pagerduty_user.test_user: Still destroying... [id=P2FUWI1, 1m40s elapsed]
pagerduty_user.test_user: Still destroying... [id=P2FUWI1, 1m50s elapsed]
pagerduty_user.test_user: Still destroying... [id=P2FUWI1, 2m0s elapsed]
╷
│ Error: DELETE API call to https://api.pagerduty.com/users/P2FUWI1 failed 400 Bad Request. Code: 0, Errors: [The user cannot be deleted as they have 1 schedule. Please remove the user from the following schedule to continue.], Message:
│
│
╵

Steps to Reproduce

  1. Delete the user and change the schedule to include some other user
  2. terraform apply
lukaspj commented 6 months ago

Hmm this one is interesting is this the failing case?

First apply this

resource "pagerduty_schedule" "test_schedule" {
  name      = "Test schedule"
  time_zone = "Etc/UTC"
  layer {
    name                         = "Test"
    rotation_turn_length_seconds = 604800 # 7*24*60*60
    users = [
      pagerduty_user.test_user_1.id,
    ]
    start                  = "2024-02-25T23:00:00Z"
    rotation_virtual_start = "2024-02-25T23:00:00Z"
  }
}

resource "pagerduty_user" "test_user_1" {
  email = "test.user.1@test.com"
  name  = "Test User 1"
}

resource "pagerduty_user" "test_user2" {
  email = "test.user.2@test.com"
  name  = "Test User 2"
}

Then this:

resource "pagerduty_schedule" "test_schedule" {
  name      = "Test schedule"
  time_zone = "Etc/UTC"
  layer {
    name                         = "Test"
    rotation_turn_length_seconds = 604800 # 7*24*60*60
    users = [
      pagerduty_user.test_user_2.id,
    ]
    start                  = "2024-02-25T23:00:00Z"
    rotation_virtual_start = "2024-02-25T23:00:00Z"
  }
}

resource "pagerduty_user" "test_user2" {
  email = "test.user.2@test.com"
  name  = "Test User 2"
}

?

Homulvas commented 6 months ago

Yes. Something along these lines.