@@ -23,52 +23,7 @@ func parseInstanceLimits(cfg *config.Config) (instances.ResourceLimits, error) {
2323
2424 namePatterns := make ([]instances.NamedResourceLimit , 0 , len (cfg .Limits .NamePatterns ))
2525 for i , patternCfg := range cfg .Limits .NamePatterns {
26- var maxVcpus * int
27- if patternCfg .MaxVcpusPerInstance != nil {
28- value := * patternCfg .MaxVcpusPerInstance
29- maxVcpus = & value
30- }
31- var maxTotalVcpus * int
32- if patternCfg .MaxTotalVcpus != nil {
33- value := * patternCfg .MaxTotalVcpus
34- maxTotalVcpus = & value
35- }
36-
37- maxMemory , err := parseOptionalByteSizePtr (fmt .Sprintf ("limits.name_patterns[%d].max_memory_per_instance" , i ), patternCfg .MaxMemoryPerInstance )
38- if err != nil {
39- return instances.ResourceLimits {}, err
40- }
41- maxOverlay , err := parseOptionalByteSizePtr (fmt .Sprintf ("limits.name_patterns[%d].max_overlay_size" , i ), patternCfg .MaxOverlaySize )
42- if err != nil {
43- return instances.ResourceLimits {}, err
44- }
45- maxTotalMemory , err := parseOptionalByteSizePtr (fmt .Sprintf ("limits.name_patterns[%d].max_total_memory" , i ), patternCfg .MaxTotalMemory )
46- if err != nil {
47- return instances.ResourceLimits {}, err
48- }
49- maxTotalDisk , err := parseOptionalByteSizePtr (fmt .Sprintf ("limits.name_patterns[%d].max_total_disk" , i ), patternCfg .MaxTotalDisk )
50- if err != nil {
51- return instances.ResourceLimits {}, err
52- }
53- maxTotalNetwork , err := parseOptionalBandwidthPtr (fmt .Sprintf ("limits.name_patterns[%d].max_total_network_bandwidth" , i ), patternCfg .MaxTotalNetworkBandwidth )
54- if err != nil {
55- return instances.ResourceLimits {}, err
56- }
57- maxTotalDiskIO , err := parseOptionalBandwidthPtr (fmt .Sprintf ("limits.name_patterns[%d].max_total_disk_io" , i ), patternCfg .MaxTotalDiskIO )
58- if err != nil {
59- return instances.ResourceLimits {}, err
60- }
61-
62- pattern , err := instances .NewNamedResourceLimit (patternCfg .Pattern , instances.NamedResourceLimitConfig {
63- MaxVcpusPerInstance : maxVcpus ,
64- MaxMemoryPerInstance : maxMemory ,
65- MaxOverlaySize : maxOverlay ,
66- MaxTotalVcpus : maxTotalVcpus ,
67- MaxTotalMemory : maxTotalMemory ,
68- MaxTotalDisk : maxTotalDisk ,
69- MaxTotalNetworkBandwidth : maxTotalNetwork ,
70- MaxTotalDiskIO : maxTotalDiskIO ,
71- })
26+ pattern , err := parseNamedResourceLimit (i , patternCfg )
7227 if err != nil {
7328 return instances.ResourceLimits {}, fmt .Errorf ("parse limits.name_patterns[%d]: %w" , i , err )
7429 }
@@ -83,6 +38,57 @@ func parseInstanceLimits(cfg *config.Config) (instances.ResourceLimits, error) {
8338 }, nil
8439}
8540
41+ func parseNamedResourceLimit (i int , cfg config.NamePatternLimitsConfig ) (instances.NamedResourceLimit , error ) {
42+ parsed := instances.NamedResourceLimitConfig {
43+ MaxVcpusPerInstance : parseOptionalIntPtr (cfg .MaxVcpusPerInstance ),
44+ MaxTotalVcpus : parseOptionalIntPtr (cfg .MaxTotalVcpus ),
45+ }
46+
47+ byteFields := []struct {
48+ field string
49+ src * string
50+ dst * * int64
51+ }{
52+ {field : "max_memory_per_instance" , src : cfg .MaxMemoryPerInstance , dst : & parsed .MaxMemoryPerInstance },
53+ {field : "max_overlay_size" , src : cfg .MaxOverlaySize , dst : & parsed .MaxOverlaySize },
54+ {field : "max_total_memory" , src : cfg .MaxTotalMemory , dst : & parsed .MaxTotalMemory },
55+ {field : "max_total_disk" , src : cfg .MaxTotalDisk , dst : & parsed .MaxTotalDisk },
56+ }
57+ for _ , field := range byteFields {
58+ value , err := parseOptionalByteSizePtr (fmt .Sprintf ("limits.name_patterns[%d].%s" , i , field .field ), field .src )
59+ if err != nil {
60+ return instances.NamedResourceLimit {}, err
61+ }
62+ * field .dst = value
63+ }
64+
65+ bandwidthFields := []struct {
66+ field string
67+ src * string
68+ dst * * int64
69+ }{
70+ {field : "max_total_network_bandwidth" , src : cfg .MaxTotalNetworkBandwidth , dst : & parsed .MaxTotalNetworkBandwidth },
71+ {field : "max_total_disk_io" , src : cfg .MaxTotalDiskIO , dst : & parsed .MaxTotalDiskIO },
72+ }
73+ for _ , field := range bandwidthFields {
74+ value , err := parseOptionalBandwidthPtr (fmt .Sprintf ("limits.name_patterns[%d].%s" , i , field .field ), field .src )
75+ if err != nil {
76+ return instances.NamedResourceLimit {}, err
77+ }
78+ * field .dst = value
79+ }
80+
81+ return instances .NewNamedResourceLimit (cfg .Pattern , parsed )
82+ }
83+
84+ func parseOptionalIntPtr (value * int ) * int {
85+ if value == nil {
86+ return nil
87+ }
88+ parsed := * value
89+ return & parsed
90+ }
91+
8692func parseOptionalByteSizePtr (field string , value * string ) (* int64 , error ) {
8793 if value == nil {
8894 return nil , nil
0 commit comments