Project này sử dụng Terraform để tạo VMs trên Proxmox với cloud-init configuration được tạo tự động.
- ✅ Cloud-init configuration tự động tạo từ template
- ✅ Tự động upload cloud-init lên Proxmox
- ✅ Cấu hình Tailscale và SSH tự động
- ✅ Không cần upload thủ công snippet files
- Terraform >= 1.4.0
- PowerShell (có sẵn trên Windows)
- PowerShell Remoting phải được enable trên Proxmox host
- Template VM đã được tạo (cloud-init enabled)
- Storage
localphải có snippets enabled
Cập nhật file terraform.tfvars với thông tin của bạn:
proxmox_host = "your-proxmox-ip"
proxmox_user = "root@pam"
proxmox_password = "your-password"
proxmox_node = "pve"
template_name = "ubuntu-22_04"
vm_name = "ubuntu-test"
root_password = "your-vm-password"
tailscale_authkey = "tskey-auth-xxxxx"
vm_count = 1
vm_cpu = 1
vm_memory = 1024terraform initterraform planterraform applytf-demo/
├── main.tf # Main configuration
├── variables.tf # Variable definitions
├── terraform.tfvars # Variable values (git ignored)
├── versions.tf # Provider versions
├── outputs.tf # Outputs
├── cloud-init-user.yml # Cloud-init template
└── generated-*.yml # Generated files (auto-created)
File cloud-init-user.yml chứa template cho cloud-init configuration:
- Root access: Enable root login với password
- SSH config: Enable password authentication
- Tailscale: Tự động cài đặt và kết nối với authkey
- Template rendering: Terraform đọc
cloud-init-user.ymlvà thay thế variables - File generation: Tạo file
generated-cloud-init-user-*.yml - Upload: Sử dụng PowerShell để upload file lên
/var/lib/vz/snippets/trên Proxmox - VM creation: Tạo VM với cicustom pointing to uploaded snippet
Nếu gặp lỗi PowerShell remoting, có thể cần:
- Enable WSMan trên Proxmox:
# Trên Proxmox host
apt-get install -y openssh-server- Sử dụng alternative method với
pscp(PuTTY):- Download PuTTY suite
- Thay đổi provisioner trong
main.tfđể sử dụngpscp
Kiểm tra:
- Template VM có cloud-init package chưa
- Storage
localcó snippets enabled chưa - File cloud-init-user.yml có được upload đến đúng path chưa
terraform.tfvars chứa sensitive data:
- Thêm
terraform.tfvarsvào.gitignore - Không commit passwords/authkeys vào git
- Sử dụng environment variables hoặc secret management cho production
MIT