Skip to content

Commit

Permalink
Generate Quantity helper methods for dies
Browse files Browse the repository at this point in the history
Dies that have fields of resource.Quantity or corev1.ResourceList often
have setter methods to parse a string formatted quantity into the
structured value. Rather than the user defining these values, we can
generate them when we see a field of the type.

for resource.Quantity:
```
func (d *MyResourceDie) CapacityString(quantity string) *MyResourceDie {
	q := resource.MustParse(quantity)
	return d.Capacity(q)
}
```

for corev1.ResourceList:
```
func (d *MyResourceDie) AddLimit(name corev1.ResourceName, quantity resource.Quantity) *MyResourceDie {
	return d.DieStamp(func(r *corev1.ResourceQuotaSpec) {
		if r.Limits == nil {
			r.Limits = corev1.ResourceList{}
		}
		r.Limits[name] = quantity
	})
}

func (d *MyResourceDie) AddLimitString(name corev1.ResourceName, quantity string) *MyResourceDie {
    q := resource.MustParse(quantity)
	return d.AddLimit(name, q)
}
```

Signed-off-by: Scott Andrews <scott@andrews.me>
  • Loading branch information
scothis committed Jun 18, 2024
1 parent 9bf2706 commit d3b6f77
Show file tree
Hide file tree
Showing 17 changed files with 368 additions and 315 deletions.
21 changes: 0 additions & 21 deletions apis/autoscaling/v2/horizontalpodautoscaler.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ package v2
import (
autoscalingv2 "k8s.io/api/autoscaling/v2"
corev1 "k8s.io/api/core/v1"
resource "k8s.io/apimachinery/pkg/api/resource"
diemetav1 "reconciler.io/dies/apis/meta/v1"
)

Expand Down Expand Up @@ -130,16 +129,6 @@ func (d *ObjectMetricSourceDie) MetricDie(fn func(d *MetricIdentifierDie)) *Obje
// +die
type _ = autoscalingv2.MetricTarget

func (d *MetricTargetDie) ValueString(quantity string) *MetricTargetDie {
q := resource.MustParse(quantity)
return d.Value(&q)
}

func (d *MetricTargetDie) AverageValueString(quantity string) *MetricTargetDie {
q := resource.MustParse(quantity)
return d.AverageValue(&q)
}

// +die
type _ = autoscalingv2.MetricIdentifier

Expand Down Expand Up @@ -346,16 +335,6 @@ func (d *ObjectMetricStatusDie) DescribedObjectDie(fn func(d *CrossVersionObject
// +die
type _ = autoscalingv2.MetricValueStatus

func (d *MetricValueStatusDie) ValueString(quantity string) *MetricValueStatusDie {
q := resource.MustParse(quantity)
return d.Value(&q)
}

func (d *MetricValueStatusDie) AverageValueString(quantity string) *MetricValueStatusDie {
q := resource.MustParse(quantity)
return d.AverageValue(&q)
}

// +die
type _ = autoscalingv2.PodsMetricStatus

Expand Down
22 changes: 21 additions & 1 deletion apis/autoscaling/v2/zz_generated.die.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

40 changes: 0 additions & 40 deletions apis/core/v1/container.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ package v1

import (
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
)

// +die
Expand Down Expand Up @@ -279,32 +278,6 @@ func (d *SecretKeySelectorDie) Name(v string) *SecretKeySelectorDie {
// +die
type _ = corev1.ResourceRequirements

func (d *ResourceRequirementsDie) AddLimit(name corev1.ResourceName, quantity resource.Quantity) *ResourceRequirementsDie {
return d.DieStamp(func(r *corev1.ResourceRequirements) {
if r.Limits == nil {
r.Limits = corev1.ResourceList{}
}
r.Limits[name] = quantity
})
}

func (d *ResourceRequirementsDie) AddLimitString(name corev1.ResourceName, quantity string) *ResourceRequirementsDie {
return d.AddLimit(name, resource.MustParse(quantity))
}

func (d *ResourceRequirementsDie) AddRequest(name corev1.ResourceName, quantity resource.Quantity) *ResourceRequirementsDie {
return d.DieStamp(func(r *corev1.ResourceRequirements) {
if r.Requests == nil {
r.Requests = corev1.ResourceList{}
}
r.Requests[name] = quantity
})
}

func (d *ResourceRequirementsDie) AddRequestString(name corev1.ResourceName, quantity string) *ResourceRequirementsDie {
return d.AddRequest(name, resource.MustParse(quantity))
}

func (d *ResourceRequirementsDie) ClaimsDie(claims ...*ResourceClaimDie) *ResourceRequirementsDie {
return d.DieStamp(func(r *corev1.ResourceRequirements) {
r.Claims = make([]corev1.ResourceClaim, len(claims))
Expand Down Expand Up @@ -560,19 +533,6 @@ func (d *ContainerStatusDie) LastTerminationStateDie(fn func(d *ContainerStateDi
})
}

func (d *ContainerStatusDie) AddAllocatedResource(name corev1.ResourceName, quantity resource.Quantity) *ContainerStatusDie {
return d.DieStamp(func(r *corev1.ContainerStatus) {
if r.AllocatedResources == nil {
r.AllocatedResources = corev1.ResourceList{}
}
r.AllocatedResources[name] = quantity
})
}

func (d *ContainerStatusDie) AddAllocatedResourceString(name corev1.ResourceName, quantity string) *ContainerStatusDie {
return d.AddAllocatedResource(name, resource.MustParse(quantity))
}

func (d *ContainerStatusDie) ResourcesDie(fn func(d *ResourceRequirementsDie)) *ContainerStatusDie {
return d.DieStamp(func(r *corev1.ContainerStatus) {
d := ResourceRequirementsBlank.DieImmutable(false).DieFeedPtr(r.Resources)
Expand Down
66 changes: 0 additions & 66 deletions apis/core/v1/limitrange.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ package v1

import (
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
)

// +die:object=true,apiVersion=v1,kind=LimitRange
Expand All @@ -38,68 +37,3 @@ func (d *LimitRangeSpecDie) LimitsDie(limits ...*LimitRangeItemDie) *LimitRangeS

// +die
type _ = corev1.LimitRangeItem

func (d *LimitRangeItemDie) AddMax(name corev1.ResourceName, quantity resource.Quantity) *LimitRangeItemDie {
return d.DieStamp(func(r *corev1.LimitRangeItem) {
if r.Max == nil {
r.Max = corev1.ResourceList{}
}
r.Max[name] = quantity
})
}

func (d *LimitRangeItemDie) AddMaxString(name corev1.ResourceName, quantity string) *LimitRangeItemDie {
return d.AddMax(name, resource.MustParse(quantity))
}

func (d *LimitRangeItemDie) AddMin(name corev1.ResourceName, quantity resource.Quantity) *LimitRangeItemDie {
return d.DieStamp(func(r *corev1.LimitRangeItem) {
if r.Min == nil {
r.Min = corev1.ResourceList{}
}
r.Min[name] = quantity
})
}

func (d *LimitRangeItemDie) AddMinString(name corev1.ResourceName, quantity string) *LimitRangeItemDie {
return d.AddMin(name, resource.MustParse(quantity))
}

func (d *LimitRangeItemDie) AddDefault(name corev1.ResourceName, quantity resource.Quantity) *LimitRangeItemDie {
return d.DieStamp(func(r *corev1.LimitRangeItem) {
if r.Default == nil {
r.Default = corev1.ResourceList{}
}
r.Default[name] = quantity
})
}

func (d *LimitRangeItemDie) AddDefaultString(name corev1.ResourceName, quantity string) *LimitRangeItemDie {
return d.AddDefault(name, resource.MustParse(quantity))
}

func (d *LimitRangeItemDie) AddDefaultRequest(name corev1.ResourceName, quantity resource.Quantity) *LimitRangeItemDie {
return d.DieStamp(func(r *corev1.LimitRangeItem) {
if r.DefaultRequest == nil {
r.DefaultRequest = corev1.ResourceList{}
}
r.DefaultRequest[name] = quantity
})
}

func (d *LimitRangeItemDie) AddDefaultRequestString(name corev1.ResourceName, quantity string) *LimitRangeItemDie {
return d.AddDefaultRequest(name, resource.MustParse(quantity))
}

func (d *LimitRangeItemDie) AddMaxLimitRequestRatio(name corev1.ResourceName, quantity resource.Quantity) *LimitRangeItemDie {
return d.DieStamp(func(r *corev1.LimitRangeItem) {
if r.MaxLimitRequestRatio == nil {
r.MaxLimitRequestRatio = corev1.ResourceList{}
}
r.MaxLimitRequestRatio[name] = quantity
})
}

func (d *LimitRangeItemDie) AddMaxLimitRequestRatioString(name corev1.ResourceName, quantity string) *LimitRangeItemDie {
return d.AddMaxLimitRequestRatio(name, resource.MustParse(quantity))
}
27 changes: 0 additions & 27 deletions apis/core/v1/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ package v1

import (
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
diemetav1 "reconciler.io/dies/apis/meta/v1"
)

Expand Down Expand Up @@ -73,32 +72,6 @@ type _ = corev1.ConfigMapNodeConfigSource
// +die
type _ = corev1.NodeStatus

func (d *NodeStatusDie) AddCapacity(name corev1.ResourceName, quantity resource.Quantity) *NodeStatusDie {
return d.DieStamp(func(r *corev1.NodeStatus) {
if r.Capacity == nil {
r.Capacity = corev1.ResourceList{}
}
r.Capacity[name] = quantity
})
}

func (d *NodeStatusDie) AddCapacityString(name corev1.ResourceName, quantity string) *NodeStatusDie {
return d.AddCapacity(name, resource.MustParse(quantity))
}

func (d *NodeStatusDie) AddAllocatable(name corev1.ResourceName, quantity resource.Quantity) *NodeStatusDie {
return d.DieStamp(func(r *corev1.NodeStatus) {
if r.Allocatable == nil {
r.Allocatable = corev1.ResourceList{}
}
r.Allocatable[name] = quantity
})
}

func (d *NodeStatusDie) AddAllocatableString(name corev1.ResourceName, quantity string) *NodeStatusDie {
return d.AddAllocatable(name, resource.MustParse(quantity))
}

func (d *NodeStatusDie) ConditionsDie(conditions ...*diemetav1.ConditionDie) *NodeStatusDie {
return d.DieStamp(func(r *corev1.NodeStatus) {
r.Conditions = make([]corev1.NodeCondition, len(conditions))
Expand Down
14 changes: 0 additions & 14 deletions apis/core/v1/persistantvolume.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ package v1

import (
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
)

// +die:object=true,apiVersion=v1,kind=PersistentVolume
Expand All @@ -27,19 +26,6 @@ type _ = corev1.PersistentVolume
// +die
type _ = corev1.PersistentVolumeSpec

func (d *PersistentVolumeSpecDie) AddCapacity(name corev1.ResourceName, quantity resource.Quantity) *PersistentVolumeSpecDie {
return d.DieStamp(func(r *corev1.PersistentVolumeSpec) {
if r.Capacity == nil {
r.Capacity = corev1.ResourceList{}
}
r.Capacity[name] = quantity
})
}

func (d *PersistentVolumeSpecDie) AddCapacityString(name corev1.ResourceName, quantity string) *PersistentVolumeSpecDie {
return d.AddCapacity(name, resource.MustParse(quantity))
}

func (d *PersistentVolumeSpecDie) GCEPersistentDiskDie(fn func(d *GCEPersistentDiskVolumeSourceDie)) *PersistentVolumeSpecDie {
return d.DieStamp(func(r *corev1.PersistentVolumeSpec) {
d := GCEPersistentDiskVolumeSourceBlank.DieImmutable(false).DieFeedPtr(r.GCEPersistentDisk)
Expand Down
53 changes: 0 additions & 53 deletions apis/core/v1/persistantvolumeclaim.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ package v1

import (
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
diemetav1 "reconciler.io/dies/apis/meta/v1"
)

Expand Down Expand Up @@ -63,48 +62,9 @@ func (d *PersistentVolumeClaimSpecDie) DataSourceRefDie(fn func(d *TypedObjectRe
// +die
type _ = corev1.VolumeResourceRequirements

func (d *VolumeResourceRequirementsDie) AddLimit(name corev1.ResourceName, quantity resource.Quantity) *VolumeResourceRequirementsDie {
return d.DieStamp(func(r *corev1.VolumeResourceRequirements) {
if r.Limits == nil {
r.Limits = corev1.ResourceList{}
}
r.Limits[name] = quantity
})
}

func (d *VolumeResourceRequirementsDie) AddLimitString(name corev1.ResourceName, quantity string) *VolumeResourceRequirementsDie {
return d.AddLimit(name, resource.MustParse(quantity))
}

func (d *VolumeResourceRequirementsDie) AddRequest(name corev1.ResourceName, quantity resource.Quantity) *VolumeResourceRequirementsDie {
return d.DieStamp(func(r *corev1.VolumeResourceRequirements) {
if r.Requests == nil {
r.Requests = corev1.ResourceList{}
}
r.Requests[name] = quantity
})
}

func (d *VolumeResourceRequirementsDie) AddRequestString(name corev1.ResourceName, quantity string) *VolumeResourceRequirementsDie {
return d.AddRequest(name, resource.MustParse(quantity))
}

// +die:ignore={AllocatedResourceStatuses}
type _ = corev1.PersistentVolumeClaimStatus

func (d *PersistentVolumeClaimStatusDie) AddCapacity(name corev1.ResourceName, quantity resource.Quantity) *PersistentVolumeClaimStatusDie {
return d.DieStamp(func(r *corev1.PersistentVolumeClaimStatus) {
if r.Capacity == nil {
r.Capacity = corev1.ResourceList{}
}
r.Capacity[name] = quantity
})
}

func (d *PersistentVolumeClaimStatusDie) AddCapacityString(name corev1.ResourceName, quantity string) *PersistentVolumeClaimStatusDie {
return d.AddCapacity(name, resource.MustParse(quantity))
}

func (d *PersistentVolumeClaimStatusDie) ConditionsDie(conditions ...*diemetav1.ConditionDie) *PersistentVolumeClaimStatusDie {
return d.DieStamp(func(r *corev1.PersistentVolumeClaimStatus) {
r.Conditions = make([]corev1.PersistentVolumeClaimCondition, len(conditions))
Expand All @@ -121,19 +81,6 @@ func (d *PersistentVolumeClaimStatusDie) ConditionsDie(conditions ...*diemetav1.
})
}

func (d *PersistentVolumeClaimStatusDie) AddAllocatedResources(name corev1.ResourceName, quantity resource.Quantity) *PersistentVolumeClaimStatusDie {
return d.DieStamp(func(r *corev1.PersistentVolumeClaimStatus) {
if r.AllocatedResources == nil {
r.AllocatedResources = corev1.ResourceList{}
}
r.AllocatedResources[name] = quantity
})
}

func (d *PersistentVolumeClaimStatusDie) AddAllocatedResourcesString(name corev1.ResourceName, quantity string) *PersistentVolumeClaimStatusDie {
return d.AddAllocatedResources(name, resource.MustParse(quantity))
}

// allocatedResourceStatuses stores status of resource being resized for the given PVC.
// Key names follow standard Kubernetes label syntax. Valid values are either:
// - Un-prefixed keys:
Expand Down
Loading

0 comments on commit d3b6f77

Please sign in to comment.