|
@@ -9,29 +9,6 @@ import (
|
|
"strings"
|
|
"strings"
|
|
)
|
|
)
|
|
|
|
|
|
-// PartParser parses and validates the specified string (data) using the specified template
|
|
|
|
-// e.g. ip:public:private -> 192.168.0.1:80:8000
|
|
|
|
-func PartParser(template, data string) (map[string]string, error) {
|
|
|
|
- // ip:public:private
|
|
|
|
- var (
|
|
|
|
- templateParts = strings.Split(template, ":")
|
|
|
|
- parts = strings.Split(data, ":")
|
|
|
|
- out = make(map[string]string, len(templateParts))
|
|
|
|
- )
|
|
|
|
- if len(parts) != len(templateParts) {
|
|
|
|
- return nil, fmt.Errorf("Invalid format to parse. %s should match template %s", data, template)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- for i, t := range templateParts {
|
|
|
|
- value := ""
|
|
|
|
- if len(parts) > i {
|
|
|
|
- value = parts[i]
|
|
|
|
- }
|
|
|
|
- out[t] = value
|
|
|
|
- }
|
|
|
|
- return out, nil
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
// ParseKeyValueOpt parses and validates the specified string as a key/value pair (key=value)
|
|
// ParseKeyValueOpt parses and validates the specified string as a key/value pair (key=value)
|
|
func ParseKeyValueOpt(opt string) (string, string, error) {
|
|
func ParseKeyValueOpt(opt string) (string, string, error) {
|
|
parts := strings.SplitN(opt, "=", 2)
|
|
parts := strings.SplitN(opt, "=", 2)
|
|
@@ -41,32 +18,6 @@ func ParseKeyValueOpt(opt string) (string, string, error) {
|
|
return strings.TrimSpace(parts[0]), strings.TrimSpace(parts[1]), nil
|
|
return strings.TrimSpace(parts[0]), strings.TrimSpace(parts[1]), nil
|
|
}
|
|
}
|
|
|
|
|
|
-// ParsePortRange parses and validates the specified string as a port-range (8000-9000)
|
|
|
|
-func ParsePortRange(ports string) (uint64, uint64, error) {
|
|
|
|
- if ports == "" {
|
|
|
|
- return 0, 0, fmt.Errorf("Empty string specified for ports.")
|
|
|
|
- }
|
|
|
|
- if !strings.Contains(ports, "-") {
|
|
|
|
- start, err := strconv.ParseUint(ports, 10, 16)
|
|
|
|
- end := start
|
|
|
|
- return start, end, err
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- parts := strings.Split(ports, "-")
|
|
|
|
- start, err := strconv.ParseUint(parts[0], 10, 16)
|
|
|
|
- if err != nil {
|
|
|
|
- return 0, 0, err
|
|
|
|
- }
|
|
|
|
- end, err := strconv.ParseUint(parts[1], 10, 16)
|
|
|
|
- if err != nil {
|
|
|
|
- return 0, 0, err
|
|
|
|
- }
|
|
|
|
- if end < start {
|
|
|
|
- return 0, 0, fmt.Errorf("Invalid range specified for the Port: %s", ports)
|
|
|
|
- }
|
|
|
|
- return start, end, nil
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
// ParseUintList parses and validates the specified string as the value
|
|
// ParseUintList parses and validates the specified string as the value
|
|
// found in some cgroup file (e.g. `cpuset.cpus`, `cpuset.mems`), which could be
|
|
// found in some cgroup file (e.g. `cpuset.cpus`, `cpuset.mems`), which could be
|
|
// one of the formats below. Note that duplicates are actually allowed in the
|
|
// one of the formats below. Note that duplicates are actually allowed in the
|