terraform_bpg_proxmox

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Dernière révisionLes deux révisions suivantes
terraform_bpg_proxmox [2024/01/05 23:17] psterraform_bpg_proxmox [2024/01/07 23:49] – [6. Epilogue : on conclut avec un playbook ansible] ps
Ligne 3: Ligne 3:
 Le 2023-12-21  Le 2023-12-21 
 ===== Avant-Propos ===== ===== Avant-Propos =====
-**Terraform** est un outil **IAC**https://blog.stephane-robert.info/docs/infra-as-code/provisionnement/terraform/introduction/#structure-dun-projet-terraform (Infrastructure As Code) développé par //Hashicorps//.+**Terraform** est un outil **IAC** (Infrastructure As Code) développé par //Hashicorps//
 + 
 +Il permet grâce à une syntaxe déclarative relativement simple de créer une infrastructure dans le //cloud// ou en //on-premise//. Terraform dispose de nombreux fournisseurs (providers) adaptés aux principaux environnements du marché (kubernetes, Azure, AWS, GCP, Openstack, Vsphere, Proxmox, ...).
  
-Il permet grâce à une syntaxe déclarative relativement simple de créer une infrastructure dans le //cloud// ou en //on-premise//. Terraform dispose de nombreux fournisseurs (providers) adaptés aux principaux environnements du marché (kubernetes, Azure, AWS, GCP, Openstack, Vsphere, Proxmox, ...)  
  
 Il est habituellement utilisé pour créer des VM ensuite configurées par des **playbooks** **Ansible** Il est habituellement utilisé pour créer des VM ensuite configurées par des **playbooks** **Ansible**
  
-cf le site de Stéphane Robert :  +Des changements de licence récents concernant Terraform ont conduit à la création de la fondation **Opentofu** (https://opentofu.org) visant à créer un outil disposant d'une licence moins restrictive et compatible avec Terraform ... 
-  * https://blog.stephane-robert.info/docs/infra-as-code/provisionnement/terraform/introduction/#structure-dun-projet-terraform + 
- +cf le site de //Stéphane Robert// :  
 +  * https://blog.stephane-robert.info/docs/infra-as-code/provisionnement/terraform/introduction
  
 ===== Installation de Terraform ===== ===== Installation de Terraform =====
Ligne 28: Ligne 30:
  
 </code> </code>
-===== Mise en oeuvre de Terraform avec le provider Telmate/Proxmox =====+===== Mise en oeuvre de Terraform avec le provider BPG/Proxmox =====
  
 L'objectif est ici d'utiliser **Terraform** pour déployer automatiquement des VM KVM sur un serveur **Proxmox 8**. L'objectif est ici d'utiliser **Terraform** pour déployer automatiquement des VM KVM sur un serveur **Proxmox 8**.
Ligne 52: Ligne 54:
 le fichier **provider.tf** (minimal) - On utilise ici le provider **BPG/Proxmox** (maintenu depuis la version 0.42.0 et compatible avec Proxmox 8.1) le fichier **provider.tf** (minimal) - On utilise ici le provider **BPG/Proxmox** (maintenu depuis la version 0.42.0 et compatible avec Proxmox 8.1)
  
-cf https://github.com/bpg/terraform-provider-proxmox +cf 
 +  * https://github.com/bpg/terraform-provider-proxmox 
 +  * https://blog.stephane-robert.info/docs/virtualiser/type1/proxmox/terraform/#cr%C3%A9ation-de-la-vm
 et plus particulièrement : et plus particulièrement :
    * https://github.com/bpg/terraform-provider-proxmox/tree/main/howtos    * https://github.com/bpg/terraform-provider-proxmox/tree/main/howtos
Ligne 129: Ligne 132:
       ipv4 {       ipv4 {
         address = "dhcp"         address = "dhcp"
 +        # ou encore address = "192.168.1.100/24"
       }       }
     }     }
