diff options
author | Martin Polden <mpolden@mpolden.no> | 2022-02-03 11:20:17 +0100 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2022-02-03 11:23:03 +0100 |
commit | 1b749c4117c9b2b470e49469f781cfe1ca976f81 (patch) | |
tree | ed24485e8ca84cf889775452697a42a6d1123833 /client | |
parent | 756ab78df5287519fa220982685d6335f19a54e1 (diff) |
Handle node resource ranges
Diffstat (limited to 'client')
-rw-r--r-- | client/go/vespa/xml/config.go | 21 | ||||
-rw-r--r-- | client/go/vespa/xml/config_test.go | 1 |
2 files changed, 21 insertions, 1 deletions
diff --git a/client/go/vespa/xml/config.go b/client/go/vespa/xml/config.go index 3243764fd3e..f1c598bec05 100644 --- a/client/go/vespa/xml/config.go +++ b/client/go/vespa/xml/config.go @@ -148,7 +148,26 @@ func Regions(names ...string) []Region { // ParseResources parses nodes resources from string s. func ParseResources(s string) (Resources, error) { - parts := strings.Split(s, ",") + var parts []string + inRange := false + var sb strings.Builder + for _, c := range s { + if inRange { + if c == ']' { + inRange = false + } + } else { + if c == '[' { + inRange = true + } else if c == ',' { + parts = append(parts, sb.String()) + sb.Reset() + continue + } + } + sb.WriteRune(c) + } + parts = append(parts, sb.String()) if len(parts) != 3 { return Resources{}, fmt.Errorf("invalid resources: %q", s) } diff --git a/client/go/vespa/xml/config_test.go b/client/go/vespa/xml/config_test.go index 299bfd372f7..0c94285a6e1 100644 --- a/client/go/vespa/xml/config_test.go +++ b/client/go/vespa/xml/config_test.go @@ -248,6 +248,7 @@ func TestParseResources(t *testing.T) { assertResources(t, "memory=4Gb,vcpu=2,disk=100Gb", Resources{}, true) assertResources(t, "vcpu=2,memory=4Gb,disk=100Gb", Resources{Vcpu: "2", Memory: "4Gb", Disk: "100Gb"}, false) assertResources(t, " vcpu = 4, memory =8Gb, disk=500Gb ", Resources{Vcpu: "4", Memory: "8Gb", Disk: "500Gb"}, false) + assertResources(t, "vcpu=[2.5, 8],memory=[32Gb,150Gb],disk=[100Gb, 1Tb]", Resources{Vcpu: "[2.5, 8]", Memory: "[32Gb,150Gb]", Disk: "[100Gb, 1Tb]"}, false) } func TestParseNodeCount(t *testing.T) { |