Custom Image with Terraform and Extra Disks

Synopsis

When attempting to provision a linode instance with terraform using a private image and extra disks, terraform fails with HTTP/1.1 400 BAD REQUEST and the reason is Linode busy.

Environment Information

The private image in question is a customized CentOS 8 Disk Image created with Packer.

Behaviors Observed

Linode Manager (Web UI)

  • Public and Private disk images available
    • cannot specify size of boot drive disk at creation
    • cannot specify or add new disks at creation
    • both private and public images create a functioning linode

Linode API via Terraform

  • Public Disk Images
    • boot drive size may be specified
    • additional drives may be specified
  • Private Disk Images
    • boot drive size may be specified
    • additional drives cause API errors
      • HTTP/1.1 400 BAD REQUEST
      • reason: Linode busy.

Based on the terraform documentation and what I've read in the source code so far, there shouldn't really be a difference in behavior based on which image is specified to be the operating system.

Here's a bare bones example that works if I use a public image, but, if I replace the image line with my private image it fails with the errors mentioned above. I also tried removing the filesystem specification from the private image declaration during my tests. The error message did not change.

provider "linode" {
  token = "${var.linode_token}"
}

resource "linode_instance" "tf_example" {
  label = "tf_example"
  region = "${var.region}"
  type = "g6-nanode-1"
  group = "test"
  tags = ["test"]

  config {
    label = "main_boot"
    kernel = "linode/latest-64bit"
    root_device = "/dev/sda"

    devices {
      sda {
        disk_label = "boot"
      }
      sdb {
        disk_label = "Swap Image"
      }
      sdc {
        disk_label = "logs"
      }
    }
  }
  disk {
    label = "boot"
    size = "3000"
    image = "linode/centos8"
    filesystem = "ext4"
    root_pass = "${var.root_pass}"
    authorized_keys = ["${var.ssh_key}"]
  }
  disk {
    label = "Swap Image"
    filesystem = "swap"
    size = "512"
  }
  disk {
    label = "logs"
    filesystem = "ext4"
    size = "10000"
  }

  boot_config_label = "main_boot"
}

variable "linode_token" {}
variable "root_pass" {}
variable "ssh_key" {}
variable "region" {
  default = "us-central"
}

Thanks in advance for any insights.

1 Reply

Hey @Kellin, seeing that you also posted this as an issue to the Linode Terraform Provider github repo here. Just wanted to drop a line to let you know that we'll take a look at this and work on a solution.

Reply

Please enter an answer
Tips:

You can mention users to notify them: @username

You can use Markdown to format your question. For more examples see the Markdown Cheatsheet.

> I’m a blockquote.

I’m a blockquote.

[I'm a link] (https://www.google.com)

I'm a link

**I am bold** I am bold

*I am italicized* I am italicized

Community Code of Conduct