# Instance System # ======================== # Variables variable "os_name" { description = "The name of the operating system to create" type = string default = "ubuntu" } variable "os_version" { description = "The version of the operationg system to use" type = string default = "latest" } # ======== variable "cloud_init" { type = string default = "" description = "Override system cloud_init" } variable "cloud_init_vars" { type = map default = {} description = "Override cloud init vars" } # ========== variable "domain" { type = string default = "nodomain" } variable "hostname" { type = string default = "noname" } variable "user" { type = string default = "cloud" } variable "password_hash" { type = string default = "" } variable "authorized_key" { type = string default = "" } locals { # Operating System # ======================== distro = { "debian" = { "latest" = { "cloud_init" = "debian", "url" = "https://cdimage.debian.org/cdimage/cloud/buster/20210208-542/debian-10-genericcloud-amd64-20210208-542.qcow2", }, "10" = { "cloud_init" = "debian", "url" = "https://cdimage.debian.org/cdimage/cloud/buster/20210208-542/debian-10-genericcloud-amd64-20210208-542.qcow2", }, "10-20210208-542" = { "cloud_init" = "debian", "url" = "https://cdimage.debian.org/cdimage/cloud/buster/20210208-542/debian-10-genericcloud-amd64-20210208-542.qcow2", }, }, # "ubuntu" = { # "latest" = { # "cloud_init" = "debian", # "url" = "https://cloud-images.ubuntu.com/releases/groovy/release/ubuntu-20.10-server-cloudimg-amd64-disk-kvm.img", # }, # "20.10" = { # "cloud_init" = "debian", # "url" = "https://cloud-images.ubuntu.com/releases/groovy/release/ubuntu-20.10-server-cloudimg-amd64-disk-kvm.img", # }, # "20.04" = { # "cloud_init" = "debian", # "url" = "https://cloud-images.ubuntu.com/releases/focal/release/ubuntu-20.04-server-cloudimg-amd64-disk-kvm.img", # }, # "19.04" = { # "cloud_init" = "debian", # "url" = "https://cloud-images.ubuntu.com/releases/disco/release/ubuntu-19.04-server-cloudimg-amd64.img", # }, # "18.04" = { # "cloud_init" = "debian", # "url" = "https://cloud-images.ubuntu.com/releases/bionic/release/ubuntu-18.04-server-cloudimg-amd64.img", # }, # "17.04" = { # "cloud_init" = "debian", # "url" = "http://cloud-images-archive.ubuntu.com/releases/zesty/release-20171208/ubuntu-17.04-server-cloudimg-amd64.img", # }, # "16.04" = { # "cloud_init" = "debian", # "url" = "https://cloud-images.ubuntu.com/releases/xenial/release/ubuntu-16.04-server-cloudimg-amd64-disk1.img" # }, # }, # "centos" = { # "latest" = { # "cloud_init" = "centos", # "url" = "https://cloud.centos.org/centos/8/x86_64/images/CentOS-8-GenericCloud-8.3.2011-20201204.2.x86_64.qcow2", # }, # "8" = { # "cloud_init" = "centos", # "url" = "https://cloud.centos.org/centos/8/x86_64/images/CentOS-8-GenericCloud-8.3.2011-20201204.2.x86_64.qcow2", # }, # "8-stream" = { # "cloud_init" = "centos", # "url" = "https://cloud.centos.org/centos/8-stream/x86_64/images/CentOS-Stream-GenericCloud-8-20201217.0.x86_64.qcow2", # }, # "7" = { # "cloud_init" = "centos", # "url" = "https://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud-2009.qcow2", # }, # "6" = { # "cloud_init" = "centos", # "url" = "https://cloud.centos.org/centos/6/images/CentOS-6-x86_64-GenericCloud.qcow2" # }, # } } # Cloud Init # ======================== templates = { "centos" = { "template" = "${path.module}/templates/cloud_centos_generic.yml", "vars" = {} }, "debian" = { "template" = "${path.module}/templates/cloud_debian_generic.yml", "vars" = { "authorized_key" = "", "authorized_keys" = [], "commands" = [], "packages" = [], "allow_passwords" = true, } } } template_default = { "authorized_key" = var.authorized_key, "password_hash" = var.password_hash, "user" = var.user, "domain" = var.domain, "hostname" = var.hostname, } } locals { os = local.distro[var.os_name][var.os_version] # Generate template cloud_template = try(local.templates[var.cloud_init], local.templates[local.os.cloud_init]) template_vars = merge(local.cloud_template.vars, local.template_default, var.cloud_init_vars) } output "distro" { value = local.distro } output "os" { value = local.os } output "cloud_init" { value = local.cloud_template } output "template_vars" { value = local.template_vars } output "template" { #value = data.template_file.user_data.rendered value = templatefile("${local.cloud_template.template}", local.template_vars) }