0
0
mirror of https://github.com/bpg/terraform-provider-proxmox.git synced 2025-07-01 19:12:59 +00:00

fix(tasks): fix UPID (task id) parsing error (#591)

Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
This commit is contained in:
Pavel Boldyrev 2023-09-27 21:46:45 -04:00 committed by GitHub
parent 222f9eb4fa
commit 294a9daa87
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 12 deletions

View File

@ -28,8 +28,8 @@ type GetTaskStatusResponseData struct {
// TaskID contains the components of a PVE task ID. // TaskID contains the components of a PVE task ID.
type TaskID struct { type TaskID struct {
NodeName string NodeName string
PID int PID int64
PStart int PStart int64
StartTime time.Time StartTime time.Time
Type string Type string
ID string ID string
@ -51,17 +51,17 @@ func ParseTaskID(taskID string) (TaskID, error) {
return TaskID{}, fmt.Errorf("missing node name in task ID: %s", taskID) return TaskID{}, fmt.Errorf("missing node name in task ID: %s", taskID)
} }
pid, err := strconv.ParseInt(parts[2], 16, 32) pid, err := strconv.ParseInt(parts[2], 16, 64)
if err != nil { if err != nil {
return TaskID{}, fmt.Errorf("error parsing task ID: %w", err) return TaskID{}, fmt.Errorf("error parsing task ID: %w", err)
} }
pstart, err := strconv.ParseInt(parts[3], 16, 32) pstart, err := strconv.ParseInt(parts[3], 16, 64)
if err != nil { if err != nil {
return TaskID{}, fmt.Errorf("error parsing pstart in task ID: %q: %w", taskID, err) return TaskID{}, fmt.Errorf("error parsing pstart in task ID: %q: %w", taskID, err)
} }
stime, err := strconv.ParseInt(parts[4], 16, 32) stime, err := strconv.ParseInt(parts[4], 16, 64)
if err != nil { if err != nil {
return TaskID{}, fmt.Errorf("error parsing start time in task ID: %q: %w", taskID, err) return TaskID{}, fmt.Errorf("error parsing start time in task ID: %q: %w", taskID, err)
} }
@ -76,8 +76,8 @@ func ParseTaskID(taskID string) (TaskID, error) {
return TaskID{ return TaskID{
NodeName: parts[1], NodeName: parts[1],
PID: int(pid), PID: pid,
PStart: int(pstart), PStart: pstart,
StartTime: time.Unix(stime, 0).UTC(), StartTime: time.Unix(stime, 0).UTC(),
Type: parts[5], Type: parts[5],
ID: parts[6], ID: parts[6],

View File

@ -17,10 +17,12 @@ import (
func TestParseTaskID(t *testing.T) { func TestParseTaskID(t *testing.T) {
t.Parallel() t.Parallel()
stime, err := time.Parse(time.RFC3339, "2023-08-30T21:28:16-04:00") parseTime := func(s string) time.Time {
require.NoError(t, err) stime, err := time.Parse(time.RFC3339, s)
require.NoError(t, err)
stime = stime.UTC() return stime.UTC()
}
tests := []struct { tests := []struct {
name string name string
@ -35,7 +37,7 @@ func TestParseTaskID(t *testing.T) {
NodeName: "pve", NodeName: "pve",
PID: 400563, PID: 400563,
PStart: 17540764, PStart: 17540764,
StartTime: stime, StartTime: parseTime("2023-08-30T21:28:16-04:00"),
Type: "imgcopy", Type: "imgcopy",
ID: "", ID: "",
User: "root@pam", User: "root@pam",
@ -48,12 +50,25 @@ func TestParseTaskID(t *testing.T) {
NodeName: "pve", NodeName: "pve",
PID: 400563, PID: 400563,
PStart: 17540764, PStart: 17540764,
StartTime: stime, StartTime: parseTime("2023-08-30T21:28:16-04:00"),
Type: "qmcreate", Type: "qmcreate",
ID: "101", ID: "101",
User: "root@pam", User: "root@pam",
}, },
}, },
{
name: "large pid",
taskID: "UPID:pve-srv:0012D68C:8206F38C:65144CB7:qmcreate:501:root@pam:",
want: TaskID{
NodeName: "pve-srv",
PID: 1234572,
PStart: 2181493644,
StartTime: parseTime("2023-09-27T15:39:35Z"),
Type: "qmcreate",
ID: "501",
User: "root@pam",
},
},
{ {
name: "missing node", name: "missing node",
taskID: "UPID::00061CB3:010BA69C:64EFECB0:qmcreate:101:root@pam:", taskID: "UPID::00061CB3:010BA69C:64EFECB0:qmcreate:101:root@pam:",