195 lines
5.0 KiB
HCL
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)
|
|
}
|
|
|
|
|