diff --git a/go/models/function_config.go b/go/models/function_config.go index de7bf3b7..48631ce7 100644 --- a/go/models/function_config.go +++ b/go/models/function_config.go @@ -33,7 +33,7 @@ type FunctionConfig struct { // generator Generator string `json:"generator,omitempty"` - // The function's memory allocation in MB. + // The function's memory allocation in MB. Mutually exclusive with `vcpu`. // Memory int64 `json:"memory,omitempty"` @@ -48,6 +48,11 @@ type FunctionConfig struct { // traffic rules TrafficRules *TrafficRulesConfig `json:"traffic_rules,omitempty"` + + // Number of vCPUs to provision for the function. Allowed range is + // 0.5–2. + // + Vcpu float32 `json:"vcpu,omitempty"` } // Validate validates this function config diff --git a/go/porcelain/deploy.go b/go/porcelain/deploy.go index b79372d4..f421e501 100644 --- a/go/porcelain/deploy.go +++ b/go/porcelain/deploy.go @@ -840,7 +840,7 @@ func bundleFromManifest(ctx context.Context, manifestFile *os.File, observer Dep } } - hasConfig := function.DisplayName != "" || function.Generator != "" || len(routes) > 0 || len(excludedRoutes) > 0 || len(function.BuildData) > 0 || function.Priority != 0 || function.TrafficRules != nil || function.Timeout != 0 || len(function.EventSubscriptions) > 0 || function.Region != "" || function.Memory != 0 + hasConfig := function.DisplayName != "" || function.Generator != "" || len(routes) > 0 || len(excludedRoutes) > 0 || len(function.BuildData) > 0 || function.Priority != 0 || function.TrafficRules != nil || function.Timeout != 0 || len(function.EventSubscriptions) > 0 || function.Region != "" || function.Memory != 0 || function.Vcpu != 0 if hasConfig { cfg := models.FunctionConfig{ DisplayName: function.DisplayName, @@ -852,6 +852,7 @@ func bundleFromManifest(ctx context.Context, manifestFile *os.File, observer Dep BuildData: function.BuildData, Priority: int64(function.Priority), EventSubscriptions: function.EventSubscriptions, + Vcpu: function.Vcpu, } if function.TrafficRules != nil { diff --git a/go/porcelain/functions_manifest.go b/go/porcelain/functions_manifest.go index 93c50176..a13bb1d6 100644 --- a/go/porcelain/functions_manifest.go +++ b/go/porcelain/functions_manifest.go @@ -27,6 +27,7 @@ type functionsManifestEntry struct { ExcludedRoutes []excludedFunctionRoute `json:"excludedRoutes"` Priority int `json:"priority"` TrafficRules *functionTrafficRules `json:"trafficRules"` + Vcpu float32 `json:"vcpu"` } type functionRoute struct { diff --git a/swagger.yml b/swagger.yml index 79c49995..659a46cc 100644 --- a/swagger.yml +++ b/swagger.yml @@ -5558,7 +5558,7 @@ definitions: memory: type: integer description: | - The function's memory allocation in MB. + The function's memory allocation in MB. Mutually exclusive with `vcpu`. routes: type: array items: @@ -5573,6 +5573,12 @@ definitions: type: string traffic_rules: $ref: '#/definitions/trafficRulesConfig' + vcpu: + type: number + format: float + description: | + Number of vCPUs to provision for the function. Allowed range is + 0.5–2. event_subscriptions: type: array items: