generated from kyma-project/template-repository
-
Notifications
You must be signed in to change notification settings - Fork 18
/
controller_configuration.go
88 lines (74 loc) · 2.75 KB
/
controller_configuration.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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package state
import (
"context"
"github.com/kyma-project/serverless/components/operator/api/v1alpha1"
corev1 "k8s.io/api/core/v1"
controllerruntime "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/client"
)
const (
slowBuildPreset = "slow"
slowRuntimePreset = "XS"
normalBuildPreset = "normal"
largeRuntimePreset = "L"
)
func sFnControllerConfiguration(ctx context.Context, r *reconciler, s *systemState) (stateFn, *controllerruntime.Result, error) {
err := updateControllerConfigurationStatus(ctx, r, &s.instance)
if err != nil {
return stopWithEventualError(err)
}
configureControllerConfigurationFlags(s)
s.setState(v1alpha1.StateProcessing)
s.instance.UpdateConditionTrue(
v1alpha1.ConditionTypeConfigured,
v1alpha1.ConditionReasonConfigured,
"Configuration ready",
)
return nextState(sFnApplyResources)
}
func updateControllerConfigurationStatus(ctx context.Context, r *reconciler, instance *v1alpha1.Serverless) error {
nodesLen, err := getNodesLen(ctx, r.client)
if err != nil {
return err
}
defaultBuildPreset := slowBuildPreset
defaultRuntimePreset := slowRuntimePreset
if nodesLen > 2 {
defaultBuildPreset = normalBuildPreset
defaultRuntimePreset = largeRuntimePreset
}
spec := instance.Spec
fields := fieldsToUpdate{
{spec.TargetCPUUtilizationPercentage, &instance.Status.CPUUtilizationPercentage, "CPU utilization", ""},
{spec.FunctionRequeueDuration, &instance.Status.RequeueDuration, "Function requeue duration", ""},
{spec.FunctionBuildExecutorArgs, &instance.Status.BuildExecutorArgs, "Function build executor args", ""},
{spec.FunctionBuildMaxSimultaneousJobs, &instance.Status.BuildMaxSimultaneousJobs, "Max number of simultaneous jobs", ""},
{spec.HealthzLivenessTimeout, &instance.Status.HealthzLivenessTimeout, "Duration of health check", ""},
{spec.DefaultBuildJobPreset, &instance.Status.DefaultBuildJobPreset, "Default build job preset", defaultBuildPreset},
{spec.DefaultRuntimePodPreset, &instance.Status.DefaultRuntimePodPreset, "Default runtime pod preset", defaultRuntimePreset},
}
updateStatusFields(r.k8s, instance, fields)
return nil
}
func configureControllerConfigurationFlags(s *systemState) {
s.flagsBuilder.
WithControllerConfiguration(
s.instance.Status.CPUUtilizationPercentage,
s.instance.Status.RequeueDuration,
s.instance.Status.BuildExecutorArgs,
s.instance.Status.BuildMaxSimultaneousJobs,
s.instance.Status.HealthzLivenessTimeout,
).
WithDefaultPresetFlags(
s.instance.Status.DefaultBuildJobPreset,
s.instance.Status.DefaultRuntimePodPreset,
)
}
func getNodesLen(ctx context.Context, c client.Client) (int, error) {
nodeList := corev1.NodeList{}
err := c.List(ctx, &nodeList)
if err != nil {
return 0, err
}
return len(nodeList.Items), nil
}