2022-03-21 23:27:54 -04:00

195 lines
5.0 KiB
HCL

# 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)
}