From a53a116b96f0b549bd05428de2912c4caa0a05c1 Mon Sep 17 00:00:00 2001 From: Pivnoy Date: Wed, 13 Mar 2024 21:30:19 +0300 Subject: [PATCH 01/11] vzdump api call --- types.go | 26 ++++++++++++++++++++++++++ virtual_machine.go | 13 +++++++++++++ 2 files changed, 39 insertions(+) diff --git a/types.go b/types.go index c646411..8299267 100644 --- a/types.go +++ b/types.go @@ -1242,3 +1242,29 @@ type FirewallIPSet struct { Digest string `json:"digest,omitempty"` Comment string `json:"comment,omitempty"` } + +type ( + ModeType = string + CompressType = string +) + +const ( + ModeSnapshot = ModeType("snapshot") + ModeSuspend = ModeType("suspend") + ModeStop = ModeType("stop") + + CompressZero = CompressType("0") + CompressOne = CompressType("1") + CompressGzip = CompressType("gzip") + CompressLzo = CompressType("lzo") + CompressZstd = CompressType("zstd") +) + +type VirtualMachineBackupOptions struct { + VMID uint64 `json:"vmid"` + Storage string `json:"storage,omitempty"` + Remove int `json:"remove,omitempty"` + Mode ModeType `json:"mode,omitempty"` + Compress CompressType `json:"compess,omitempty"` + Notes string `json:"notes,omitempty"` +} diff --git a/virtual_machine.go b/virtual_machine.go index 3e379d8..47d8fcd 100644 --- a/virtual_machine.go +++ b/virtual_machine.go @@ -643,3 +643,16 @@ func (v *VirtualMachine) ConvertToTemplate(ctx context.Context) (task *Task, err } return NewTask(upid, v.client), nil } + +func (v *VirtualMachine) Vzdump(ctx context.Context, params *VirtualMachineBackupOptions) (task *Task, err error) { + var upid UPID + + if params == nil { + params = &VirtualMachineBackupOptions{} + } + + if err = v.client.Post(ctx, fmt.Sprintf("/nodes/%s/vzdump", v.Node), params, &upid); err != nil { + return nil, err + } + return NewTask(upid, v.client), nil +} From 9ec5fe0b8b40b46b049ee87d4bcb573f1199f231 Mon Sep 17 00:00:00 2001 From: Pivnoy Date: Wed, 13 Mar 2024 21:41:17 +0300 Subject: [PATCH 02/11] struct tag fix --- types.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/types.go b/types.go index 8299267..3fcd26b 100644 --- a/types.go +++ b/types.go @@ -1265,6 +1265,6 @@ type VirtualMachineBackupOptions struct { Storage string `json:"storage,omitempty"` Remove int `json:"remove,omitempty"` Mode ModeType `json:"mode,omitempty"` - Compress CompressType `json:"compess,omitempty"` + Compress CompressType `json:"compress,omitempty"` Notes string `json:"notes,omitempty"` } From 50b62d3800ab195f14c82fb3a9de7d9fc3cc01ef Mon Sep 17 00:00:00 2001 From: Pivnoy Date: Fri, 15 Mar 2024 13:40:34 +0300 Subject: [PATCH 03/11] replace vzdump method based on proxmox ve api --- nodes.go | 13 +++++++++++++ types.go | 2 +- virtual_machine.go | 13 ------------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/nodes.go b/nodes.go index 8080ac9..73dff3b 100644 --- a/nodes.go +++ b/nodes.go @@ -276,3 +276,16 @@ func (n *Node) GetCustomCertificates(ctx context.Context) (certs *NodeCertificat err = n.client.Get(ctx, fmt.Sprintf("/nodes/%s/certificates/info", n.Name), &certs) return } + +func (n *Node) Vzdump(ctx context.Context, params *VirtualMachineBackupOptions) (task *Task, err error) { + var upid UPID + + if params == nil { + return nil, fmt.Errorf("empty params") + } + + if err = n.client.Post(ctx, fmt.Sprintf("/nodes/%s/vzdump", n.Name), params, &upid); err != nil { + return nil, err + } + return NewTask(upid, n.client), nil +} diff --git a/types.go b/types.go index 3fcd26b..a04667f 100644 --- a/types.go +++ b/types.go @@ -1262,7 +1262,7 @@ const ( type VirtualMachineBackupOptions struct { VMID uint64 `json:"vmid"` - Storage string `json:"storage,omitempty"` + Storage string `json:"storage"` Remove int `json:"remove,omitempty"` Mode ModeType `json:"mode,omitempty"` Compress CompressType `json:"compress,omitempty"` diff --git a/virtual_machine.go b/virtual_machine.go index 47d8fcd..3e379d8 100644 --- a/virtual_machine.go +++ b/virtual_machine.go @@ -643,16 +643,3 @@ func (v *VirtualMachine) ConvertToTemplate(ctx context.Context) (task *Task, err } return NewTask(upid, v.client), nil } - -func (v *VirtualMachine) Vzdump(ctx context.Context, params *VirtualMachineBackupOptions) (task *Task, err error) { - var upid UPID - - if params == nil { - params = &VirtualMachineBackupOptions{} - } - - if err = v.client.Post(ctx, fmt.Sprintf("/nodes/%s/vzdump", v.Node), params, &upid); err != nil { - return nil, err - } - return NewTask(upid, v.client), nil -} From ff0cfcef2aeb5e9caaba8eb6b6ac395d26ec3cfb Mon Sep 17 00:00:00 2001 From: Pivnoy Date: Sat, 16 Mar 2024 01:27:17 +0300 Subject: [PATCH 04/11] review comment fixes --- nodes.go | 2 +- types.go | 63 +++++++++++++++++++++++++++++++++++++++++--------------- 2 files changed, 47 insertions(+), 18 deletions(-) diff --git a/nodes.go b/nodes.go index 73dff3b..cb7ba15 100644 --- a/nodes.go +++ b/nodes.go @@ -281,7 +281,7 @@ func (n *Node) Vzdump(ctx context.Context, params *VirtualMachineBackupOptions) var upid UPID if params == nil { - return nil, fmt.Errorf("empty params") + params = &VirtualMachineBackupOptions{} } if err = n.client.Post(ctx, fmt.Sprintf("/nodes/%s/vzdump", n.Name), params, &upid); err != nil { diff --git a/types.go b/types.go index a04667f..0d02b4e 100644 --- a/types.go +++ b/types.go @@ -1244,27 +1244,56 @@ type FirewallIPSet struct { } type ( - ModeType = string - CompressType = string + VirtualMachineBackupMode = string + VirtualMachineBackupCompress = string + VirtualMachineBackupNotificationPolicy = string ) const ( - ModeSnapshot = ModeType("snapshot") - ModeSuspend = ModeType("suspend") - ModeStop = ModeType("stop") - - CompressZero = CompressType("0") - CompressOne = CompressType("1") - CompressGzip = CompressType("gzip") - CompressLzo = CompressType("lzo") - CompressZstd = CompressType("zstd") + VirtualMachineBackupModeSnapshot = VirtualMachineBackupMode("snapshot") + VirtualMachineBackupModeSuspend = VirtualMachineBackupMode("suspend") + VirtualMachineBackupModeStop = VirtualMachineBackupMode("stop") + + VirtualMachineBackupCompressZero = VirtualMachineBackupCompress("0") + VirtualMachineBackupCompressOne = VirtualMachineBackupCompress("1") + VirtualMachineBackupCompressGzip = VirtualMachineBackupCompress("gzip") + VirtualMachineBackupCompressLzo = VirtualMachineBackupCompress("lzo") + VirtualMachineBackupCompressZstd = VirtualMachineBackupCompress("zstd") + + VirtualMachineBackupNotificationPolicyAlways = VirtualMachineBackupNotificationPolicy("always") + VirtualMachineBackupNotificationPolicyFailure = VirtualMachineBackupNotificationPolicy("failure") + VirtualMachineBackupNotificationPolicyNever = VirtualMachineBackupNotificationPolicy("never") ) type VirtualMachineBackupOptions struct { - VMID uint64 `json:"vmid"` - Storage string `json:"storage"` - Remove int `json:"remove,omitempty"` - Mode ModeType `json:"mode,omitempty"` - Compress CompressType `json:"compress,omitempty"` - Notes string `json:"notes,omitempty"` + All bool `json:"all,omitempty"` + BwLimit uint `json:"bwlimit,omitempty"` + Compress VirtualMachineBackupCompress `json:"compress,omitempty"` + DumpDir string `json:"dumpDir,omitempty"` + Exclude string `json:"exclude,omitempty"` + ExcludePath []string `json:"exclude-path,omitempty"` + IoNice uint `json:"ionice,omitempty"` + LockWait uint `json:"lockwait,omitempty"` + MailTo string `json:"mailto,omitempty"` + Mode VirtualMachineBackupMode `json:"mode,omitempty"` + Node string `json:"node,omitempty"` + NotesTemplate string `json:"notes-template,omitempty"` + NotificationPolicy VirtualMachineBackupNotificationPolicy `json:"notification-policy,omitempty"` + NotificationTarget string `json:"notification-target,omitempty"` + Performance string `json:"performance,omitempty"` + Pigz int `json:"pigz,omitempty"` + Pool string `json:"pool,omitempty"` + Protected string `json:"protected,omitempty"` + PruneBackups string `json:"prune-backups,omitempty"` + Quiet bool `json:"quiet,omitempty"` + Remove bool `json:"remove,omitempty"` + Script string `json:"script,omitempty"` + StdExcludes bool `json:"stdexcludes,omitempty"` + StdOut bool `json:"stdout,omitempty"` + Stop bool `json:"stop,omitempty"` + StopWait uint `json:"stopwait,omitempty"` + Storage string `json:"storage,omitempty"` + TmpDir string `json:"tmpdir,omitempty"` + VMID uint64 `json:"vmid,omitempty"` + Zstd uint `json:"zstd,omitempty"` } From 375c1b53994dde2fdd5ba999bf9a63e9bdf1f418 Mon Sep 17 00:00:00 2001 From: Pivnoy Date: Sat, 30 Mar 2024 16:10:05 +0300 Subject: [PATCH 05/11] cluster tasks api call --- cluster.go | 10 ++++++++++ types.go | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/cluster.go b/cluster.go index a3da92c..c8c3f64 100644 --- a/cluster.go +++ b/cluster.go @@ -49,3 +49,13 @@ func (cl *Cluster) Resources(ctx context.Context, filters ...string) (rs Cluster return rs, cl.client.Get(ctx, u.String(), &rs) } + +func (cl *Cluster) Tasks(ctx context.Context) (Tasks, error) { + var tasks Tasks + + if err := cl.client.Get(ctx, "/cluster/tasks", &tasks); err != nil { + return nil, err + } + + return tasks, nil +} diff --git a/types.go b/types.go index 63f9651..8c0059b 100644 --- a/types.go +++ b/types.go @@ -580,7 +580,7 @@ type VirtualMachineMoveDiskOptions struct { type UPID string -type Tasks []*Tasks +type Tasks []*Task type Task struct { client *Client UPID UPID From 6e5c7e34535bfabed0d863030f3b535ab5faa528 Mon Sep 17 00:00:00 2001 From: Pivnoy Date: Sat, 30 Mar 2024 16:27:43 +0300 Subject: [PATCH 06/11] add client instance to cluster task --- cluster.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cluster.go b/cluster.go index c8c3f64..244e701 100644 --- a/cluster.go +++ b/cluster.go @@ -57,5 +57,9 @@ func (cl *Cluster) Tasks(ctx context.Context) (Tasks, error) { return nil, err } + for index := range tasks { + tasks[index].client = cl.client + } + return tasks, nil } From 0187fca48e9b489f3f33a2d4a558b185ea18ae77 Mon Sep 17 00:00:00 2001 From: Pivnoy Date: Sat, 4 May 2024 01:04:53 +0300 Subject: [PATCH 07/11] update firewall options --- types.go | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/types.go b/types.go index 4209f16..3e5e21b 100644 --- a/types.go +++ b/types.go @@ -980,16 +980,16 @@ type FirewallNodeOption struct { } type FirewallVirtualMachineOption struct { - Enable bool `json:"enable,omitempty"` - Dhcp bool `json:"dhcp,omitempty"` - Ipfilter bool `json:"ipfilter,omitempty"` - LogLevelIn string `json:"log_level_in,omitempty"` - LogLevelOut string `json:"log_level_out,omitempty"` - Macfilter bool `json:"macfilter,omitempty"` - Ntp bool `json:"ntp,omitempty"` - PolicyIn string `json:"policy_in,omitempty"` - PolicyOut string `json:"policy_out,omitempty"` - Radv bool `json:"radv,omitempty"` + Enable *bool `json:"enable,omitempty"` + Dhcp *bool `json:"dhcp,omitempty"` + IpFilter *bool `json:"ipfilter,omitempty"` + LogLevelIn *string `json:"log_level_in,omitempty"` + LogLevelOut *string `json:"log_level_out,omitempty"` + MacFilter *bool `json:"macfilter,omitempty"` + Ndp *bool `json:"ndp,omitempty"` + PolicyIn *string `json:"policy_in,omitempty"` + PolicyOut *string `json:"policy_out,omitempty"` + Radv *bool `json:"radv,omitempty"` } type Snapshot struct { From 551e941e35504d9f38f5976a891df1c5b3e95fe9 Mon Sep 17 00:00:00 2001 From: Pivnoy Date: Sat, 4 May 2024 01:59:13 +0300 Subject: [PATCH 08/11] update field types --- types.go | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/types.go b/types.go index 3e5e21b..1b58dd6 100644 --- a/types.go +++ b/types.go @@ -980,16 +980,16 @@ type FirewallNodeOption struct { } type FirewallVirtualMachineOption struct { - Enable *bool `json:"enable,omitempty"` - Dhcp *bool `json:"dhcp,omitempty"` - IpFilter *bool `json:"ipfilter,omitempty"` - LogLevelIn *string `json:"log_level_in,omitempty"` - LogLevelOut *string `json:"log_level_out,omitempty"` - MacFilter *bool `json:"macfilter,omitempty"` - Ndp *bool `json:"ndp,omitempty"` - PolicyIn *string `json:"policy_in,omitempty"` - PolicyOut *string `json:"policy_out,omitempty"` - Radv *bool `json:"radv,omitempty"` + Enable *IntOrBool `json:"enable,omitempty"` + Dhcp *IntOrBool `json:"dhcp,omitempty"` + IpFilter *IntOrBool `json:"ipfilter,omitempty"` + LogLevelIn *string `json:"log_level_in,omitempty"` + LogLevelOut *string `json:"log_level_out,omitempty"` + MacFilter *IntOrBool `json:"macfilter,omitempty"` + Ndp *IntOrBool `json:"ndp,omitempty"` + PolicyIn *string `json:"policy_in,omitempty"` + PolicyOut *string `json:"policy_out,omitempty"` + Radv *IntOrBool `json:"radv,omitempty"` } type Snapshot struct { From 4875d865f4bfe1de6bf8de51d8b33928c1657e9b Mon Sep 17 00:00:00 2001 From: Pivnoy Date: Sat, 4 May 2024 02:13:20 +0300 Subject: [PATCH 09/11] update field types --- types.go | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/types.go b/types.go index 1b58dd6..d8e26e2 100644 --- a/types.go +++ b/types.go @@ -980,16 +980,16 @@ type FirewallNodeOption struct { } type FirewallVirtualMachineOption struct { - Enable *IntOrBool `json:"enable,omitempty"` - Dhcp *IntOrBool `json:"dhcp,omitempty"` - IpFilter *IntOrBool `json:"ipfilter,omitempty"` - LogLevelIn *string `json:"log_level_in,omitempty"` - LogLevelOut *string `json:"log_level_out,omitempty"` - MacFilter *IntOrBool `json:"macfilter,omitempty"` - Ndp *IntOrBool `json:"ndp,omitempty"` - PolicyIn *string `json:"policy_in,omitempty"` - PolicyOut *string `json:"policy_out,omitempty"` - Radv *IntOrBool `json:"radv,omitempty"` + Enable *int `json:"enable,omitempty"` + Dhcp *int `json:"dhcp,omitempty"` + IpFilter *int `json:"ipfilter,omitempty"` + LogLevelIn *string `json:"log_level_in,omitempty"` + LogLevelOut *string `json:"log_level_out,omitempty"` + MacFilter *int `json:"macfilter,omitempty"` + Ndp *int `json:"ndp,omitempty"` + PolicyIn *string `json:"policy_in,omitempty"` + PolicyOut *string `json:"policy_out,omitempty"` + Radv *int `json:"radv,omitempty"` } type Snapshot struct { From 202a4a62acba10c7d92c8f76b546a11cd1dcc47d Mon Sep 17 00:00:00 2001 From: Pivnoy Date: Sat, 4 May 2024 17:16:33 +0300 Subject: [PATCH 10/11] change firewall get option func --- virtual_machine.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/virtual_machine.go b/virtual_machine.go index 4915f72..b40af0c 100644 --- a/virtual_machine.go +++ b/virtual_machine.go @@ -569,9 +569,14 @@ func (v *VirtualMachine) AgentSetUserPassword(ctx context.Context, password stri return v.client.Post(ctx, fmt.Sprintf("/nodes/%s/qemu/%d/agent/set-user-password", v.Node, v.VMID), map[string]string{"password": password, "username": username}, nil) } -func (v *VirtualMachine) FirewallOptionGet(ctx context.Context) (firewallOption *FirewallVirtualMachineOption, err error) { - err = v.client.Get(ctx, fmt.Sprintf("/nodes/%s/qemu/%d/firewall/options", v.Node, v.VMID), firewallOption) - return +func (v *VirtualMachine) FirewallOptionGet(ctx context.Context) (*FirewallVirtualMachineOption, error) { + firewallOption := FirewallVirtualMachineOption{} + + if err := v.client.Get(ctx, fmt.Sprintf("/nodes/%s/qemu/%d/firewall/options", v.Node, v.VMID), &firewallOption); err != nil { + return nil, err + } + + return &firewallOption, nil } func (v *VirtualMachine) FirewallOptionSet(ctx context.Context, firewallOption *FirewallVirtualMachineOption) error { From 21bfc4ac90210564514e0a5156991ab7dd7f29a5 Mon Sep 17 00:00:00 2001 From: Pivnoy Date: Sat, 4 May 2024 18:04:03 +0300 Subject: [PATCH 11/11] change for common types --- types.go | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/types.go b/types.go index d8e26e2..1b58dd6 100644 --- a/types.go +++ b/types.go @@ -980,16 +980,16 @@ type FirewallNodeOption struct { } type FirewallVirtualMachineOption struct { - Enable *int `json:"enable,omitempty"` - Dhcp *int `json:"dhcp,omitempty"` - IpFilter *int `json:"ipfilter,omitempty"` - LogLevelIn *string `json:"log_level_in,omitempty"` - LogLevelOut *string `json:"log_level_out,omitempty"` - MacFilter *int `json:"macfilter,omitempty"` - Ndp *int `json:"ndp,omitempty"` - PolicyIn *string `json:"policy_in,omitempty"` - PolicyOut *string `json:"policy_out,omitempty"` - Radv *int `json:"radv,omitempty"` + Enable *IntOrBool `json:"enable,omitempty"` + Dhcp *IntOrBool `json:"dhcp,omitempty"` + IpFilter *IntOrBool `json:"ipfilter,omitempty"` + LogLevelIn *string `json:"log_level_in,omitempty"` + LogLevelOut *string `json:"log_level_out,omitempty"` + MacFilter *IntOrBool `json:"macfilter,omitempty"` + Ndp *IntOrBool `json:"ndp,omitempty"` + PolicyIn *string `json:"policy_in,omitempty"` + PolicyOut *string `json:"policy_out,omitempty"` + Radv *IntOrBool `json:"radv,omitempty"` } type Snapshot struct {