DRA: remove "source" indirection from v1 Pod API
This makes the API nicer: resourceClaims: - name: with-template resourceClaimTemplateName: test-inline-claim-template - name: with-claim resourceClaimName: test-shared-claim Previously, this was: resourceClaims: - name: with-template source: resourceClaimTemplateName: test-inline-claim-template - name: with-claim source: resourceClaimName: test-shared-claim A more long-term benefit is that other, future alternatives might not make sense under the "source" umbrella. This is a breaking change. It's justified because DRA is still alpha and will have several other API breaks in 1.31.
This commit is contained in:
@@ -3476,17 +3476,11 @@ type PodResourceClaim struct {
|
||||
// This must be a DNS_LABEL.
|
||||
Name string
|
||||
|
||||
// Source describes where to find the ResourceClaim.
|
||||
Source ClaimSource
|
||||
}
|
||||
|
||||
// ClaimSource describes a reference to a ResourceClaim.
|
||||
//
|
||||
// Exactly one of these fields should be set. Consumers of this type must
|
||||
// treat an empty object as if it has an unknown value.
|
||||
type ClaimSource struct {
|
||||
// ResourceClaimName is the name of a ResourceClaim object in the same
|
||||
// namespace as this pod.
|
||||
//
|
||||
// Exactly one of ResourceClaimName and ResourceClaimTemplateName must
|
||||
// be set.
|
||||
ResourceClaimName *string
|
||||
|
||||
// ResourceClaimTemplateName is the name of a ResourceClaimTemplate
|
||||
@@ -3501,6 +3495,9 @@ type ClaimSource struct {
|
||||
// This field is immutable and no changes will be made to the
|
||||
// corresponding ResourceClaim by the control plane after creating the
|
||||
// ResourceClaim.
|
||||
//
|
||||
// Exactly one of ResourceClaimName and ResourceClaimTemplateName must
|
||||
// be set.
|
||||
ResourceClaimTemplateName *string
|
||||
}
|
||||
|
||||
|
42
pkg/apis/core/v1/zz_generated.conversion.go
generated
42
pkg/apis/core/v1/zz_generated.conversion.go
generated
@@ -202,16 +202,6 @@ func RegisterConversions(s *runtime.Scheme) error {
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*v1.ClaimSource)(nil), (*core.ClaimSource)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_v1_ClaimSource_To_core_ClaimSource(a.(*v1.ClaimSource), b.(*core.ClaimSource), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*core.ClaimSource)(nil), (*v1.ClaimSource)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_core_ClaimSource_To_v1_ClaimSource(a.(*core.ClaimSource), b.(*v1.ClaimSource), scope)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.AddGeneratedConversionFunc((*v1.ClientIPConfig)(nil), (*core.ClientIPConfig)(nil), func(a, b interface{}, scope conversion.Scope) error {
|
||||
return Convert_v1_ClientIPConfig_To_core_ClientIPConfig(a.(*v1.ClientIPConfig), b.(*core.ClientIPConfig), scope)
|
||||
}); err != nil {
|
||||
@@ -2805,28 +2795,6 @@ func Convert_core_CinderVolumeSource_To_v1_CinderVolumeSource(in *core.CinderVol
|
||||
return autoConvert_core_CinderVolumeSource_To_v1_CinderVolumeSource(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_v1_ClaimSource_To_core_ClaimSource(in *v1.ClaimSource, out *core.ClaimSource, s conversion.Scope) error {
|
||||
out.ResourceClaimName = (*string)(unsafe.Pointer(in.ResourceClaimName))
|
||||
out.ResourceClaimTemplateName = (*string)(unsafe.Pointer(in.ResourceClaimTemplateName))
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_v1_ClaimSource_To_core_ClaimSource is an autogenerated conversion function.
|
||||
func Convert_v1_ClaimSource_To_core_ClaimSource(in *v1.ClaimSource, out *core.ClaimSource, s conversion.Scope) error {
|
||||
return autoConvert_v1_ClaimSource_To_core_ClaimSource(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_core_ClaimSource_To_v1_ClaimSource(in *core.ClaimSource, out *v1.ClaimSource, s conversion.Scope) error {
|
||||
out.ResourceClaimName = (*string)(unsafe.Pointer(in.ResourceClaimName))
|
||||
out.ResourceClaimTemplateName = (*string)(unsafe.Pointer(in.ResourceClaimTemplateName))
|
||||
return nil
|
||||
}
|
||||
|
||||
// Convert_core_ClaimSource_To_v1_ClaimSource is an autogenerated conversion function.
|
||||
func Convert_core_ClaimSource_To_v1_ClaimSource(in *core.ClaimSource, out *v1.ClaimSource, s conversion.Scope) error {
|
||||
return autoConvert_core_ClaimSource_To_v1_ClaimSource(in, out, s)
|
||||
}
|
||||
|
||||
func autoConvert_v1_ClientIPConfig_To_core_ClientIPConfig(in *v1.ClientIPConfig, out *core.ClientIPConfig, s conversion.Scope) error {
|
||||
out.TimeoutSeconds = (*int32)(unsafe.Pointer(in.TimeoutSeconds))
|
||||
return nil
|
||||
@@ -6489,9 +6457,8 @@ func Convert_core_PodReadinessGate_To_v1_PodReadinessGate(in *core.PodReadinessG
|
||||
|
||||
func autoConvert_v1_PodResourceClaim_To_core_PodResourceClaim(in *v1.PodResourceClaim, out *core.PodResourceClaim, s conversion.Scope) error {
|
||||
out.Name = in.Name
|
||||
if err := Convert_v1_ClaimSource_To_core_ClaimSource(&in.Source, &out.Source, s); err != nil {
|
||||
return err
|
||||
}
|
||||
out.ResourceClaimName = (*string)(unsafe.Pointer(in.ResourceClaimName))
|
||||
out.ResourceClaimTemplateName = (*string)(unsafe.Pointer(in.ResourceClaimTemplateName))
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -6502,9 +6469,8 @@ func Convert_v1_PodResourceClaim_To_core_PodResourceClaim(in *v1.PodResourceClai
|
||||
|
||||
func autoConvert_core_PodResourceClaim_To_v1_PodResourceClaim(in *core.PodResourceClaim, out *v1.PodResourceClaim, s conversion.Scope) error {
|
||||
out.Name = in.Name
|
||||
if err := Convert_core_ClaimSource_To_v1_ClaimSource(&in.Source, &out.Source, s); err != nil {
|
||||
return err
|
||||
}
|
||||
out.ResourceClaimName = (*string)(unsafe.Pointer(in.ResourceClaimName))
|
||||
out.ResourceClaimTemplateName = (*string)(unsafe.Pointer(in.ResourceClaimTemplateName))
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@@ -3020,7 +3020,7 @@ func validatePodResourceClaim(podMeta *metav1.ObjectMeta, claim core.PodResource
|
||||
nameErrs := ValidateDNS1123Label(claim.Name, fldPath.Child("name"))
|
||||
if len(nameErrs) > 0 {
|
||||
allErrs = append(allErrs, nameErrs...)
|
||||
} else if podMeta != nil && claim.Source.ResourceClaimTemplateName != nil {
|
||||
} else if podMeta != nil && claim.ResourceClaimTemplateName != nil {
|
||||
claimName := podMeta.Name + "-" + claim.Name
|
||||
for _, detail := range ValidateResourceClaimName(claimName, false) {
|
||||
allErrs = append(allErrs, field.Invalid(fldPath.Child("name"), claimName, "final ResourceClaim name: "+detail))
|
||||
@@ -3028,27 +3028,20 @@ func validatePodResourceClaim(podMeta *metav1.ObjectMeta, claim core.PodResource
|
||||
}
|
||||
podClaimNames.Insert(claim.Name)
|
||||
}
|
||||
allErrs = append(allErrs, validatePodResourceClaimSource(claim.Source, fldPath.Child("source"))...)
|
||||
|
||||
return allErrs
|
||||
}
|
||||
|
||||
func validatePodResourceClaimSource(claimSource core.ClaimSource, fldPath *field.Path) field.ErrorList {
|
||||
var allErrs field.ErrorList
|
||||
if claimSource.ResourceClaimName != nil && claimSource.ResourceClaimTemplateName != nil {
|
||||
allErrs = append(allErrs, field.Invalid(fldPath, claimSource, "at most one of `resourceClaimName` or `resourceClaimTemplateName` may be specified"))
|
||||
if claim.ResourceClaimName != nil && claim.ResourceClaimTemplateName != nil {
|
||||
allErrs = append(allErrs, field.Invalid(fldPath, claim, "at most one of `resourceClaimName` or `resourceClaimTemplateName` may be specified"))
|
||||
}
|
||||
if claimSource.ResourceClaimName == nil && claimSource.ResourceClaimTemplateName == nil {
|
||||
allErrs = append(allErrs, field.Invalid(fldPath, claimSource, "must specify one of: `resourceClaimName`, `resourceClaimTemplateName`"))
|
||||
if claim.ResourceClaimName == nil && claim.ResourceClaimTemplateName == nil {
|
||||
allErrs = append(allErrs, field.Invalid(fldPath, claim, "must specify one of: `resourceClaimName`, `resourceClaimTemplateName`"))
|
||||
}
|
||||
if claimSource.ResourceClaimName != nil {
|
||||
for _, detail := range ValidateResourceClaimName(*claimSource.ResourceClaimName, false) {
|
||||
allErrs = append(allErrs, field.Invalid(fldPath.Child("resourceClaimName"), *claimSource.ResourceClaimName, detail))
|
||||
if claim.ResourceClaimName != nil {
|
||||
for _, detail := range ValidateResourceClaimName(*claim.ResourceClaimName, false) {
|
||||
allErrs = append(allErrs, field.Invalid(fldPath.Child("resourceClaimName"), *claim.ResourceClaimName, detail))
|
||||
}
|
||||
}
|
||||
if claimSource.ResourceClaimTemplateName != nil {
|
||||
for _, detail := range ValidateResourceClaimTemplateName(*claimSource.ResourceClaimTemplateName, false) {
|
||||
allErrs = append(allErrs, field.Invalid(fldPath.Child("resourceClaimTemplateName"), *claimSource.ResourceClaimTemplateName, detail))
|
||||
if claim.ResourceClaimTemplateName != nil {
|
||||
for _, detail := range ValidateResourceClaimTemplateName(*claim.ResourceClaimTemplateName, false) {
|
||||
allErrs = append(allErrs, field.Invalid(fldPath.Child("resourceClaimTemplateName"), *claim.ResourceClaimTemplateName, detail))
|
||||
}
|
||||
}
|
||||
return allErrs
|
||||
|
@@ -22650,8 +22650,8 @@ func TestValidateOSFields(t *testing.T) {
|
||||
"PriorityClassName",
|
||||
"ReadinessGates",
|
||||
"ResourceClaims[*].Name",
|
||||
"ResourceClaims[*].Source.ResourceClaimName",
|
||||
"ResourceClaims[*].Source.ResourceClaimTemplateName",
|
||||
"ResourceClaims[*].ResourceClaimName",
|
||||
"ResourceClaims[*].ResourceClaimTemplateName",
|
||||
"RestartPolicy",
|
||||
"RuntimeClassName",
|
||||
"SchedulerName",
|
||||
@@ -25857,9 +25857,6 @@ func TestValidatePVSecretReference(t *testing.T) {
|
||||
func TestValidateDynamicResourceAllocation(t *testing.T) {
|
||||
externalClaimName := "some-claim"
|
||||
externalClaimTemplateName := "some-claim-template"
|
||||
goodClaimSource := core.ClaimSource{
|
||||
ResourceClaimName: &externalClaimName,
|
||||
}
|
||||
shortPodName := &metav1.ObjectMeta{
|
||||
Name: "some-pod",
|
||||
}
|
||||
@@ -25871,10 +25868,8 @@ func TestValidateDynamicResourceAllocation(t *testing.T) {
|
||||
RestartPolicy: core.RestartPolicyAlways,
|
||||
DNSPolicy: core.DNSClusterFirst,
|
||||
ResourceClaims: []core.PodResourceClaim{{
|
||||
Name: "my-claim-template",
|
||||
Source: core.ClaimSource{
|
||||
ResourceClaimTemplateName: &externalClaimTemplateName,
|
||||
},
|
||||
Name: "my-claim-template",
|
||||
ResourceClaimTemplateName: &externalClaimTemplateName,
|
||||
}},
|
||||
}
|
||||
goodClaimReference := core.PodSpec{
|
||||
@@ -25882,10 +25877,8 @@ func TestValidateDynamicResourceAllocation(t *testing.T) {
|
||||
RestartPolicy: core.RestartPolicyAlways,
|
||||
DNSPolicy: core.DNSClusterFirst,
|
||||
ResourceClaims: []core.PodResourceClaim{{
|
||||
Name: "my-claim-reference",
|
||||
Source: core.ClaimSource{
|
||||
ResourceClaimName: &externalClaimName,
|
||||
},
|
||||
Name: "my-claim-reference",
|
||||
ResourceClaimName: &externalClaimName,
|
||||
}},
|
||||
}
|
||||
|
||||
@@ -25897,11 +25890,11 @@ func TestValidateDynamicResourceAllocation(t *testing.T) {
|
||||
RestartPolicy: core.RestartPolicyAlways,
|
||||
DNSPolicy: core.DNSClusterFirst,
|
||||
ResourceClaims: []core.PodResourceClaim{{
|
||||
Name: "my-claim",
|
||||
Source: goodClaimSource,
|
||||
Name: "my-claim",
|
||||
ResourceClaimName: &externalClaimName,
|
||||
}, {
|
||||
Name: "another-claim",
|
||||
Source: goodClaimSource,
|
||||
Name: "another-claim",
|
||||
ResourceClaimName: &externalClaimName,
|
||||
}},
|
||||
},
|
||||
"init container": {
|
||||
@@ -25910,8 +25903,8 @@ func TestValidateDynamicResourceAllocation(t *testing.T) {
|
||||
RestartPolicy: core.RestartPolicyAlways,
|
||||
DNSPolicy: core.DNSClusterFirst,
|
||||
ResourceClaims: []core.PodResourceClaim{{
|
||||
Name: "my-claim",
|
||||
Source: goodClaimSource,
|
||||
Name: "my-claim",
|
||||
ResourceClaimName: &externalClaimName,
|
||||
}},
|
||||
},
|
||||
}
|
||||
@@ -25929,8 +25922,8 @@ func TestValidateDynamicResourceAllocation(t *testing.T) {
|
||||
RestartPolicy: core.RestartPolicyAlways,
|
||||
DNSPolicy: core.DNSClusterFirst,
|
||||
ResourceClaims: []core.PodResourceClaim{{
|
||||
Name: "../my-claim",
|
||||
Source: goodClaimSource,
|
||||
Name: "../my-claim",
|
||||
ResourceClaimName: &externalClaimName,
|
||||
}},
|
||||
},
|
||||
"pod claim name with path": {
|
||||
@@ -25938,8 +25931,8 @@ func TestValidateDynamicResourceAllocation(t *testing.T) {
|
||||
RestartPolicy: core.RestartPolicyAlways,
|
||||
DNSPolicy: core.DNSClusterFirst,
|
||||
ResourceClaims: []core.PodResourceClaim{{
|
||||
Name: "my/claim",
|
||||
Source: goodClaimSource,
|
||||
Name: "my/claim",
|
||||
ResourceClaimName: &externalClaimName,
|
||||
}},
|
||||
},
|
||||
"pod claim name empty": {
|
||||
@@ -25947,8 +25940,8 @@ func TestValidateDynamicResourceAllocation(t *testing.T) {
|
||||
RestartPolicy: core.RestartPolicyAlways,
|
||||
DNSPolicy: core.DNSClusterFirst,
|
||||
ResourceClaims: []core.PodResourceClaim{{
|
||||
Name: "",
|
||||
Source: goodClaimSource,
|
||||
Name: "",
|
||||
ResourceClaimName: &externalClaimName,
|
||||
}},
|
||||
},
|
||||
"duplicate pod claim entries": {
|
||||
@@ -25956,11 +25949,11 @@ func TestValidateDynamicResourceAllocation(t *testing.T) {
|
||||
RestartPolicy: core.RestartPolicyAlways,
|
||||
DNSPolicy: core.DNSClusterFirst,
|
||||
ResourceClaims: []core.PodResourceClaim{{
|
||||
Name: "my-claim",
|
||||
Source: goodClaimSource,
|
||||
Name: "my-claim",
|
||||
ResourceClaimName: &externalClaimName,
|
||||
}, {
|
||||
Name: "my-claim",
|
||||
Source: goodClaimSource,
|
||||
Name: "my-claim",
|
||||
ResourceClaimName: &externalClaimName,
|
||||
}},
|
||||
},
|
||||
"resource claim source empty": {
|
||||
@@ -25968,8 +25961,7 @@ func TestValidateDynamicResourceAllocation(t *testing.T) {
|
||||
RestartPolicy: core.RestartPolicyAlways,
|
||||
DNSPolicy: core.DNSClusterFirst,
|
||||
ResourceClaims: []core.PodResourceClaim{{
|
||||
Name: "my-claim",
|
||||
Source: core.ClaimSource{},
|
||||
Name: "my-claim",
|
||||
}},
|
||||
},
|
||||
"resource claim reference and template": {
|
||||
@@ -25977,11 +25969,9 @@ func TestValidateDynamicResourceAllocation(t *testing.T) {
|
||||
RestartPolicy: core.RestartPolicyAlways,
|
||||
DNSPolicy: core.DNSClusterFirst,
|
||||
ResourceClaims: []core.PodResourceClaim{{
|
||||
Name: "my-claim",
|
||||
Source: core.ClaimSource{
|
||||
ResourceClaimName: &externalClaimName,
|
||||
ResourceClaimTemplateName: &externalClaimTemplateName,
|
||||
},
|
||||
Name: "my-claim",
|
||||
ResourceClaimName: &externalClaimName,
|
||||
ResourceClaimTemplateName: &externalClaimTemplateName,
|
||||
}},
|
||||
},
|
||||
"claim not found": {
|
||||
@@ -25989,8 +25979,8 @@ func TestValidateDynamicResourceAllocation(t *testing.T) {
|
||||
RestartPolicy: core.RestartPolicyAlways,
|
||||
DNSPolicy: core.DNSClusterFirst,
|
||||
ResourceClaims: []core.PodResourceClaim{{
|
||||
Name: "my-claim",
|
||||
Source: goodClaimSource,
|
||||
Name: "my-claim",
|
||||
ResourceClaimName: &externalClaimName,
|
||||
}},
|
||||
},
|
||||
"claim name empty": {
|
||||
@@ -25998,8 +25988,8 @@ func TestValidateDynamicResourceAllocation(t *testing.T) {
|
||||
RestartPolicy: core.RestartPolicyAlways,
|
||||
DNSPolicy: core.DNSClusterFirst,
|
||||
ResourceClaims: []core.PodResourceClaim{{
|
||||
Name: "my-claim",
|
||||
Source: goodClaimSource,
|
||||
Name: "my-claim",
|
||||
ResourceClaimName: &externalClaimName,
|
||||
}},
|
||||
},
|
||||
"pod claim name duplicates": {
|
||||
@@ -26007,8 +25997,8 @@ func TestValidateDynamicResourceAllocation(t *testing.T) {
|
||||
RestartPolicy: core.RestartPolicyAlways,
|
||||
DNSPolicy: core.DNSClusterFirst,
|
||||
ResourceClaims: []core.PodResourceClaim{{
|
||||
Name: "my-claim",
|
||||
Source: goodClaimSource,
|
||||
Name: "my-claim",
|
||||
ResourceClaimName: &externalClaimName,
|
||||
}},
|
||||
},
|
||||
"no claims defined": {
|
||||
@@ -26021,11 +26011,11 @@ func TestValidateDynamicResourceAllocation(t *testing.T) {
|
||||
RestartPolicy: core.RestartPolicyAlways,
|
||||
DNSPolicy: core.DNSClusterFirst,
|
||||
ResourceClaims: []core.PodResourceClaim{{
|
||||
Name: "my-claim",
|
||||
Source: goodClaimSource,
|
||||
Name: "my-claim",
|
||||
ResourceClaimName: &externalClaimName,
|
||||
}, {
|
||||
Name: "my-claim",
|
||||
Source: goodClaimSource,
|
||||
Name: "my-claim",
|
||||
ResourceClaimName: &externalClaimName,
|
||||
}},
|
||||
},
|
||||
"ephemeral container don't support resource requirements": {
|
||||
@@ -26034,20 +26024,20 @@ func TestValidateDynamicResourceAllocation(t *testing.T) {
|
||||
RestartPolicy: core.RestartPolicyAlways,
|
||||
DNSPolicy: core.DNSClusterFirst,
|
||||
ResourceClaims: []core.PodResourceClaim{{
|
||||
Name: "my-claim",
|
||||
Source: goodClaimSource,
|
||||
Name: "my-claim",
|
||||
ResourceClaimName: &externalClaimName,
|
||||
}},
|
||||
},
|
||||
"invalid claim template name": func() core.PodSpec {
|
||||
spec := goodClaimTemplate.DeepCopy()
|
||||
notLabel := ".foo_bar"
|
||||
spec.ResourceClaims[0].Source.ResourceClaimTemplateName = ¬Label
|
||||
spec.ResourceClaims[0].ResourceClaimTemplateName = ¬Label
|
||||
return *spec
|
||||
}(),
|
||||
"invalid claim reference name": func() core.PodSpec {
|
||||
spec := goodClaimReference.DeepCopy()
|
||||
notLabel := ".foo_bar"
|
||||
spec.ResourceClaims[0].Source.ResourceClaimName = ¬Label
|
||||
spec.ResourceClaims[0].ResourceClaimName = ¬Label
|
||||
return *spec
|
||||
}(),
|
||||
}
|
||||
|
37
pkg/apis/core/zz_generated.deepcopy.go
generated
37
pkg/apis/core/zz_generated.deepcopy.go
generated
@@ -440,32 +440,6 @@ func (in *CinderVolumeSource) DeepCopy() *CinderVolumeSource {
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *ClaimSource) DeepCopyInto(out *ClaimSource) {
|
||||
*out = *in
|
||||
if in.ResourceClaimName != nil {
|
||||
in, out := &in.ResourceClaimName, &out.ResourceClaimName
|
||||
*out = new(string)
|
||||
**out = **in
|
||||
}
|
||||
if in.ResourceClaimTemplateName != nil {
|
||||
in, out := &in.ResourceClaimTemplateName, &out.ResourceClaimTemplateName
|
||||
*out = new(string)
|
||||
**out = **in
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClaimSource.
|
||||
func (in *ClaimSource) DeepCopy() *ClaimSource {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(ClaimSource)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *ClientIPConfig) DeepCopyInto(out *ClientIPConfig) {
|
||||
*out = *in
|
||||
@@ -4020,7 +3994,16 @@ func (in *PodReadinessGate) DeepCopy() *PodReadinessGate {
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *PodResourceClaim) DeepCopyInto(out *PodResourceClaim) {
|
||||
*out = *in
|
||||
in.Source.DeepCopyInto(&out.Source)
|
||||
if in.ResourceClaimName != nil {
|
||||
in, out := &in.ResourceClaimName, &out.ResourceClaimName
|
||||
*out = new(string)
|
||||
**out = **in
|
||||
}
|
||||
if in.ResourceClaimTemplateName != nil {
|
||||
in, out := &in.ResourceClaimTemplateName, &out.ResourceClaimTemplateName
|
||||
*out = new(string)
|
||||
**out = **in
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user