initialisation
This commit is contained in:
parent
0215f3e562
commit
13ad937c30
30
lxc.tf
Normal file
30
lxc.tf
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
resource "proxmox_lxc" "container" {
|
||||||
|
for_each = var.containers
|
||||||
|
|
||||||
|
hostname = each.key
|
||||||
|
target_node = var.target_node
|
||||||
|
ostemplate = lookup(var.lxc_templates, each.value.template, each.value.template)
|
||||||
|
unprivileged = each.value.privileged != true
|
||||||
|
|
||||||
|
cores = each.value.cores
|
||||||
|
memory = each.value.memory
|
||||||
|
swap = 512
|
||||||
|
password = var.lxcrootPass
|
||||||
|
rootfs {
|
||||||
|
storage = var.default_storage
|
||||||
|
size = each.value.disk_size
|
||||||
|
}
|
||||||
|
|
||||||
|
network {
|
||||||
|
name = "eth0"
|
||||||
|
bridge = var.default_bridge
|
||||||
|
tag = each.value.vlan_tag
|
||||||
|
ip = each.value.ip
|
||||||
|
gw = var.default_gateway
|
||||||
|
}
|
||||||
|
|
||||||
|
nameserver = var.dns_servers
|
||||||
|
|
||||||
|
onboot = true
|
||||||
|
start = true
|
||||||
|
}
|
||||||
9
output.tf
Normal file
9
output.tf
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
output "summary" {
|
||||||
|
description = "Résumé de l'infrastructure"
|
||||||
|
value = {
|
||||||
|
node = var.target_node
|
||||||
|
total_vms = length(var.vms)
|
||||||
|
total_lxc = length(var.containers)
|
||||||
|
}
|
||||||
|
}
|
||||||
6
provider.tf
Normal file
6
provider.tf
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
provider "proxmox" {
|
||||||
|
pm_api_url = var.proxmox_url
|
||||||
|
pm_api_token_id = var.proxmox_token_id
|
||||||
|
pm_api_token_secret = var.proxmox_token_secret
|
||||||
|
pm_tls_insecure = var.proxmox_insecure_tls
|
||||||
|
}
|
||||||
95
variables.tf
Normal file
95
variables.tf
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
variable "proxmox_url" {
|
||||||
|
description = "URL de l'API Proxmox"
|
||||||
|
type = string
|
||||||
|
default = "https://proxmox.firewax.fr/api2/json"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "proxmox_token_id" {
|
||||||
|
description = "token ID"
|
||||||
|
type = string
|
||||||
|
sensitive = true
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "proxmox_token_secret" {
|
||||||
|
description = "secret Token"
|
||||||
|
type = string
|
||||||
|
sensitive = true
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "proxmox_insecure_tls" {
|
||||||
|
description = "Ignorer les erreurs de certificat SSL"
|
||||||
|
type = bool
|
||||||
|
default = true
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "target_node" {
|
||||||
|
description = "Nom du nœud Proxmox"
|
||||||
|
type = string
|
||||||
|
default = "pve"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "default_storage" {
|
||||||
|
description = "Storage par défaut pour les disques"
|
||||||
|
type = string
|
||||||
|
default = "local"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "default_bridge" {
|
||||||
|
description = "Bridge réseau par défaut"
|
||||||
|
type = string
|
||||||
|
default = "vmbr0"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "default_gateway" {
|
||||||
|
description = "Passerelle par défaut"
|
||||||
|
type = string
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "dns_servers" {
|
||||||
|
description = "Serveurs DNS"
|
||||||
|
type = string
|
||||||
|
default = "8.8.8.8 8.8.4.4"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "vms" {
|
||||||
|
description = "Configuration des machines virtuelles"
|
||||||
|
type = map(object({
|
||||||
|
cores = number
|
||||||
|
memory = number
|
||||||
|
disk_size = string
|
||||||
|
ip = string
|
||||||
|
vlan_tag = optional(number)
|
||||||
|
template = optional(string)
|
||||||
|
}))
|
||||||
|
default = {}
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "lxc_templates" {
|
||||||
|
description = "Templates disponibles pour les containers"
|
||||||
|
type = map(string)
|
||||||
|
default = {
|
||||||
|
ubuntu = "local:vztmpl/ubuntu-22.04-standard_22.04-1_amd64.tar.zst"
|
||||||
|
debian = "local:vztmpl/debian-12-standard_12.7-1_amd64.tar.zst"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "containers" {
|
||||||
|
description = "Configuration des containers LXC"
|
||||||
|
type = map(object({
|
||||||
|
template = string
|
||||||
|
cores = number
|
||||||
|
memory = number
|
||||||
|
disk_size = string
|
||||||
|
ip = string
|
||||||
|
vlan_tag = optional(number)
|
||||||
|
privileged = optional(bool)
|
||||||
|
enable_docker = optional(bool)
|
||||||
|
}))
|
||||||
|
default = {}
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "lxcrootPass" {
|
||||||
|
description = "mot de passe"
|
||||||
|
type = string
|
||||||
|
sensitive = true
|
||||||
|
}
|
||||||
8
versions.tf
Normal file
8
versions.tf
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
terraform {
|
||||||
|
required_providers {
|
||||||
|
proxmox = {
|
||||||
|
source = "Telmate/proxmox"
|
||||||
|
version = "3.0.1-rc9"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
39
vm.tf
Normal file
39
vm.tf
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
resource "proxmox_vm_qemu" "vms" {
|
||||||
|
for_each = var.vms
|
||||||
|
|
||||||
|
name = each.key
|
||||||
|
target_node = var.target_node
|
||||||
|
|
||||||
|
clone = each.value.clone != null ? each.value.clone : null
|
||||||
|
|
||||||
|
cores = each.value.cores
|
||||||
|
sockets = 1
|
||||||
|
memory = each.value.memory
|
||||||
|
|
||||||
|
disks {
|
||||||
|
ide {
|
||||||
|
ide0 {
|
||||||
|
disk {
|
||||||
|
size = each.value.disk_size
|
||||||
|
storage = "local-lvm"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
network {
|
||||||
|
id = 0
|
||||||
|
model = "virtio"
|
||||||
|
bridge = var.default_bridge
|
||||||
|
tag = each.value.vlan_tag
|
||||||
|
}
|
||||||
|
|
||||||
|
os_type = "cloud-init"
|
||||||
|
ipconfig0 = "ip=${each.value.ip_address},gw=${var.default_gateway}"
|
||||||
|
|
||||||
|
|
||||||
|
boot = "order=ide0"
|
||||||
|
|
||||||
|
tags = "terraform,vm,${each.key}"
|
||||||
|
}
|
||||||
42
vm.tf.save
Normal file
42
vm.tf.save
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
resource "proxmox_vm_qemu" "vms" {
|
||||||
|
for_each = var.vms
|
||||||
|
|
||||||
|
name = each.key
|
||||||
|
target_node = var.target_node
|
||||||
|
|
||||||
|
clone = each.value.clone != null ? each.value.clone : null
|
||||||
|
|
||||||
|
cores = each.value.cores
|
||||||
|
sockets = 1
|
||||||
|
memory = each.value.memory
|
||||||
|
|
||||||
|
disks {
|
||||||
|
ide {
|
||||||
|
ide0 {
|
||||||
|
disk {
|
||||||
|
size = each.value.disk_size
|
||||||
|
storage = "local"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
network {
|
||||||
|
id = 0
|
||||||
|
model = "virtio"
|
||||||
|
bridge = var.default_bridge
|
||||||
|
tag = each.value.vlan_tag
|
||||||
|
}
|
||||||
|
|
||||||
|
os_type = "cloud-init"
|
||||||
|
ipconfig0 = "ip=${each.value.ip_address},gw=${var.default_gateway}"
|
||||||
|
|
||||||
|
|
||||||
|
boot = "order=ide0"
|
||||||
|
|
||||||
|
tags = "terraform,vm,${each.key}"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user