67 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# Proxmox Terraform Integration
 | 
						|
 | 
						|
You can use [Terraform](tools/terraform.md) to automate certain tasks on [Proxmox](infra/proxmox.md). This allows you to manage virtual machines and lxc containers with infrastructure-as-code. We're using the third-party plugin [telmate/terraform-provider-proxmox](https://github.com/Telmate/terraform-provider-proxmox).
 | 
						|
 | 
						|
## Authenticate to Proxmox
 | 
						|
 | 
						|
### Create an API Token on Proxmox
 | 
						|
 | 
						|
To create a new API Token for your `user` in Proxmox, follow the steps described in [Proxmox API Authentication](proxmox-api.md).
 | 
						|
 | 
						|
### Add Provider config to Terraform
 | 
						|
 | 
						|
```json
 | 
						|
terraform {
 | 
						|
  required_version = ">= 0.13.0"
 | 
						|
 | 
						|
  required_providers {
 | 
						|
    proxmox = {
 | 
						|
      source = "telmate/proxmox"
 | 
						|
      version = ">=2.9.14"
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
```json
 | 
						|
variable "PROXMOX_URL" {
 | 
						|
    type = string
 | 
						|
}
 | 
						|
 | 
						|
variable "PROXMOX_USER" {
 | 
						|
    type = string
 | 
						|
}
 | 
						|
 | 
						|
variable "PROXMOX_TOKEN" {
 | 
						|
    type = string
 | 
						|
    sensitive = true
 | 
						|
}
 | 
						|
 | 
						|
provider "proxmox" {
 | 
						|
    pm_api_url = var.PROXMOX_URL
 | 
						|
    pm_api_token_id = var.PROXMOX_USER
 | 
						|
    pm_api_token_secret = var.PROXMOX_TOKEN
 | 
						|
    pm_tls_insecure = false
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
## Templates
 | 
						|
 | 
						|
WIP
 | 
						|
 | 
						|
## Useful commands
 | 
						|
 | 
						|
### Import existing virtual machines to Terraform
 | 
						|
 | 
						|
Existing virtual machines can be imported to the Terraform state file with the following command. Make sure, you have created a corresponding **Resource** in the **Terraform File**.
 | 
						|
 | 
						|
```sh
 | 
						|
terraform import <resourcetype.resourcename> <id>
 | 
						|
```
 | 
						|
 | 
						|
In the telmate/terraform-provider-proxmox, the id needs to be set according to `<node>/<type>/<vmid>`, like in the following example.
 | 
						|
 | 
						|
```sh
 | 
						|
terraform import proxmox_vm_qemu.srv-prod-1 prx-prod-1/proxmox_vm_qemu/102
 | 
						|
```
 |