Tạo VM với Terraform và Proxmox
Step 1: Tạo API Token và Lưu lại Token ID , Secret
- Login vào proxmox ve server
- Chọn Datacenter ở cột trái
- Nhìn qua phải thì section Permissions > chọn API Token
- Chọn Add để tạo Api Token
- Add Token theo user root
- Privilege Seperation: Unchecked (bỏ check)
- Token Id: Điền tên terraform
- Nhấn Add Button
Lưu lại các thông tin sau vì nó chỉ hiện một lần:
- Token ID: root@pam!teraform
- Secret: 8ac5928a-9f2f-49e0-90d4-7542f87b9361
Step 2: Tạo Folder và các files terraform-proxmox
Sau khi lưu xong token id và secret thì bạn mở webstorm hay vscode lên, tạo project trống tên là terraform-proxmox ở ổ đĩa nào tùy bạn, mình chọn ổ đĩa F:
- Install plugin hổ trợ terraform language
Tạo 3 file, provider.tf, credentials.auto.tfvars, srv-demo-1.tf
file: provider.tf
terraform {
required_version = ">= 0.13.0"
required_providers {
proxmox = {
source = "telmate/proxmox"
version = ">= 2.9.14"
}
}
}
variable "proxmox_api_url" {
type = string
}
variable "proxmox_api_token_id" {
type = string
sensitive = true
}
variable "proxmox_api_token_secret" {
type = string
sensitive = true
}
provider "proxmox" {
pm_api_url = var.proxmox_api_url
pm_token_id = var.proxmox_api_token_id
pm_token_secret = var.proxmox_api_token_secret
pm_tls_insecure = true
}
file: credentials.auto.tfvars
proxmox_api_url = "https://gray.kyluat.lan:8006/api2/json"
proxmox_api_token_id = "root@pam!teraform2"
proxmox_api_token_secret = "8ac5928a-9f2f-49e0-90d4-7542f87b9361"
Nhớ chỉnh sửa lại thông tin url, token id và token secret của bạn đã tạo. cái url thay thế bằng ip address server proxmox của bạn cũng đc. ví dụ: https://192.168.1.12:8006/api2/json
file: srv-demo-1.tf
resource "proxmox_vm_qemu" "srv_demo_1" {
name = "srv-demo-1"
desc = "Demo Server 1"
vmid = "201"
target_node = "gray"
agent = 0
clone = "ubuntu-cloud"
cores = 2
sockets = 1
cpu = "host"
memory = 2048
network {
model = "virtio"
bridge = "vmbr0"
}
disk {
type = "virtio"
storage = "local-lvm"
size = "2252M"
}
os_type = "cloud-init"
ipconfig0 = "ip=dhcp"
nameserver = "192.168.1.11"
ciuser = "USERNAMEABC"
sshkeys = <<EOF
ssh-rsa AAAAB3NzaC1yc2EAAABKDJhkashdkahsdahdkhasd.35c2EAAABKDJhkashdkahsdahdkhasd.35c2EAAABKDJhkashdkahsdahdkhasd.35c2EAAABKDJhkashdkahsdahdkhasd.3590Y
EOF
}
Nhớ chỉnh sửa thông tin cho phù hợp:
- agent: nếu mà cloud image của bạn đã cài đặt qemu guest agent sẵn rồi thì để value 1. còn không thì để 0
- clone: là tên của cloud image mà bạn đã tạo, không cần vmid
- storage: bình thường là local-lvm , còn bạn xài storage khác thì sửa lại
- ipconfig0: bạn có thể để static ip cũng đc, còn không để dhcp cho server tự tạo ip
- nameserver: dns nameserver ip của mình dùng là pi-hole
- ciuser: username của cloud image của bạn đã setup
- sshkeys: chỉnh sửa lại ssh keys để sau khi khởi tạo còn login vào dễ dàng.
- disk > type: bình thường là virtio, nếu xài scsi thì phải sửa lại type = "scsi". điền thêm thông tin bên ngoài (trên dòng os_type) với:
disk {
type = "scsi"
storage = "local-lvm"
size = "2252M"
}
scsihw = "virtio-scsi-pci"
os_type = "cloud-init"
- disks > size: phần này phải điền đúng với size của cloud image đã tạo. nếu không terraform tự tạo ra 2nd disk.
Cài đặt terraform lên máy và cd tới folder project đó, sau đó đánh command
cd f:/terraform-proxmox/
terraform init
sau đó đánh command sau để check xem terraform plan success hết variables hay không:
terraform plan
Nếu thấy mọi thứ xanh lè hết thì đúng rồi, trừ phi copy and paste mấy cái thông số sai. Kế tiếp nhấn command sau để apply:
terraform apply --auto-approve
Sau đó vào proxmox sẽ thấy vm srv_demo_1 như hình sau
No Comments