terraform-provider-stackit icon indicating copy to clipboard operation
terraform-provider-stackit copied to clipboard

Parallel Creation of `stackit_server_backup_schedule` Fails

Open rswrz opened this issue 9 months ago • 1 comments

Description

Creating multiple stackit_server_backup_schedule resources in parallel fails with 409 Conflict errors.

Terraform Code

resource "stackit_server_backup_schedule" "hourly" {
  project_id = var.project_id
  server_id  = stackit_server.this.server_id

  enabled = true
  name    = "hourly"
  rrule   = "DTSTART;TZID=Europe/Berlin:19700101T000000 RRULE:FREQ=HOURLY;INTERVAL=1"

  backup_properties = {
    name             = "hourly"
    retention_period = 1
  }
}

resource "stackit_server_backup_schedule" "daily" {
  project_id = var.project_id
  server_id  = stackit_server.this.server_id

  enabled = true
  name    = "daily"
  rrule   = "DTSTART;TZID=Europe/Berlin:19700101T000000 RRULE:FREQ=DAILY;INTERVAL=1"

  backup_properties = {
    name             = "daily"
    retention_period = 7
  }
}

resource "stackit_server_backup_schedule" "weekly" {
  project_id = var.project_id
  server_id  = stackit_server.this.server_id

  enabled = true
  name    = "weekly"
  rrule   = "DTSTART;TZID=Europe/Berlin:19700101T000000 RRULE:FREQ=WEEKLY;INTERVAL=1"

  backup_properties = {
    name             = "weekly"
    retention_period = (7 * 5)
  }
}

resource "stackit_server_backup_schedule" "monthly" {
  project_id = var.project_id
  server_id  = stackit_server.this.server_id

  enabled = true
  name    = "monthly"
  rrule   = "DTSTART;TZID=Europe/Berlin:19700101T000000 RRULE:FREQ=MONTHLY;INTERVAL=1"

  backup_properties = {
    name             = "monthly"
    retention_period = (31 * 3)
  }
}

Error Output

Three out of four stackit_server_backup_schedule resources fail with the following error:

╷
│ Error: Error creating server backup schedule
│
│   with stackit_server_backup_schedule.hourly,
│   on main.tf line 116, in resource "stackit_server_backup_schedule" "hourly":
│  116: resource "stackit_server_backup_schedule" "hourly" {
│
│ Enabling server backup project before creation: enable server backup service: 409 Conflict, status code 409, Body: {"timestamp":"2025-04-03T12:57:55.465501275Z","status":"CONFLICT","message":"Request failed"}
│
╵
╷
│ Error: Error creating server backup schedule
│
│   with stackit_server_backup_schedule.weekly,
│   on main.tf line 147, in resource "stackit_server_backup_schedule" "weekly":
│  147: resource "stackit_server_backup_schedule" "weekly" {
│
│ Enabling server backup project before creation: enable server backup service: 409 Conflict, status code 409, Body: {"timestamp":"2025-04-03T12:57:55.465501012Z","status":"CONFLICT","message":"Request failed"}
│
╵
╷
│ Error: Error creating server backup schedule
│
│   with stackit_server_backup_schedule.monthly,
│   on main.tf line 164, in resource "stackit_server_backup_schedule" "monthly":
│  164: resource "stackit_server_backup_schedule" "monthly" {
│
│ Enabling server backup project before creation: enable server backup service: 409 Conflict, status code 409, Body: {"timestamp":"2025-04-03T12:57:55.416570619Z","status":"CONFLICT","message":"Request failed"}
│
╵

Additional Findings

  • Running terraform apply immediately after the failed attempt successfully creates the remaining three backup schedules.
  • The issue is likely due to the stackit_server_backup_schedule resource enabling the backup service on the server. Concurrent attempts to enable the service may conflict if the activation process is already in progress.

Workaround

Adding dependencies between the backup schedule resources prevents concurrent activation conflicts:

resource "stackit_server_backup_schedule" "hourly" {
  project_id = var.project_id
  server_id  = stackit_server.this.server_id

  enabled = true
  name    = "hourly"
  rrule   = "DTSTART;TZID=Europe/Berlin:19700101T000000 RRULE:FREQ=HOURLY;INTERVAL=1"

  backup_properties = {
    name             = "hourly"
    retention_period = 1
  }
}

resource "stackit_server_backup_schedule" "daily" {
  project_id = var.project_id
  server_id  = stackit_server.this.server_id

  enabled = true
  name    = "daily"
  rrule   = "DTSTART;TZID=Europe/Berlin:19700101T000000 RRULE:FREQ=DAILY;INTERVAL=1"

  backup_properties = {
    name             = "daily"
    retention_period = 7
  }

  # Workaround
  depends_on = [stackit_server_backup_schedule.hourly]
}

resource "stackit_server_backup_schedule" "weekly" {
  project_id = var.project_id
  server_id  = stackit_server.this.server_id

  enabled = true
  name    = "weekly"
  rrule   = "DTSTART;TZID=Europe/Berlin:19700101T000000 RRULE:FREQ=WEEKLY;INTERVAL=1"

  backup_properties = {
    name             = "weekly"
    retention_period = (7 * 5)
  }

  # Workaround
  depends_on = [stackit_server_backup_schedule.hourly]
}

resource "stackit_server_backup_schedule" "monthly" {
  project_id = var.project_id
  server_id  = stackit_server.this.server_id

  enabled = true
  name    = "monthly"
  rrule   = "DTSTART;TZID=Europe/Berlin:19700101T000000 RRULE:FREQ=MONTHLY;INTERVAL=1"

  backup_properties = {
    name             = "monthly"
    retention_period = (31 * 3)
  }

  # Workaround
  depends_on = [stackit_server_backup_schedule.hourly]
}

Expected Behavior

Multiple stackit_server_backup_schedule resources should be creatable within a single Terraform apply operation without failing due to conflicts. Currently, the issue is resolved only by reapplying the configuration or introducing explicit dependencies.

Environment

$ terraform -version
Terraform v1.11.3
on darwin_arm64
+ provider registry.terraform.io/stackitcloud/stackit v0.48.0

rswrz avatar Apr 03 '25 13:04 rswrz

hello @rswrz , thanks for your detailed bug report. We'll take a look at this

bahkauv70 avatar Apr 03 '25 13:04 bahkauv70