add: terraform project kubernetes_vms
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
module "pve_vm" {
|
||||
source = "../../modules/pve_vm"
|
||||
for_each = local.vm_list
|
||||
node_name = each.value.node_name
|
||||
vm_name = each.key
|
||||
vm_cpu = each.value.vm_cpu
|
||||
vm_ram = each.value.vm_ram
|
||||
vm_vlan = each.value.vm_vlan
|
||||
vm_tags = var.vm_tags
|
||||
}
|
||||
|
||||
locals {
|
||||
node_stats = [
|
||||
for i, name in data.proxmox_virtual_environment_nodes.pve_nodes.names : {
|
||||
name = name
|
||||
free_mib = floor(data.proxmox_virtual_environment_nodes.pve_nodes.memory_available[i] / 1024 / 1024)
|
||||
}
|
||||
if data.proxmox_virtual_environment_nodes.pve_nodes.online[i]
|
||||
]
|
||||
|
||||
max_free_mib = length(local.node_stats) > 0 ? max([for node in local.node_stats : node.free_mib]...) : 0
|
||||
|
||||
# Online nodes ordered by available memory, most available first (name as tie-break)
|
||||
node_order = var.target_node != "" ? [var.target_node] : [
|
||||
for key in sort([
|
||||
for node in local.node_stats : "${format("%012d", local.max_free_mib - node.free_mib)}|${node.name}"
|
||||
]) : split("|", key)[1]
|
||||
]
|
||||
|
||||
vm_layout = flatten([
|
||||
for role in ["master", "worker"] : [
|
||||
for i in range(role == "master" ? var.master_count : var.worker_count) : {
|
||||
vm_name = "kub-${var.vm_env}-${substr(role, 0, 1)}${format("%02d", i + 1)}"
|
||||
seq_index = (role == "master" ? 0 : var.master_count) + i
|
||||
vm_role = role
|
||||
}
|
||||
]
|
||||
])
|
||||
|
||||
vm_list = {
|
||||
for vm in local.vm_layout :
|
||||
vm.vm_name => {
|
||||
node_name = length(local.node_order) > 0 ? local.node_order[vm.seq_index % length(local.node_order)] : ""
|
||||
vm_cpu = var.vm_attr[vm.vm_role].cpu
|
||||
vm_ram = var.vm_attr[vm.vm_role].ram
|
||||
vm_vlan = var.vm_attr[vm.vm_role].vlan
|
||||
vm_role = vm.vm_role
|
||||
}
|
||||
}
|
||||
|
||||
roles = toset([for vm in local.vm_list : vm.vm_role])
|
||||
}
|
||||
|
||||
data "proxmox_virtual_environment_nodes" "pve_nodes" {}
|
||||
|
||||
output "vm_ip" {
|
||||
value = { for k, v in module.pve_vm : k => v.vm_ip }
|
||||
}
|
||||
|
||||
resource "ansible_group" "vm_groups" {
|
||||
for_each = local.roles
|
||||
name = each.key
|
||||
}
|
||||
|
||||
resource "ansible_host" "vm_hosts" {
|
||||
for_each = module.pve_vm
|
||||
name = each.key
|
||||
variables = {
|
||||
ansible_host = each.value.vm_ip
|
||||
}
|
||||
groups = [local.vm_list[each.key].vm_role]
|
||||
}
|
||||
Reference in New Issue
Block a user