Ligne 134: Ligne 138:
       # do not use this in production, configure your own ssh key instead!       # do not use this in production, configure your own ssh key instead!
       username = "debian"       username = "debian"
-      keys  = ["ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDSEwbALJWAuKEFq7ZdtdkXScpTTfpmU188Fzmcy9APidkzVqV8OGMu5GMBOKfxHDj0tYaU8VlDk2q8Jb7H6u++rLj0v1rJ2EIApXqcnaQhVxkKzc1Ai1703vq/WM5Vo5RpqOuZn4iCGWYzSvDvMMWazDM0gKLLDxzOAj3eS3sl9kaAFM2ONT0/gHyVo1IKgt/vVJFEjJ0eQLRBvtV0Nh8tlMNNzjpf6FIFU17diWwGAuAjsL11agcMVk0JwLe/p3vuJmlS7JKxpeZSarpucr/dMY5FZBpfoZQmpAYpblL3BzCyu5knA6cSZjXklpJ3S8Mi9RG0jHv43gWR2FD9+QSjwgWCoRabOugNLC+zv4S8D0FX8/iS/vmr+TJNUxJYR0TfgLWdZ/rhFlaJndNS9cTk6ftJbh7EFq1Ew2Ne+EpidKqxP+9bBrE/qD+XpYj6erU/7NuXB5stf1O0Hx+nWFbTMFZWG301qT3HJXttOv2fa9vYEnhfri4IOUKNwqgOCcEphil@dell-ph"]+      keys  = ["ssh-rsa AAAAB.....UKNwqgOCcEpaul@host"]
       #password = "password"       #password = "password"
     }     }
Ligne 151: Ligne 155:
   lifecycle {   lifecycle {
     ignore_changes = [     ignore_changes = [
-      network_device,+      network_device, # on conserve l'adresse MAC pour éviter de régénérer la VM 
     ]     ]
   }   }
Ligne 177: Ligne 181:
     # you may download this image locally on your workstation and then use the local path instead of the remote URL     # you may download this image locally on your workstation and then use the local path instead of the remote URL
     path      = "https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-genericcloud-amd64.qcow2"     path      = "https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-genericcloud-amd64.qcow2"
 +    # path    = "/var/www/html/debian-12-genericcloud-amd64.qcow2"   # chemin local
     file_name = "debian-12-genericcloud-amd64.img"     file_name = "debian-12-genericcloud-amd64.img"
   }   }
Ligne 190: Ligne 195:
   algorithm = "RSA"   algorithm = "RSA"
   rsa_bits  = 2048   rsa_bits  = 2048
-} 
- 
-output "debian_vm_password" { 
-  value     = random_password.debian_vm_password.result 
-  sensitive = true 
-} 
- 
-output "debian_vm_private_key" { 
-  value     = tls_private_key.debian_vm_key.private_key_pem 
-  sensitive = true 
 } }
  
Ligne 232: Ligne 227:
 </code> </code>
  
-On peut alors vérifier l'existence des 2 VM et s'y connecter après avoir récupéré leur adresse IP.+On peut alors vérifier l'existence des 2 VMs et s'y connecter après avoir récupéré leur adresse IP (connexion console puis ''ip a''
 + 
 +==== 4. Modification des ressources puis plan ==== 
 +  * éditer le fichier **main.tf** pour changer la mémoire allouée aux VMs : 1024 => 512  
 +  * on peut alors relancer ''terraform plan'' qu affiche uniquement les modifications à effectuer 
 + 
 +==== 5. On termine par apply ==== 
 +  * la commande ''terraform apply'' lance les modifications en suspens et change la mémoire allouée à 512 Mo. 
 + 
 +==== 6. Epilogue : on conclut avec un playbook ansible ==== 
 +  * on peut alors lancer un playbook **ansible** (installer Apache par exemple) pour terminer la configuration des VM ...
  • terraform_bpg_proxmox.txt
  • Dernière modification : 2024/01/08 00:07
  • de ps