Hãy nhìn logs dưới, lỗi này là là do Ceph không thể tạo một image mới có tên là vm-100-cloudinit
vì nó đã tồn tại trong pool.
Lỗi chính xác là “rbd image vm-100-cloudinit already exists” – nghĩa là hình ảnh rbd với tên đó đã được tạo và bạn không thể tạo một hình ảnh khác cùng tên trong cùng một pool.
$ terraform apply --auto-approve
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# null_resource.run_script[0] will be created
+ resource "null_resource" "run_script" {
+ id = (known after apply)
}
# proxmox_vm_qemu.pve_cluster[0] will be created
+ resource "proxmox_vm_qemu" "pve_cluster" {
+ additional_wait = 5
+ agent = 1
+ automatic_reboot = true
+ balloon = 0
+ bios = "seabios"
+ boot = (known after apply)
+ bootdisk = "scsi0"
<đã lược bỏ bớt logs>
Plan: 2 to add, 0 to change, 0 to destroy.
proxmox_vm_qemu.pve_cluster[0]: Creating...
╷
│ Error: clone failed: rbd create 'vm-100-cloudinit' error: rbd: create error: 2023-11-13T18:35:46.753+0700 7fb23b623500 -1 librbd: rbd image vm-100-cloudinit already exists
│
│ with proxmox_vm_qemu.pve_cluster[0],
│ on main.tf line 45, in resource "proxmox_vm_qemu" "pve_cluster":
│ 45: resource "proxmox_vm_qemu" "pve_cluster" {
Để giải quyết vấn đề này, bạn có thể thực hiện các bước sau:
Kiểm tra danh sách các hình ảnh trong pool Ceph:
Sử dụng lệnh sau để kiểm tra xem image vm-100-cloudinit
đã tồn tại trong pool Ceph chưa:
$ rados -p ceph ls | grep vm-100-cloudinit
rbd_id.vm-100-cloudinit
Nếu nó xuất hiện trong danh sách, đó là lý do bạn không thể tạo một image mới cùng tên.
Xóa hình ảnh đã tồn tại (lưu ý rằng điều này sẽ xóa dữ liệu liên quan đến hình ảnh):
rados -p ceph rm rbd_id.vm-100-cloudinit
Hoặc sử dụng lệnh rbd để xóa:
rbd -p ceph rm vm-100-cloudinit
Lưu ý rằng việc này sẽ xóa hình ảnh và không thể phục hồi lại dữ liệu, hãy đảm bảo rằng bạn đã sao lưu hoặc đã xác định rằng dữ liệu đó có thể bị mất mát mà không ảnh hưởng đến hệ thống của bạn.
Giờ đây bạn có thể chạy lại lệnh teraform apply mà không còn gặp lỗi trên.
Lỗi tiếp theo có thể bạn sẽ gặp sau khi fix được lỗi trên, nếu bạn gặp lỗi rbd: create error: (17) File exists như logs dưới.
terraform plan
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# null_resource.run_script[0] will be created
+ resource "null_resource" "run_script" {
+ id = (known after apply)
}
# proxmox_vm_qemu.pve_cluster[0] will be created
+ resource "proxmox_vm_qemu" "pve_cluster" {
+ additional_wait = 5
+ agent = 1
+ automatic_reboot = true
+ balloon = 0
+ bios = "seabios"
+ boot = (known after apply)
+ bootdisk = "scsi0"
+ clone = "template-focal-server-cloudimg-amd64"
+ clone_wait = 10
<đã bỏ bớt logs>
+ network {
+ bridge = "vmbr0"
+ firewall = false
+ link_down = false
+ macaddr = (known after apply)
+ model = "virtio"
+ queues = (known after apply)
+ rate = (known after apply)
+ tag = -1
}
+ network {
+ bridge = "vmbr0"
+ firewall = false
+ link_down = false
+ macaddr = (known after apply)
+ model = "virtio"
+ queues = (known after apply)
+ rate = (known after apply)
+ tag = -1
}
}
Plan: 2 to add, 0 to change, 0 to destroy.
proxmox_vm_qemu.pve_cluster[0]: Creating...
╷
│ Error: clone failed: rbd create 'vm-100-cloudinit' error: rbd: create error: (17) File exists
│
│ with proxmox_vm_qemu.pve_cluster[0],
│ on main.tf line 45, in resource "proxmox_vm_qemu" "pve_cluster":
│ 45: resource "proxmox_vm_qemu" "pve_cluster
Hãy làm theo các bước sau:
- Xác định file đã tồn tại trong pool của bạn đang muốn triển khai máy ảo, trường hợp của mình là:
- Pool name:
ceph
- Filename bị trùng lặp:
vm-100-cloudinit
Bạn có thể tìm file đó trong pool bằng lệnh.
rbd -p <pool_name> list | grep <filename>
Ví dụ:
$ rbd -p ceph list | grep vm-100-cloudinit
vm-100-cloudinit
Nếu file tồn tại hãy xóa nó bằng lệnh rbd -p <pool_name>
rm <filename>
.
Ví dụ:
$ rbd -p ceph rm vm-100-cloudinit
Removing image: 100% complete...done.
Bây giờ bạn có thể chạy lại lệnh terraform apply mà không gặp lỗi trên nữa.