From d3b6f777c9759d67e7a5d259ef0996c1829f03ad Mon Sep 17 00:00:00 2001 From: Scott Andrews Date: Tue, 18 Jun 2024 18:28:42 -0400 Subject: [PATCH] Generate Quantity helper methods for dies 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 --- .../autoscaling/v2/horizontalpodautoscaler.go | 21 -- apis/autoscaling/v2/zz_generated.die.go | 22 +- apis/core/v1/container.go | 40 --- apis/core/v1/limitrange.go | 66 ----- apis/core/v1/node.go | 27 -- apis/core/v1/persistantvolume.go | 14 - apis/core/v1/persistantvolumeclaim.go | 53 ---- apis/core/v1/pod.go | 14 - apis/core/v1/resourcequota.go | 40 --- apis/core/v1/zz_generated.die.go | 278 +++++++++++++++++- apis/node/v1/runtimeclass.go | 14 - apis/node/v1/zz_generated.die.go | 15 + apis/storage/v1/csistoragecapacities.go | 11 - apis/storage/v1/zz_generated.die.go | 12 +- apis/storage/v1beta1/csistoragecapacity.go | 11 - apis/storage/v1beta1/zz_generated.die.go | 12 +- diegen/die/traverse.go | 33 +++ 17 files changed, 368 insertions(+), 315 deletions(-) diff --git a/apis/autoscaling/v2/horizontalpodautoscaler.go b/apis/autoscaling/v2/horizontalpodautoscaler.go index 12e08cf..844eeb4 100644 --- a/apis/autoscaling/v2/horizontalpodautoscaler.go +++ b/apis/autoscaling/v2/horizontalpodautoscaler.go @@ -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" ) @@ -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 @@ -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 diff --git a/apis/autoscaling/v2/zz_generated.die.go b/apis/autoscaling/v2/zz_generated.die.go index ed6da60..da32c79 100644 --- a/apis/autoscaling/v2/zz_generated.die.go +++ b/apis/autoscaling/v2/zz_generated.die.go @@ -26,7 +26,7 @@ import ( fmtx "fmt" autoscalingv2 "k8s.io/api/autoscaling/v2" corev1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/resource" + resource "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" unstructured "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" runtime "k8s.io/apimachinery/pkg/runtime" @@ -1460,6 +1460,11 @@ func (d *MetricTargetDie) Value(v *resource.Quantity) *MetricTargetDie { }) } +func (d *MetricTargetDie) ValueString(s string) *MetricTargetDie { + q := resource.MustParse(s) + return d.Value(&q) +} + // averageValue is the target value of the average of the // // metric across all relevant pods (as a quantity) @@ -1469,6 +1474,11 @@ func (d *MetricTargetDie) AverageValue(v *resource.Quantity) *MetricTargetDie { }) } +func (d *MetricTargetDie) AverageValueString(s string) *MetricTargetDie { + q := resource.MustParse(s) + return d.AverageValue(&q) +} + // averageUtilization is the target value of the average of the // // resource metric across all relevant pods, represented as a percentage of @@ -3991,6 +4001,11 @@ func (d *MetricValueStatusDie) Value(v *resource.Quantity) *MetricValueStatusDie }) } +func (d *MetricValueStatusDie) ValueString(s string) *MetricValueStatusDie { + q := resource.MustParse(s) + return d.Value(&q) +} + // averageValue is the current value of the average of the // // metric across all relevant pods (as a quantity) @@ -4000,6 +4015,11 @@ func (d *MetricValueStatusDie) AverageValue(v *resource.Quantity) *MetricValueSt }) } +func (d *MetricValueStatusDie) AverageValueString(s string) *MetricValueStatusDie { + q := resource.MustParse(s) + return d.AverageValue(&q) +} + // currentAverageUtilization is the current value of the average of the // // resource metric across all relevant pods, represented as a percentage of diff --git a/apis/core/v1/container.go b/apis/core/v1/container.go index 0ca2c56..490a93e 100644 --- a/apis/core/v1/container.go +++ b/apis/core/v1/container.go @@ -18,7 +18,6 @@ package v1 import ( corev1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/resource" ) // +die @@ -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)) @@ -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) diff --git a/apis/core/v1/limitrange.go b/apis/core/v1/limitrange.go index e5668f5..dad415f 100644 --- a/apis/core/v1/limitrange.go +++ b/apis/core/v1/limitrange.go @@ -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 @@ -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)) -} diff --git a/apis/core/v1/node.go b/apis/core/v1/node.go index 68a3329..3d6de22 100644 --- a/apis/core/v1/node.go +++ b/apis/core/v1/node.go @@ -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" ) @@ -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)) diff --git a/apis/core/v1/persistantvolume.go b/apis/core/v1/persistantvolume.go index 3db8b30..109f293 100644 --- a/apis/core/v1/persistantvolume.go +++ b/apis/core/v1/persistantvolume.go @@ -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 @@ -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) diff --git a/apis/core/v1/persistantvolumeclaim.go b/apis/core/v1/persistantvolumeclaim.go index 1ad6889..092d521 100644 --- a/apis/core/v1/persistantvolumeclaim.go +++ b/apis/core/v1/persistantvolumeclaim.go @@ -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" ) @@ -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)) @@ -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: diff --git a/apis/core/v1/pod.go b/apis/core/v1/pod.go index 5c5e2d7..c164d41 100644 --- a/apis/core/v1/pod.go +++ b/apis/core/v1/pod.go @@ -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" ) @@ -130,19 +129,6 @@ func (d *PodSpecDie) ReadinessGatesDie(gates ...*PodReadinessGateDie) *PodSpecDi }) } -func (d *PodSpecDie) AddOverhead(name corev1.ResourceName, quantity resource.Quantity) *PodSpecDie { - return d.DieStamp(func(r *corev1.PodSpec) { - if r.Overhead == nil { - r.Overhead = corev1.ResourceList{} - } - r.Overhead[name] = quantity - }) -} - -func (d *PodSpecDie) AddOverheadString(name corev1.ResourceName, quantity string) *PodSpecDie { - return d.AddOverhead(name, resource.MustParse(quantity)) -} - func (d *PodSpecDie) TopologySpreadConstraintDie(topologyKey string, fn func(d *TopologySpreadConstraintDie)) *PodSpecDie { return d.DieStamp(func(r *corev1.PodSpec) { for i := range r.TopologySpreadConstraints { diff --git a/apis/core/v1/resourcequota.go b/apis/core/v1/resourcequota.go index fb0e5e9..c8e5e84 100644 --- a/apis/core/v1/resourcequota.go +++ b/apis/core/v1/resourcequota.go @@ -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=ResourceQuota @@ -27,19 +26,6 @@ type _ = corev1.ResourceQuota // +die type _ = corev1.ResourceQuotaSpec -func (d *ResourceQuotaSpecDie) AddHard(name corev1.ResourceName, quantity resource.Quantity) *ResourceQuotaSpecDie { - return d.DieStamp(func(r *corev1.ResourceQuotaSpec) { - if r.Hard == nil { - r.Hard = corev1.ResourceList{} - } - r.Hard[name] = quantity - }) -} - -func (d *ResourceQuotaSpecDie) AddHardString(name corev1.ResourceName, quantity string) *ResourceQuotaSpecDie { - return d.AddHard(name, resource.MustParse(quantity)) -} - func (d *ResourceQuotaSpecDie) ScopeSelectorDie(fn func(d *ScopeSelectorDie)) *ResourceQuotaSpecDie { return d.DieStamp(func(r *corev1.ResourceQuotaSpec) { d := ScopeSelectorBlank.DieImmutable(false).DieFeedPtr(r.ScopeSelector) @@ -73,29 +59,3 @@ type _ = corev1.ScopedResourceSelectorRequirement // +die type _ = corev1.ResourceQuotaStatus - -func (d *ResourceQuotaStatusDie) AddHard(name corev1.ResourceName, quantity resource.Quantity) *ResourceQuotaStatusDie { - return d.DieStamp(func(r *corev1.ResourceQuotaStatus) { - if r.Hard == nil { - r.Hard = corev1.ResourceList{} - } - r.Hard[name] = quantity - }) -} - -func (d *ResourceQuotaStatusDie) AddHardString(name corev1.ResourceName, quantity string) *ResourceQuotaStatusDie { - return d.AddHard(name, resource.MustParse(quantity)) -} - -func (d *ResourceQuotaStatusDie) AddUsed(name corev1.ResourceName, quantity resource.Quantity) *ResourceQuotaStatusDie { - return d.DieStamp(func(r *corev1.ResourceQuotaStatus) { - if r.Used == nil { - r.Used = corev1.ResourceList{} - } - r.Used[name] = quantity - }) -} - -func (d *ResourceQuotaStatusDie) AddUsedString(name corev1.ResourceName, quantity string) *ResourceQuotaStatusDie { - return d.AddUsed(name, resource.MustParse(quantity)) -} diff --git a/apis/core/v1/zz_generated.die.go b/apis/core/v1/zz_generated.die.go index 058a3eb..3026b94 100644 --- a/apis/core/v1/zz_generated.die.go +++ b/apis/core/v1/zz_generated.die.go @@ -25,7 +25,7 @@ import ( json "encoding/json" fmtx "fmt" corev1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/resource" + resource "k8s.io/apimachinery/pkg/api/resource" apismetav1 "k8s.io/apimachinery/pkg/apis/meta/v1" unstructured "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" runtime "k8s.io/apimachinery/pkg/runtime" @@ -4543,6 +4543,11 @@ func (d *ResourceFieldSelectorDie) Divisor(v resource.Quantity) *ResourceFieldSe }) } +func (d *ResourceFieldSelectorDie) DivisorString(s string) *ResourceFieldSelectorDie { + q := resource.MustParse(s) + return d.Divisor(q) +} + var ConfigMapKeySelectorBlank = (&ConfigMapKeySelectorDie{}).DieFeed(corev1.ConfigMapKeySelector{}) type ConfigMapKeySelectorDie struct { @@ -5140,6 +5145,20 @@ func (d *ResourceRequirementsDie) Limits(v corev1.ResourceList) *ResourceRequire }) } +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 { + q := resource.MustParse(quantity) + return d.AddLimit(name, q) +} + // Requests describes the minimum amount of compute resources required. // // If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, @@ -5153,6 +5172,20 @@ func (d *ResourceRequirementsDie) Requests(v corev1.ResourceList) *ResourceRequi }) } +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 { + q := resource.MustParse(quantity) + return d.AddRequest(name, q) +} + // Claims lists the names of resources, defined in spec.resourceClaims, // // that are used by this container. @@ -9882,6 +9915,20 @@ func (d *ContainerStatusDie) AllocatedResources(v corev1.ResourceList) *Containe }) } +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 { + q := resource.MustParse(quantity) + return d.AddAllocatedResource(name, q) +} + // Resources represents the compute resource requests and limits that have been successfully // // enacted on the running container after it has been started or has been successfully resized. @@ -13345,6 +13392,20 @@ func (d *LimitRangeItemDie) Max(v corev1.ResourceList) *LimitRangeItemDie { }) } +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 { + q := resource.MustParse(quantity) + return d.AddMax(name, q) +} + // Min usage constraints on this kind by resource name. func (d *LimitRangeItemDie) Min(v corev1.ResourceList) *LimitRangeItemDie { return d.DieStamp(func(r *corev1.LimitRangeItem) { @@ -13352,6 +13413,20 @@ func (d *LimitRangeItemDie) Min(v corev1.ResourceList) *LimitRangeItemDie { }) } +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 { + q := resource.MustParse(quantity) + return d.AddMin(name, q) +} + // Default resource requirement limit value by resource name if resource limit is omitted. func (d *LimitRangeItemDie) Default(v corev1.ResourceList) *LimitRangeItemDie { return d.DieStamp(func(r *corev1.LimitRangeItem) { @@ -13359,6 +13434,20 @@ func (d *LimitRangeItemDie) Default(v corev1.ResourceList) *LimitRangeItemDie { }) } +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 { + q := resource.MustParse(quantity) + return d.AddDefault(name, q) +} + // DefaultRequest is the default resource requirement request value by resource name if resource request is omitted. func (d *LimitRangeItemDie) DefaultRequest(v corev1.ResourceList) *LimitRangeItemDie { return d.DieStamp(func(r *corev1.LimitRangeItem) { @@ -13366,6 +13455,20 @@ func (d *LimitRangeItemDie) DefaultRequest(v corev1.ResourceList) *LimitRangeIte }) } +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 { + q := resource.MustParse(quantity) + return d.AddDefaultRequest(name, q) +} + // MaxLimitRequestRatio if specified, the named resource must have a request and limit that are both non-zero where limit divided by request is less than or equal to the enumerated value; this represents the max burst for the named resource. func (d *LimitRangeItemDie) MaxLimitRequestRatio(v corev1.ResourceList) *LimitRangeItemDie { return d.DieStamp(func(r *corev1.LimitRangeItem) { @@ -13373,6 +13476,20 @@ func (d *LimitRangeItemDie) MaxLimitRequestRatio(v corev1.ResourceList) *LimitRa }) } +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 { + q := resource.MustParse(quantity) + return d.AddMaxLimitRequestRatio(name, q) +} + var NamespaceBlank = (&NamespaceDie{}).DieFeed(corev1.Namespace{}) type NamespaceDie struct { @@ -15454,6 +15571,20 @@ func (d *NodeStatusDie) Capacity(v corev1.ResourceList) *NodeStatusDie { }) } +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 { + q := resource.MustParse(quantity) + return d.AddCapacity(name, q) +} + // Allocatable represents the resources of a node that are available for scheduling. // // Defaults to Capacity. @@ -15463,6 +15594,20 @@ func (d *NodeStatusDie) Allocatable(v corev1.ResourceList) *NodeStatusDie { }) } +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 { + q := resource.MustParse(quantity) + return d.AddAllocatable(name, q) +} + // NodePhase is the recently observed lifecycle phase of the node. // // More info: https://kubernetes.io/docs/concepts/nodes/node/#phase @@ -17956,6 +18101,20 @@ func (d *PersistentVolumeSpecDie) Capacity(v corev1.ResourceList) *PersistentVol }) } +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 { + q := resource.MustParse(quantity) + return d.AddCapacity(name, q) +} + // persistentVolumeSource is the actual volume backing the persistent volume. func (d *PersistentVolumeSpecDie) PersistentVolumeSource(v corev1.PersistentVolumeSource) *PersistentVolumeSpecDie { return d.DieStamp(func(r *corev1.PersistentVolumeSpec) { @@ -22594,6 +22753,20 @@ func (d *VolumeResourceRequirementsDie) Limits(v corev1.ResourceList) *VolumeRes }) } +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 { + q := resource.MustParse(quantity) + return d.AddLimit(name, q) +} + // Requests describes the minimum amount of compute resources required. // // If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, @@ -22607,6 +22780,20 @@ func (d *VolumeResourceRequirementsDie) Requests(v corev1.ResourceList) *VolumeR }) } +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 { + q := resource.MustParse(quantity) + return d.AddRequest(name, q) +} + var PersistentVolumeClaimStatusBlank = (&PersistentVolumeClaimStatusDie{}).DieFeed(corev1.PersistentVolumeClaimStatus{}) type PersistentVolumeClaimStatusDie struct { @@ -22812,6 +22999,20 @@ func (d *PersistentVolumeClaimStatusDie) Capacity(v corev1.ResourceList) *Persis }) } +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 { + q := resource.MustParse(quantity) + return d.AddCapacity(name, q) +} + // conditions is the current Condition of persistent volume claim. If underlying persistent volume is being // // resized then the Condition will be set to 'Resizing'. @@ -22864,6 +23065,20 @@ func (d *PersistentVolumeClaimStatusDie) AllocatedResources(v corev1.ResourceLis }) } +func (d *PersistentVolumeClaimStatusDie) AddAllocatedResource(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) AddAllocatedResourceString(name corev1.ResourceName, quantity string) *PersistentVolumeClaimStatusDie { + q := resource.MustParse(quantity) + return d.AddAllocatedResource(name, q) +} + // currentVolumeAttributesClassName is the current name of the VolumeAttributesClass the PVC is using. // // # When unset, there is no VolumeAttributeClass applied to this PersistentVolumeClaim @@ -24208,6 +24423,20 @@ func (d *PodSpecDie) Overhead(v corev1.ResourceList) *PodSpecDie { }) } +func (d *PodSpecDie) AddOverhead(name corev1.ResourceName, quantity resource.Quantity) *PodSpecDie { + return d.DieStamp(func(r *corev1.PodSpec) { + if r.Overhead == nil { + r.Overhead = corev1.ResourceList{} + } + r.Overhead[name] = quantity + }) +} + +func (d *PodSpecDie) AddOverheadString(name corev1.ResourceName, quantity string) *PodSpecDie { + q := resource.MustParse(quantity) + return d.AddOverhead(name, q) +} + // TopologySpreadConstraints describes how a group of pods ought to spread across topology // // domains. Scheduler will schedule pods in a way which abides by the constraints. @@ -29262,6 +29491,20 @@ func (d *ResourceQuotaSpecDie) Hard(v corev1.ResourceList) *ResourceQuotaSpecDie }) } +func (d *ResourceQuotaSpecDie) AddHard(name corev1.ResourceName, quantity resource.Quantity) *ResourceQuotaSpecDie { + return d.DieStamp(func(r *corev1.ResourceQuotaSpec) { + if r.Hard == nil { + r.Hard = corev1.ResourceList{} + } + r.Hard[name] = quantity + }) +} + +func (d *ResourceQuotaSpecDie) AddHardString(name corev1.ResourceName, quantity string) *ResourceQuotaSpecDie { + q := resource.MustParse(quantity) + return d.AddHard(name, q) +} + // A collection of filters that must match each object tracked by a quota. // // If not specified, the quota matches all objects. @@ -29873,6 +30116,20 @@ func (d *ResourceQuotaStatusDie) Hard(v corev1.ResourceList) *ResourceQuotaStatu }) } +func (d *ResourceQuotaStatusDie) AddHard(name corev1.ResourceName, quantity resource.Quantity) *ResourceQuotaStatusDie { + return d.DieStamp(func(r *corev1.ResourceQuotaStatus) { + if r.Hard == nil { + r.Hard = corev1.ResourceList{} + } + r.Hard[name] = quantity + }) +} + +func (d *ResourceQuotaStatusDie) AddHardString(name corev1.ResourceName, quantity string) *ResourceQuotaStatusDie { + q := resource.MustParse(quantity) + return d.AddHard(name, q) +} + // Used is the current observed total usage of the resource in the namespace. func (d *ResourceQuotaStatusDie) Used(v corev1.ResourceList) *ResourceQuotaStatusDie { return d.DieStamp(func(r *corev1.ResourceQuotaStatus) { @@ -29880,6 +30137,20 @@ func (d *ResourceQuotaStatusDie) Used(v corev1.ResourceList) *ResourceQuotaStatu }) } +func (d *ResourceQuotaStatusDie) AddUsed(name corev1.ResourceName, quantity resource.Quantity) *ResourceQuotaStatusDie { + return d.DieStamp(func(r *corev1.ResourceQuotaStatus) { + if r.Used == nil { + r.Used = corev1.ResourceList{} + } + r.Used[name] = quantity + }) +} + +func (d *ResourceQuotaStatusDie) AddUsedString(name corev1.ResourceName, quantity string) *ResourceQuotaStatusDie { + q := resource.MustParse(quantity) + return d.AddUsed(name, q) +} + var SecretBlank = (&SecretDie{}).DieFeed(corev1.Secret{}) type SecretDie struct { @@ -33568,6 +33839,11 @@ func (d *EmptyDirVolumeSourceDie) SizeLimit(v *resource.Quantity) *EmptyDirVolum }) } +func (d *EmptyDirVolumeSourceDie) SizeLimitString(s string) *EmptyDirVolumeSourceDie { + q := resource.MustParse(s) + return d.SizeLimit(&q) +} + var GCEPersistentDiskVolumeSourceBlank = (&GCEPersistentDiskVolumeSourceDie{}).DieFeed(corev1.GCEPersistentDiskVolumeSource{}) type GCEPersistentDiskVolumeSourceDie struct { diff --git a/apis/node/v1/runtimeclass.go b/apis/node/v1/runtimeclass.go index 7792aa8..192e961 100644 --- a/apis/node/v1/runtimeclass.go +++ b/apis/node/v1/runtimeclass.go @@ -19,7 +19,6 @@ package v1 import ( corev1 "k8s.io/api/core/v1" nodev1 "k8s.io/api/node/v1" - "k8s.io/apimachinery/pkg/api/resource" diecorev1 "reconciler.io/dies/apis/core/v1" ) @@ -29,19 +28,6 @@ type _ = nodev1.RuntimeClass // +die type _ = nodev1.Overhead -func (d *OverheadDie) AddPodFixed(name corev1.ResourceName, quantity resource.Quantity) *OverheadDie { - return d.DieStamp(func(r *nodev1.Overhead) { - if r.PodFixed == nil { - r.PodFixed = corev1.ResourceList{} - } - r.PodFixed[name] = quantity - }) -} - -func (d *OverheadDie) AddPodFixedString(name corev1.ResourceName, quantity string) *OverheadDie { - return d.AddPodFixed(name, resource.MustParse(quantity)) -} - // +die type _ = nodev1.Scheduling diff --git a/apis/node/v1/zz_generated.die.go b/apis/node/v1/zz_generated.die.go index c47f558..5b4ea68 100644 --- a/apis/node/v1/zz_generated.die.go +++ b/apis/node/v1/zz_generated.die.go @@ -26,6 +26,7 @@ import ( fmtx "fmt" corev1 "k8s.io/api/core/v1" nodev1 "k8s.io/api/node/v1" + resource "k8s.io/apimachinery/pkg/api/resource" apismetav1 "k8s.io/apimachinery/pkg/apis/meta/v1" unstructured "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" runtime "k8s.io/apimachinery/pkg/runtime" @@ -552,6 +553,20 @@ func (d *OverheadDie) PodFixed(v corev1.ResourceList) *OverheadDie { }) } +func (d *OverheadDie) AddPodFixed(name corev1.ResourceName, quantity resource.Quantity) *OverheadDie { + return d.DieStamp(func(r *nodev1.Overhead) { + if r.PodFixed == nil { + r.PodFixed = corev1.ResourceList{} + } + r.PodFixed[name] = quantity + }) +} + +func (d *OverheadDie) AddPodFixedString(name corev1.ResourceName, quantity string) *OverheadDie { + q := resource.MustParse(quantity) + return d.AddPodFixed(name, q) +} + var SchedulingBlank = (&SchedulingDie{}).DieFeed(nodev1.Scheduling{}) type SchedulingDie struct { diff --git a/apis/storage/v1/csistoragecapacities.go b/apis/storage/v1/csistoragecapacities.go index 230839a..268aea2 100644 --- a/apis/storage/v1/csistoragecapacities.go +++ b/apis/storage/v1/csistoragecapacities.go @@ -18,7 +18,6 @@ package v1 import ( storagev1 "k8s.io/api/storage/v1" - resource "k8s.io/apimachinery/pkg/api/resource" diemetav1 "reconciler.io/dies/apis/meta/v1" ) @@ -32,13 +31,3 @@ func (d *CSIStorageCapacityDie) NodeTopologyDie(fn func(d *diemetav1.LabelSelect r.NodeTopology = d.DieReleasePtr() }) } - -func (d *CSIStorageCapacityDie) CapacityString(quantity string) *CSIStorageCapacityDie { - q := resource.MustParse(quantity) - return d.Capacity(&q) -} - -func (d *CSIStorageCapacityDie) MaximumVolumeSizeString(quantity string) *CSIStorageCapacityDie { - q := resource.MustParse(quantity) - return d.MaximumVolumeSize(&q) -} diff --git a/apis/storage/v1/zz_generated.die.go b/apis/storage/v1/zz_generated.die.go index 277fcab..3a25455 100644 --- a/apis/storage/v1/zz_generated.die.go +++ b/apis/storage/v1/zz_generated.die.go @@ -26,7 +26,7 @@ import ( fmtx "fmt" corev1 "k8s.io/api/core/v1" storagev1 "k8s.io/api/storage/v1" - "k8s.io/apimachinery/pkg/api/resource" + resource "k8s.io/apimachinery/pkg/api/resource" apismetav1 "k8s.io/apimachinery/pkg/apis/meta/v1" unstructured "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" runtime "k8s.io/apimachinery/pkg/runtime" @@ -2202,6 +2202,11 @@ func (d *CSIStorageCapacityDie) Capacity(v *resource.Quantity) *CSIStorageCapaci }) } +func (d *CSIStorageCapacityDie) CapacityString(s string) *CSIStorageCapacityDie { + q := resource.MustParse(s) + return d.Capacity(&q) +} + // maximumVolumeSize is the value reported by the CSI driver in its GetCapacityResponse // // for a GetCapacityRequest with topology and parameters that match the @@ -2225,6 +2230,11 @@ func (d *CSIStorageCapacityDie) MaximumVolumeSize(v *resource.Quantity) *CSIStor }) } +func (d *CSIStorageCapacityDie) MaximumVolumeSizeString(s string) *CSIStorageCapacityDie { + q := resource.MustParse(s) + return d.MaximumVolumeSize(&q) +} + var StorageClassBlank = (&StorageClassDie{}).DieFeed(storagev1.StorageClass{}) type StorageClassDie struct { diff --git a/apis/storage/v1beta1/csistoragecapacity.go b/apis/storage/v1beta1/csistoragecapacity.go index 6b27d97..50bf2a4 100644 --- a/apis/storage/v1beta1/csistoragecapacity.go +++ b/apis/storage/v1beta1/csistoragecapacity.go @@ -18,7 +18,6 @@ package v1beta1 import ( storagev1beta1 "k8s.io/api/storage/v1beta1" - resource "k8s.io/apimachinery/pkg/api/resource" diemetav1 "reconciler.io/dies/apis/meta/v1" ) @@ -32,13 +31,3 @@ func (d *CSIStorageCapacityDie) NodeTopologyDie(fn func(d *diemetav1.LabelSelect r.NodeTopology = d.DieReleasePtr() }) } - -func (d *CSIStorageCapacityDie) CapacityString(quantity string) *CSIStorageCapacityDie { - q := resource.MustParse(quantity) - return d.Capacity(&q) -} - -func (d *CSIStorageCapacityDie) MaximumVolumeSizeString(quantity string) *CSIStorageCapacityDie { - q := resource.MustParse(quantity) - return d.MaximumVolumeSize(&q) -} diff --git a/apis/storage/v1beta1/zz_generated.die.go b/apis/storage/v1beta1/zz_generated.die.go index 82c0a8d..35a08f4 100644 --- a/apis/storage/v1beta1/zz_generated.die.go +++ b/apis/storage/v1beta1/zz_generated.die.go @@ -25,7 +25,7 @@ import ( json "encoding/json" fmtx "fmt" storagev1beta1 "k8s.io/api/storage/v1beta1" - "k8s.io/apimachinery/pkg/api/resource" + resource "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" unstructured "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" runtime "k8s.io/apimachinery/pkg/runtime" @@ -365,6 +365,11 @@ func (d *CSIStorageCapacityDie) Capacity(v *resource.Quantity) *CSIStorageCapaci }) } +func (d *CSIStorageCapacityDie) CapacityString(s string) *CSIStorageCapacityDie { + q := resource.MustParse(s) + return d.Capacity(&q) +} + // maximumVolumeSize is the value reported by the CSI driver in its GetCapacityResponse // // for a GetCapacityRequest with topology and parameters that match the @@ -387,3 +392,8 @@ func (d *CSIStorageCapacityDie) MaximumVolumeSize(v *resource.Quantity) *CSIStor r.MaximumVolumeSize = v }) } + +func (d *CSIStorageCapacityDie) MaximumVolumeSizeString(s string) *CSIStorageCapacityDie { + q := resource.MustParse(s) + return d.MaximumVolumeSize(&q) +} diff --git a/diegen/die/traverse.go b/diegen/die/traverse.go index 503a89e..d1952ee 100644 --- a/diegen/die/traverse.go +++ b/diegen/die/traverse.go @@ -185,6 +185,39 @@ func (c *copyMethodMaker) GenerateFieldFor(field Field, die Die) { c.Linef(" })") c.Linef("}") } + + if field.Type == "Quantity" && field.TypePackage == "k8s.io/apimachinery/pkg/api/resource" && (field.TypePrefix == "*" || field.TypePrefix == "") { + c.Linef("") + c.Linef("func (d *%s) %sString(s string) *%s {", field.Receiver, field.Name, die.Type) + c.Linef(" q := %s(s)", c.AliasedRef("k8s.io/apimachinery/pkg/api/resource", "MustParse")) + if field.TypePrefix == "*" { + c.Linef(" return d.%s(&q)", field.Name) + } else { + c.Linef(" return d.%s(q)", field.Name) + } + c.Linef("}") + } + + if field.Type == "ResourceList" && field.TypePackage == "k8s.io/api/core/v1" { + // TODO(scothis) allow a user to override the singularization + singular := strings.TrimSuffix(field.Name, "s") + + c.Linef("") + c.Linef("func (d *%s) Add%s(name %s, quantity %s) *%s {", field.Receiver, singular, c.AliasedRef("k8s.io/api/core/v1", "ResourceName"), c.AliasedRef("k8s.io/apimachinery/pkg/api/resource", "Quantity"), die.Type) + c.Linef(" return d.DieStamp(func(r *%s) {", c.AliasedRef(die.TargetPackage, die.TargetType)) + c.Linef(" if r.%s == nil {", field.Name) + c.Linef(" r.%s = %s{}", field.Name, c.AliasedRef("k8s.io/api/core/v1", "ResourceList")) + c.Linef(" }") + c.Linef(" r.%s[name] = quantity", field.Name) + c.Linef(" })") + c.Linef("}") + + c.Linef("") + c.Linef("func (d *%s) Add%sString(name %s, quantity string) *%s {", field.Receiver, singular, c.AliasedRef("k8s.io/api/core/v1", "ResourceName"), die.Type) + c.Linef(" q := %s(quantity)", c.AliasedRef("k8s.io/apimachinery/pkg/api/resource", "MustParse")) + c.Linef(" return d.Add%s(name, q)", singular) + c.Linef("}") + } } func (c *copyMethodMaker) generateDieFor(die Die) {