-
Notifications
You must be signed in to change notification settings - Fork 1
/
parsers.go
71 lines (59 loc) · 1.81 KB
/
parsers.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
package lib
import (
"strings"
)
// ParseAccountName parses a group name given in account[.extrabits] format.
// If there is a blank account name, tries to figure out the best possible account name to use.
// If authentication has already happened, this also involves asking bmbilling.
func ParseAccountName(name string, defaults ...string) (account string) {
// 1 piece with optional extra cruft for the fqdn
if len(defaults) != 0 {
account = defaults[0]
}
bits := strings.Split(name, ".")
if bits[0] != "" {
account = bits[0]
}
return account
}
// ParseGroupName parses a group name given in group[.account[.extrabits]] format.
func ParseGroupName(name string, defaults ...GroupName) (group GroupName) {
if len(defaults) == 0 {
group.Group = ""
group.Account = ""
} else {
group.Group = defaults[0].Group
group.Account = defaults[0].Account
}
bits := strings.SplitN(name, ".", 2)
if len(bits) >= 1 {
group.Group = bits[0]
}
if len(bits) >= 2 {
group.Account = ParseAccountName(bits[1], group.Account)
}
return group
}
// ParseVirtualMachineName parses a VM name given in vm[.group[.account[.extrabits]]] format
func ParseVirtualMachineName(name string, defaults ...VirtualMachineName) (vm VirtualMachineName, err error) {
if len(defaults) == 0 {
vm.Group = ""
vm.Account = ""
vm.VirtualMachine = ""
} else {
vm.Group = defaults[0].Group
vm.Account = defaults[0].Account
vm.VirtualMachine = defaults[0].VirtualMachine
}
bits := strings.SplitN(name, ".", 2)
vm.VirtualMachine = bits[0]
if len(bits) > 1 {
gp := ParseGroupName(bits[1], GroupName{Group: vm.Group, Account: vm.Account})
vm.Group = gp.Group
vm.Account = gp.Account
}
if vm.VirtualMachine == "" {
return vm, BadNameError{Type: "virtual machine", ProblemField: "name", ProblemValue: vm.VirtualMachine}
}
return vm, nil
}