/
firewall.go
106 lines (75 loc) · 2.47 KB
/
firewall.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
package vm
import (
"encoding/json"
error2 "github.com/dragse/proxmox-api-go/error"
"github.com/dragse/proxmox-api-go/proxmox/builder"
"github.com/dragse/proxmox-api-go/proxmox/node/vm/ipset"
"github.com/dragse/proxmox-api-go/responses/node/vm"
"github.com/dragse/proxmox-api-go/static/endpoints"
"net/url"
"regexp"
"strconv"
)
func (proxmoxVm ProxmoxVM) GetFirewallLog() ([]*vm.FirewallLog, error) {
var data []*vm.FirewallLog
resp, err := proxmoxVm.client.Get(endpoints.Nodes_Node_Qemu_VMID_FirewallLog.FormatValues(proxmoxVm.NodeName, strconv.Itoa(proxmoxVm.VmID)))
if err != nil {
return nil, err
}
err = json.Unmarshal(*resp.Data, &data)
if err != nil {
return nil, err
}
return data, nil
}
func (proxmoxVm ProxmoxVM) GetFirewallOptions() (*vm.FirewallOption, error) {
var data vm.FirewallOption
resp, err := proxmoxVm.client.Get(endpoints.Nodes_Node_Qemu_VMID_FirewallOptions.FormatValues(proxmoxVm.NodeName, strconv.Itoa(proxmoxVm.VmID)))
if err != nil {
return nil, err
}
err = json.Unmarshal(*resp.Data, &data)
if err != nil {
return nil, err
}
return &data, nil
}
func (proxmoxVm ProxmoxVM) UpdateFirewallOptions(firewallBuilder *builder.FirewallBuilder) error {
_, err := proxmoxVm.client.PostForm(endpoints.Nodes_Node_Qemu_VMID_FirewallOptions.FormatValues(proxmoxVm.NodeName, strconv.Itoa(proxmoxVm.VmID)), firewallBuilder.BuildToValues())
if err != nil {
return err
}
return nil
}
func (proxmoxVm ProxmoxVM) GetIPSet(name string) *ipset.ProxmoxIPSet {
return ipset.NewProxmoxIPSet(proxmoxVm.client, proxmoxVm.NodeName, proxmoxVm.VmID, name)
}
func (proxmoxVm ProxmoxVM) ListIPSets() ([]*vm.IPSet, error) {
var data []*vm.IPSet
resp, err := proxmoxVm.client.Get(endpoints.Nodes_Node_Qemu_VMID_FirewallIpset.FormatValues(proxmoxVm.NodeName, strconv.Itoa(proxmoxVm.VmID)))
if err != nil {
return nil, err
}
err = json.Unmarshal(*resp.Data, &data)
if err != nil {
return nil, err
}
return data, nil
}
func (proxmoxVm ProxmoxVM) CreateIPSet(name string, comment string) error {
matched, err := regexp.MatchString("[A-Za-z][A-Za-z0-9\\-\\_]+", name)
if err != nil {
return err
}
if !matched {
return error2.InvalidParameterError{Parameter: "name"}
}
params := url.Values{}
params.Add("name", name)
params.Add("comment", comment)
_, err = proxmoxVm.client.PostForm(endpoints.Nodes_Node_Qemu_VMID_FirewallIpset.FormatValues(proxmoxVm.NodeName, strconv.Itoa(proxmoxVm.VmID)), params)
if err != nil {
return err
}
return nil
}