-
Notifications
You must be signed in to change notification settings - Fork 234
/
config_qemu_guestagent.go
94 lines (85 loc) · 2.99 KB
/
config_qemu_guestagent.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package proxmox
import (
"errors"
"strconv"
"strings"
"github.com/Telmate/proxmox-api-go/internal/util"
)
type QemuGuestAgent struct {
Enable *bool `json:"enable,omitempty"` // Optional
Type *QemuGuestAgentType `json:"type,omitempty"` // Optional
Freeze *bool `json:"freeze,omitempty"` // Optional
FsTrim *bool `json:"trim,omitempty"` // Optional
}
func (newSetting QemuGuestAgent) mapToAPI(currentSettings *QemuGuestAgent) string {
var params string
tmpEnable := "0"
if newSetting.Enable != nil {
if *newSetting.Enable {
tmpEnable = "1"
}
} else if currentSettings != nil && currentSettings.Enable != nil {
if *currentSettings.Enable {
tmpEnable = "1"
}
}
if newSetting.Freeze != nil {
params += ",freeze-fs-on-backup=" + boolToIntString(*newSetting.Freeze)
} else if currentSettings != nil && currentSettings.Freeze != nil {
params += ",freeze-fs-on-backup=" + boolToIntString(*currentSettings.Freeze)
}
if newSetting.FsTrim != nil {
params += ",fstrim_cloned_disks=" + boolToIntString(*newSetting.FsTrim)
} else if currentSettings != nil && currentSettings.FsTrim != nil {
params += ",fstrim_cloned_disks=" + boolToIntString(*currentSettings.FsTrim)
}
if newSetting.Type != nil {
if *newSetting.Type != QemuGuestAgentType_None {
params += ",type=" + strings.ToLower(string(*newSetting.Type))
}
} else if currentSettings != nil && currentSettings.Type != nil {
params += ",type=" + strings.ToLower(string(*currentSettings.Type))
}
return tmpEnable + params
}
func (QemuGuestAgent) mapToSDK(params string) *QemuGuestAgent {
config := QemuGuestAgent{}
tmpEnable, _ := strconv.ParseBool(params[0:1])
config.Enable = &tmpEnable
tmpParams := splitStringOfSettings(params)
if v, isSet := tmpParams["freeze-fs-on-backup"]; isSet {
tmpBool, _ := strconv.ParseBool(v.(string))
config.Freeze = &tmpBool
}
if v, isSet := tmpParams["fstrim_cloned_disks"]; isSet {
tmpBool, _ := strconv.ParseBool(v.(string))
config.FsTrim = &tmpBool
}
if v, isSet := tmpParams["type"]; isSet {
config.Type = util.Pointer(QemuGuestAgentType(v.(string)))
}
return &config
}
func (setting QemuGuestAgent) Validate() error {
if setting.Type != nil {
return setting.Type.Validate()
}
return nil
}
type QemuGuestAgentType string // enum
const (
QemuGuestAgentType_Isa QemuGuestAgentType = "isa"
QemuGuestAgentType_VirtIO QemuGuestAgentType = "virtio"
QemuGuestAgentType_None QemuGuestAgentType = "" // Used to unset the value. Proxmox enforces the default.
QemuGuestAgentType_Error_Invalid string = `invalid qemu guest agent type, should one of [` + string(QemuGuestAgentType_Isa) + `, ` + string(QemuGuestAgentType_VirtIO) + `, ""]`
)
func (q QemuGuestAgentType) Validate() error {
if q == QemuGuestAgentType_None {
return nil
}
switch QemuGuestAgentType(strings.ToLower(string(q))) {
case QemuGuestAgentType_Isa, QemuGuestAgentType_VirtIO:
return nil
}
return errors.New(QemuGuestAgentType_Error_Invalid)
}