0
0
mirror of https://github.com/bpg/terraform-provider-proxmox.git synced 2025-06-30 02:31:10 +00:00

fix(vm): ignore 599 task status response when waiting for VM start (#1365)

Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
This commit is contained in:
Pavel Boldyrev 2024-06-06 21:50:18 -04:00 committed by GitHub
parent be94270e1f
commit 5d4193b6be
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 45 additions and 8 deletions

View File

@ -42,7 +42,7 @@ resource "proxmox_virtual_environment_container" "example_template" {
node_name = data.proxmox_virtual_environment_nodes.example.names[0]
operating_system {
template_file_id = proxmox_virtual_environment_download_file.release_20231211_ubuntu_22_jammy_lxc_img.id
template_file_id = proxmox_virtual_environment_download_file.release_20240514_ubuntu_22_jammy_lxc_img.id
type = "ubuntu"
}

View File

@ -1,11 +1,11 @@
## Debian and ubuntu image download
resource "proxmox_virtual_environment_download_file" "release_20231211_ubuntu_22_jammy_lxc_img" {
resource "proxmox_virtual_environment_download_file" "release_20240514_ubuntu_22_jammy_lxc_img" {
content_type = "vztmpl"
datastore_id = "local"
node_name = "pve"
url = "https://cloud-images.ubuntu.com/releases/22.04/release-20231211/ubuntu-22.04-server-cloudimg-amd64-root.tar.xz"
checksum = "c9997dcfea5d826fd04871f960c513665f2e87dd7450bba99f68a97e60e4586e"
url = var.release_20240416_ubuntu_22_jammy_lxc_img_url
checksum = var.release_20240416_ubuntu_22_jammy_lxc_img_checksum
checksum_algorithm = "sha256"
upload_timeout = 4444
overwrite_unmanaged = true
@ -16,7 +16,7 @@ resource "proxmox_virtual_environment_download_file" "latest_debian_12_bookworm_
datastore_id = "local"
file_name = "debian-12-generic-amd64.img"
node_name = "pve"
url = "https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2"
url = var.latest_debian_12_bookworm_qcow2_img_url
overwrite = true
overwrite_unmanaged = true
}

View File

@ -11,4 +11,22 @@ variable "virtual_environment_api_token" {
variable "virtual_environment_ssh_username" {
type = string
description = "The username for the Proxmox Virtual Environment API"
}
}
variable "latest_debian_12_bookworm_qcow2_img_url" {
type = string
description = "The URL for the latest Debian 12 Bookworm qcow2 image"
default = "https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2"
}
variable "release_20240416_ubuntu_22_jammy_lxc_img_url" {
type = string
description = "The URL for the Ubuntu 22.04 LXC image"
default = "https://cloud-images.ubuntu.com/releases/22.04/release-20240416/ubuntu-22.04-server-cloudimg-amd64-root.tar.xz"
}
variable "release_20240416_ubuntu_22_jammy_lxc_img_checksum" {
type = string
description = "The checksum for the Ubuntu 22.04 LXC image"
default = "a362bf415ad2eae4854deda6237894a96178a2edbbd5a1956d6c55c5837a80d3"
}

View File

@ -88,7 +88,8 @@ func (c *Client) DeleteTask(ctx context.Context, upid string) error {
}
type taskWaitOptions struct {
ignoreWarnings bool
ignoreWarnings bool
ignoreStatusCode int
}
// TaskWaitOption is an option for waiting for a task to complete.
@ -107,6 +108,19 @@ func (w withIgnoreWarnings) apply(opts *taskWaitOptions) {
opts.ignoreWarnings = true
}
type withIgnoreStatus struct {
statusCode int
}
// WithIgnoreStatus is an option to ignore particular status code from PVE API when waiting for a task to complete.
func WithIgnoreStatus(statusCode int) TaskWaitOption {
return withIgnoreStatus{statusCode: statusCode}
}
func (w withIgnoreStatus) apply(opts *taskWaitOptions) {
opts.ignoreStatusCode = w.statusCode
}
// WaitForTask waits for a specific task to complete.
func (c *Client) WaitForTask(ctx context.Context, upid string, opts ...TaskWaitOption) error {
errStillRunning := errors.New("still running")
@ -140,6 +154,10 @@ func (c *Client) WaitForTask(ctx context.Context, upid string, opts ...TaskWaitO
// immediately after creation
return true
}
if options.ignoreStatusCode != 0 && target.Code == options.ignoreStatusCode {
return true
}
}
return errors.Is(err, errStillRunning)

View File

@ -376,7 +376,7 @@ func (c *Client) StartVM(ctx context.Context, timeoutSec int) ([]string, error)
return nil, err
}
err = c.Tasks().WaitForTask(ctx, *taskID)
err = c.Tasks().WaitForTask(ctx, *taskID, tasks.WithIgnoreStatus(599))
if err != nil {
log, e := c.Tasks().GetTaskLog(ctx, *taskID)
if e != nil {

View File

@ -552,6 +552,7 @@ github.com/goreleaser/fileglob v1.3.0 h1:/X6J7U8lbDpQtBvGcwwPS6OpzkNVlVEsFUVRx9+
github.com/goreleaser/fileglob v1.3.0/go.mod h1:Jx6BoXv3mbYkEzwm9THo7xbr5egkAraxkGorbJb4RxU=
github.com/goreleaser/goreleaser v1.26.2 h1:1iY1HaXtRiMTrwy6KE1sNjkRjsjMi+9l0k6WUX8GpWw=
github.com/goreleaser/goreleaser v1.26.2/go.mod h1:mHi6zr6fuuOh5eHdWWgyo/N8BWED5WEVtb/4GETc9jQ=
github.com/goreleaser/goreleaser/v2 v2.0.0/go.mod h1:eit+2+u8uJLgBtuEMITPaQHwO55amhR089eFkbWi3s0=
github.com/goreleaser/nfpm/v2 v2.37.1 h1:RUmeEt8OlEVeSzKRrO5Vl5qVWCtUwx4j9uivGuRo5fw=
github.com/goreleaser/nfpm/v2 v2.37.1/go.mod h1:q8+sZXFqn106/eGw+9V+I8+izFxZ/sJjrhwmEUxXhUg=
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=