kubernetesk8s.io/kubernetes/pkg/apis/autoscaling/fuzzer Index | Files

package fuzzer

import "k8s.io/kubernetes/pkg/apis/autoscaling/fuzzer"

Index

Variables

var Funcs = func(codecs runtimeserializer.CodecFactory) []interface{} {
	return []interface{}{
		func(s *autoscaling.ScaleStatus, c randfill.Continue) {
			c.FillNoCustom(s)

			metaSelector := &metav1.LabelSelector{}
			c.Fill(metaSelector)
			labelSelector, _ := metav1.LabelSelectorAsSelector(metaSelector)
			s.Selector = labelSelector.String()
		},
		func(s *autoscaling.HorizontalPodAutoscalerSpec, c randfill.Continue) {
			c.FillNoCustom(s)
			s.MinReplicas = pointer.Int32(c.Rand.Int31())

			randomQuantity := func() resource.Quantity {
				var q resource.Quantity
				c.Fill(&q)

				_ = q.String()
				return q
			}

			var podMetricID autoscaling.MetricIdentifier
			var objMetricID autoscaling.MetricIdentifier
			c.Fill(&podMetricID)
			c.Fill(&objMetricID)

			targetUtilization := int32(c.Uint64())
			averageValue := randomQuantity()
			s.Metrics = []autoscaling.MetricSpec{
				{
					Type: autoscaling.PodsMetricSourceType,
					Pods: &autoscaling.PodsMetricSource{
						Metric: podMetricID,
						Target: autoscaling.MetricTarget{
							Type:         autoscaling.AverageValueMetricType,
							AverageValue: &averageValue,
						},
					},
				},
				{
					Type: autoscaling.ObjectMetricSourceType,
					Object: &autoscaling.ObjectMetricSource{
						Metric: objMetricID,
						Target: autoscaling.MetricTarget{
							Type:  autoscaling.ValueMetricType,
							Value: &averageValue,
						},
					},
				},
				{
					Type: autoscaling.ResourceMetricSourceType,
					Resource: &autoscaling.ResourceMetricSource{
						Name: api.ResourceCPU,
						Target: autoscaling.MetricTarget{
							Type:               autoscaling.UtilizationMetricType,
							AverageUtilization: &targetUtilization,
						},
					},
				},
			}
			stabilizationWindow := int32(c.Uint64())
			maxPolicy := autoscaling.MaxPolicySelect
			minPolicy := autoscaling.MinPolicySelect
			s.Behavior = &autoscaling.HorizontalPodAutoscalerBehavior{
				ScaleUp: &autoscaling.HPAScalingRules{
					StabilizationWindowSeconds: &stabilizationWindow,
					SelectPolicy:               &maxPolicy,
					Policies: []autoscaling.HPAScalingPolicy{
						{
							Type:          autoscaling.PodsScalingPolicy,
							Value:         int32(c.Uint64()),
							PeriodSeconds: int32(c.Uint64()),
						},
						{
							Type:          autoscaling.PercentScalingPolicy,
							Value:         int32(c.Uint64()),
							PeriodSeconds: int32(c.Uint64()),
						},
					},
				},
				ScaleDown: &autoscaling.HPAScalingRules{
					StabilizationWindowSeconds: &stabilizationWindow,
					SelectPolicy:               &minPolicy,
					Policies: []autoscaling.HPAScalingPolicy{
						{
							Type:          autoscaling.PodsScalingPolicy,
							Value:         int32(c.Uint64()),
							PeriodSeconds: int32(c.Uint64()),
						},
						{
							Type:          autoscaling.PercentScalingPolicy,
							Value:         int32(c.Uint64()),
							PeriodSeconds: int32(c.Uint64()),
						},
					},
				},
			}
		},
		func(s *autoscaling.HorizontalPodAutoscalerStatus, c randfill.Continue) {
			c.FillNoCustom(s)
			randomQuantity := func() resource.Quantity {
				var q resource.Quantity
				c.Fill(&q)

				_ = q.String()
				return q
			}
			averageValue := randomQuantity()
			currentUtilization := int32(c.Uint64())
			s.CurrentMetrics = []autoscaling.MetricStatus{
				{
					Type: autoscaling.PodsMetricSourceType,
					Pods: &autoscaling.PodsMetricStatus{
						Metric: autoscaling.MetricIdentifier{
							Name: c.String(0),
						},
						Current: autoscaling.MetricValueStatus{
							AverageValue: &averageValue,
						},
					},
				},
				{
					Type: autoscaling.ResourceMetricSourceType,
					Resource: &autoscaling.ResourceMetricStatus{
						Name: api.ResourceCPU,
						Current: autoscaling.MetricValueStatus{
							AverageUtilization: &currentUtilization,
							AverageValue:       &averageValue,
						},
					},
				},
			}
		},
	}
}

Funcs returns the fuzzer functions for the autoscaling api group.

Source Files

fuzzer.go

Version
v1.33.0 (latest)
Published
Apr 23, 2025
Platform
linux/amd64
Imports
7 packages
Last checked
3 hours ago

Tools for package owners.