the terransible project can deploy on one or multiple nodes
This commit is contained in:
parent
c3db663e9e
commit
bc19a7638b
@ -3,8 +3,7 @@
|
|||||||
hosts: localhost
|
hosts: localhost
|
||||||
gather_facts: false
|
gather_facts: false
|
||||||
tasks:
|
tasks:
|
||||||
- name: Create a VM with Terraform
|
- ansible.builtin.import_role:
|
||||||
ansible.builtin.import_role:
|
|
||||||
name: terraform_vm
|
name: terraform_vm
|
||||||
vars:
|
vars:
|
||||||
terraform_vm_project_path: /home/vez/homelab/terraform/projects/terransible
|
terraform_vm_project_path: /home/vez/homelab/terraform/projects/terransible
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
- name: Create a VM
|
- name: Deploy a Terraform infrastructure
|
||||||
cloud.terraform.terraform:
|
cloud.terraform.terraform:
|
||||||
project_path: "{{ terraform_vm_project_path }}"
|
project_path: "{{ terraform_vm_project_path }}"
|
||||||
state: "{{ terraform_vm_state }}"
|
state: "{{ terraform_vm_state }}"
|
||||||
|
@ -1,24 +1,47 @@
|
|||||||
module "pve_vm" {
|
module "pve_vm" {
|
||||||
source = "../../modules/pve_vm"
|
source = "../../modules/pve_vm"
|
||||||
node_name = "zenith"
|
for_each = local.vm_list
|
||||||
vm_name = "zenith-vm"
|
node_name = each.value.node_name
|
||||||
vm_cpu = 2
|
vm_name = each.value.vm_name
|
||||||
vm_ram = 2048
|
vm_cpu = each.value.vm_cpu
|
||||||
vm_vlan = 66
|
vm_ram = each.value.vm_ram
|
||||||
|
vm_vlan = each.value.vm_vlan
|
||||||
}
|
}
|
||||||
|
|
||||||
|
locals {
|
||||||
|
all_nodes = data.proxmox_virtual_environment_nodes.pve_nodes.names
|
||||||
|
|
||||||
|
selected_nodes = var.multi_node_deployment == false ? [var.target_node] : local.all_nodes
|
||||||
|
|
||||||
|
vm_list = {
|
||||||
|
for vm in flatten([
|
||||||
|
for node in local.selected_nodes : [
|
||||||
|
for role, config in var.vm_attr : {
|
||||||
|
node_name = node
|
||||||
|
vm_name = "${node}-${role}"
|
||||||
|
vm_cpu = config.cpu
|
||||||
|
vm_ram = config.ram
|
||||||
|
vm_vlan = config.vlan
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]) : vm.vm_name => vm
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
data "proxmox_virtual_environment_nodes" "pve_nodes" {}
|
||||||
|
|
||||||
output "vm_ip" {
|
output "vm_ip" {
|
||||||
value = module.pve_vm.vm_ip
|
value = { for k, v in module.pve_vm : k => v.vm_ip }
|
||||||
}
|
}
|
||||||
|
|
||||||
resource "ansible_group" "servers" {
|
resource "ansible_group" "servers" {
|
||||||
name = "servers"
|
name = "servers"
|
||||||
}
|
}
|
||||||
resource "ansible_host" "vm" {
|
resource "ansible_host" "vm" {
|
||||||
name = "zenith-vm.lab.vezpi.me"
|
for_each = module.pve_vm
|
||||||
groups = ["servers"]
|
name = each.key
|
||||||
variables = {
|
variables = {
|
||||||
ansible_host = module.pve_vm.vm_ip
|
ansible_host = each.value.vm_ip
|
||||||
}
|
}
|
||||||
}
|
groups = ["servers"]
|
||||||
|
}
|
@ -4,7 +4,7 @@ terraform {
|
|||||||
source = "bpg/proxmox"
|
source = "bpg/proxmox"
|
||||||
}
|
}
|
||||||
ansible = {
|
ansible = {
|
||||||
source = "ansible/ansible"
|
source = "ansible/ansible"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,4 +7,28 @@ variable "proxmox_api_token" {
|
|||||||
description = "Proxmox API token"
|
description = "Proxmox API token"
|
||||||
type = string
|
type = string
|
||||||
sensitive = true
|
sensitive = true
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "multi_node_deployment" {
|
||||||
|
description = "true : deploy VMs on each node, false : deploy only on a given node"
|
||||||
|
type = bool
|
||||||
|
default = true
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "target_node" {
|
||||||
|
description = "Node which host the VM if multi_node_deployment = false"
|
||||||
|
type = string
|
||||||
|
default = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "vm_attr" {
|
||||||
|
description = "VM attributes"
|
||||||
|
type = map(object({
|
||||||
|
ram = number
|
||||||
|
cpu = number
|
||||||
|
vlan = number
|
||||||
|
}))
|
||||||
|
default = {
|
||||||
|
"vm" = { ram = 2048, cpu = 2, vlan = 66 }
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user