Skip to content

pagerduty_team_membership can not be deleted when user is in use in pagerduty_schedule #292

@mambax

Description

@mambax

Hi all, I discovered something rather un-smooth and wanted to share. Maybe the fix is straight-forward for you.

What I report makes totally sense of course. Yet the error handling of the provider or the API is very misleading.

Terraform Version

❯ terraform version
Terraform v0.14.4
+ provider registry.terraform.io/pagerduty/pagerduty v1.8.0

Affected Resource(s)

  • pagerduty_team_membership
  • pagerduty_schedule

Terraform Configuration Files

Before

resource "pagerduty_team_membership" "TMTMTM" {
  user_id = data.pagerduty_user.UUUU.id
  team_id = pagerduty_team.TTTT.id
  role    = "manager"
}

resource "pagerduty_schedule" "EEE" {
  name        = format("%s-%s_Schedule_Eng1", local.organisation, local.teamT)
  time_zone   = "Europe/Berlin"
  description = local.managedByTerraForm

  layer {
    name                         = "engineer1"
    start                        = "2021-01-18T17:30:00+01:00"
    rotation_virtual_start       = "2021-01-18T17:30:00+01:00"
    rotation_turn_length_seconds = 604800
    users = [
      data.pagerduty_user.IIIII.id,
      data.pagerduty_user.UUUU.id,
      data.pagerduty_user.LLLLL.id,
      data.pagerduty_user.KKKK.id
    ]
  }
}

After

Before

resource "pagerduty_team_membership" "TMTMTM" {
  user_id = data.pagerduty_user.A_NEW_USER_OOOOO.id        # <----------- Note, user changed
  team_id = pagerduty_team.TTTT.id
  role    = "manager"
}

resource "pagerduty_schedule" "EEE" {
  name        = format("%s-%s_Schedule_Eng1", local.organisation, local.teamT)
  time_zone   = "Europe/Berlin"
  description = local.managedByTerraForm

  layer {
    name                         = "engineer1"
    start                        = "2021-01-18T17:30:00+01:00"
    rotation_virtual_start       = "2021-01-18T17:30:00+01:00"
    rotation_turn_length_seconds = 604800
    users = [
      data.pagerduty_user.IIIII.id,
      data.pagerduty_user.UUUU.id,
      data.pagerduty_user.LLLLL.id,
      data.pagerduty_user.KKKK.id
    ]
  }
}

Panic Output

To reflect the change above TF must replace:

# pagerduty_team_membership.TMTMTM must be replaced
-/+ resource "pagerduty_team_membership" "TMTMTM" {
      ~ id      = "PYQV0AO:P1V3E98" -> (known after apply)
      ~ user_id = "PYQV0AO" -> "P261LLO" # forces replacement
        # (2 unchanged attributes hidden)
    }

.... yes ....

pagerduty_team_membership.TMTMTM: Destroying... [id=PYQV0AO:P1V3E98]
pagerduty_team_membership.TMTMTM: Still destroying... [id=PYQV0AO:P1V3E98, 10s elapsed]
pagerduty_team_membership.TMTMTM: Still destroying... [id=PYQV0AO:P1V3E98, 20s elapsed]
pagerduty_team_membership.TMTMTM: Still destroying... [id=PYQV0AO:P1V3E98, 30s elapsed]
pagerduty_team_membership.TMTMTM: Still destroying... [id=PYQV0AO:P1V3E98, 40s elapsed]
pagerduty_team_membership.TMTMTM: Still destroying... [id=PYQV0AO:P1V3E98, 50s elapsed]
pagerduty_team_membership.TMTMTM: Still destroying... [id=PYQV0AO:P1V3E98, 1m0s elapsed]
pagerduty_team_membership.TMTMTM: Still destroying... [id=PYQV0AO:P1V3E98, 1m10s elapsed]
pagerduty_team_membership.TMTMTM: Still destroying... [id=PYQV0AO:P1V3E98, 1m20s elapsed]
^CInterrupt received.
Please wait for Terraform to exit or data loss may occur.
Gracefully shutting down...
Stopping operation...
pagerduty_team_membership.TMTMTM: Still destroying... [id=PYQV0AO:P1V3E98, 1m30s elapsed]
pagerduty_team_membership.TMTMTM: Still destroying... [id=PYQV0AO:P1V3E98, 1m40s elapsed]
pagerduty_team_membership.TMTMTM: Still destroying... [id=PYQV0AO:P1V3E98, 1m50s elapsed]
pagerduty_team_membership.TMTMTM: Still destroying... [id=PYQV0AO:P1V3E98, 2m0s elapsed]

In words

I wanted to replace one user with another. For that I just changed the team membership (replace one member with another).
But, in the schedule the old member was still used.

Expected Behavior

The API/Provider should output, that the object can not be destroyed because it is referenced in a schedule, or even in which schedule.
Can not destroy pagerduty_team_membership.TMTMTM, entity is in use in schedule pagerduty_schedule.EEE

Actual Behavior

See output. Destroy ends in an endless position (or at least I did not wait long enough).

Steps to Reproduce

Described above.

Best regards, Dom

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions