-
Notifications
You must be signed in to change notification settings - Fork 0
/
vm.go
121 lines (99 loc) · 2.99 KB
/
vm.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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
package service
import (
"context"
"strconv"
"strings"
"github.com/awlsring/proxmox-go/proxmox"
"github.com/awlsring/terraform-provider-proxmox/internal/service/errors"
"github.com/awlsring/terraform-provider-proxmox/internal/service/vm"
)
func (c *Proxmox) GetVirtualMachineConfiguration(ctx context.Context, node string, vmId int) (*proxmox.VirtualMachineConfigurationSummary, error) {
vmIdStr := strconv.Itoa(vmId)
request := c.client.GetVirtualMachineConfiguration(ctx, node, vmIdStr)
resp, _, err := c.client.GetVirtualMachineConfigurationExecute(request)
if err != nil {
return nil, err
}
return &resp.Data, nil
}
func (c *Proxmox) DeleteVirtualMachine(ctx context.Context, node string, vmid int) error {
vmId := strconv.Itoa(vmid)
request := c.client.DeleteVirtualMachine(ctx, node, vmId)
_, h, err := c.client.DeleteVirtualMachineExecute(request)
if err != nil {
return errors.ApiError(h, err)
}
return nil
}
func (c *Proxmox) DescribeVirtualMachinesOld(ctx context.Context, node string) ([]vm.VirtualMachine, error) {
vms, err := c.ListVirtualMachines(ctx, node)
if err != nil {
panic(err)
}
virtualMachines := []vm.VirtualMachine{}
for _, vmSummary := range vms {
virtualMachine, err := c.vmFromSummary(ctx, node, vmSummary)
if err != nil {
return nil, err
}
virtualMachines = append(virtualMachines, *virtualMachine)
}
return virtualMachines, nil
}
func (c *Proxmox) vmFromSummary(ctx context.Context, node string, summary proxmox.VirtualMachineSummary) (*vm.VirtualMachine, error) {
vmId := int(summary.Vmid)
vmConfig, err := c.GetVirtualMachineConfiguration(ctx, node, vmId)
if err != nil {
return nil, err
}
virtualDisks, err := vm.ExtractDisksFromConfig(vmConfig)
if err != nil {
return nil, err
}
virtualNics, err := vm.ExtractNicsFromConfig(vmConfig)
if err != nil {
return nil, err
}
virtualMachine := vm.VirtualMachine{
Id: vmId,
Node: node,
VirtualDisks: virtualDisks,
VirtualNetworkDevices: virtualNics,
}
if summary.HasTags() {
virtualMachine.Tags = StringSemiColonPtrListToSlice(summary.Tags)
}
if summary.HasName() {
virtualMachine.Name = *summary.Name
}
if vmConfig.HasMemory() {
virtualMachine.Memory = int64(*vmConfig.Memory)
}
if vmConfig.HasCores() {
virtualMachine.Cores = int(*vmConfig.Cores)
}
if vmConfig.HasAgent() {
agentStr := *vmConfig.Agent
if strings.Contains(agentStr, "1") {
virtualMachine.Agent = true
}
}
return &virtualMachine, nil
}
func (c *Proxmox) ListVirtualMachines(ctx context.Context, node string) ([]proxmox.VirtualMachineSummary, error) {
request := c.client.ListVirtualMachines(ctx, node)
resp, _, err := c.client.ListVirtualMachinesExecute(request)
if err != nil {
return nil, err
}
vmSummaries := []proxmox.VirtualMachineSummary{}
for _, vmSummary := range resp.Data {
if vmSummary.HasTemplate() {
if *vmSummary.Template == 1 {
continue
}
}
vmSummaries = append(vmSummaries, vmSummary)
}
return vmSummaries, nil
}