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.