diff --git a/api/runtime/hooks/v1alpha1/inplaceupdate_types.go b/api/runtime/hooks/v1alpha1/inplaceupdate_types.go new file mode 100644 index 000000000000..78d609fab453 --- /dev/null +++ b/api/runtime/hooks/v1alpha1/inplaceupdate_types.go @@ -0,0 +1,133 @@ +/* +Copyright 2025 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + runtimecatalog "sigs.k8s.io/cluster-api/exp/runtime/catalog" +) + +// CanUpdateMachineRequest is the request of the CanUpdateMachine hook. +// This hook is called to determine if an extension can handle specific changes. +// +kubebuilder:object:root=true +type CanUpdateMachineRequest struct { + metav1.TypeMeta `json:",inline"` + + // CommonRequest contains fields common to all request types. + CommonRequest `json:",inline"` + + // changes is a list of field paths that need to be updated on the machine. + // Examples: ["spec.version", "spec.infrastructureRef.spec.memoryMiB"] + // +required + Changes []string `json:"changes"` +} + +var _ ResponseObject = &CanUpdateMachineResponse{} + +// CanUpdateMachineResponse is the response of the CanUpdateMachine hook. +// +kubebuilder:object:root=true +type CanUpdateMachineResponse struct { + metav1.TypeMeta `json:",inline"` + + // CommonResponse contains Status and Message fields common to all response types. + CommonResponse `json:",inline"` + + // acceptedChanges is the subset of requested changes that this extension can handle. + // If empty, the extension cannot handle any of the requested changes. + // +optional + AcceptedChanges []string `json:"acceptedChanges,omitempty"` +} + +// CanUpdateMachine is the hook that will be called to determine if an extension +// can handle specific machine changes for in-place updates. +func CanUpdateMachine(*CanUpdateMachineRequest, *CanUpdateMachineResponse) {} + +// UpdateMachineRequest is the request of the UpdateMachine hook. +// This hook is called to perform the actual in-place update on a machine. +// +kubebuilder:object:root=true +type UpdateMachineRequest struct { + metav1.TypeMeta `json:",inline"` + + // CommonRequest contains fields common to all request types. + CommonRequest `json:",inline"` + + // machineRef is a reference to the machine object the in-place update hook corresponds to. + // Updaters should fetch the latest machine state using this reference. + // +required + MachineRef ObjectReference `json:"machineRef"` +} + +var _ RetryResponseObject = &UpdateMachineResponse{} + +// UpdateMachineResponse is the response of the UpdateMachine hook. +// The status of the update operation is determined by the CommonRetryResponse fields: +// - Status=Success + RetryAfterSeconds > 0: update is in progress +// - Status=Success + RetryAfterSeconds = 0: update completed successfully +// - Status=Failure: update failed +// +kubebuilder:object:root=true +type UpdateMachineResponse struct { + metav1.TypeMeta `json:",inline"` + + // CommonRetryResponse contains Status, Message and RetryAfterSeconds fields. + CommonRetryResponse `json:",inline"` +} + +// ObjectReference represents a reference to a Kubernetes object. +type ObjectReference struct { + // name is the name of the referenced object. + // +required + Name string `json:"name"` + + // namespace is the namespace of the referenced object. + // +required + Namespace string `json:"namespace"` +} + +// UpdateMachine is the hook that will be called to perform in-place updates on a machine. +// This hook should be idempotent and can be called multiple times for the same machine +// until it reports Done or Failed status. +func UpdateMachine(*UpdateMachineRequest, *UpdateMachineResponse) {} + +func init() { + catalogBuilder.RegisterHook(CanUpdateMachine, &runtimecatalog.HookMeta{ + Tags: []string{"In-Place Update Hooks"}, + Summary: "Cluster API Runtime will call this hook to determine if an extension can handle specific machine changes", + Description: "Called during update planning to determine if an extension can handle machine changes. " + + "The extension should respond with the subset of changes it can handle for in-place updates.\n" + + "\n" + + "Notes:\n" + + "- This hook is called during the planning phase of updates\n" + + "- The request contains a list of required changes (field paths)\n" + + "- Extensions should return only the changes they can confidently handle\n" + + "- If no extension can cover all changes, CAPI will fallback to rolling updates\n", + }) + + catalogBuilder.RegisterHook(UpdateMachine, &runtimecatalog.HookMeta{ + Tags: []string{"In-Place Update Hooks"}, + Summary: "Cluster API Runtime will call this hook to perform in-place updates on a machine", + Description: "Cluster API Runtime will call this hook to perform the actual in-place update on a machine. " + + "The hook will be called repeatedly until it reports Done or Failed status.\n" + + "\n" + + "Notes:\n" + + "- This hook must be idempotent - it can be called multiple times for the same machine\n" + + "- Extensions should fetch the latest machine state using the provided reference\n" + + "- The hook should return InProgress status while the update is ongoing\n" + + "- Use RetryAfterSeconds to control polling frequency\n" + + "- The hook should perform updates based on the current machine spec\n", + }) +} diff --git a/api/runtime/hooks/v1alpha1/zz_generated.deepcopy.go b/api/runtime/hooks/v1alpha1/zz_generated.deepcopy.go index ce59d1aedec7..bbdc4c7c589d 100644 --- a/api/runtime/hooks/v1alpha1/zz_generated.deepcopy.go +++ b/api/runtime/hooks/v1alpha1/zz_generated.deepcopy.go @@ -366,6 +366,66 @@ func (in *Builtins) DeepCopy() *Builtins { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CanUpdateMachineRequest) DeepCopyInto(out *CanUpdateMachineRequest) { + *out = *in + out.TypeMeta = in.TypeMeta + in.CommonRequest.DeepCopyInto(&out.CommonRequest) + if in.Changes != nil { + in, out := &in.Changes, &out.Changes + *out = make([]string, len(*in)) + copy(*out, *in) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CanUpdateMachineRequest. +func (in *CanUpdateMachineRequest) DeepCopy() *CanUpdateMachineRequest { + if in == nil { + return nil + } + out := new(CanUpdateMachineRequest) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *CanUpdateMachineRequest) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CanUpdateMachineResponse) DeepCopyInto(out *CanUpdateMachineResponse) { + *out = *in + out.TypeMeta = in.TypeMeta + out.CommonResponse = in.CommonResponse + if in.AcceptedChanges != nil { + in, out := &in.AcceptedChanges, &out.AcceptedChanges + *out = make([]string, len(*in)) + copy(*out, *in) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CanUpdateMachineResponse. +func (in *CanUpdateMachineResponse) DeepCopy() *CanUpdateMachineResponse { + if in == nil { + return nil + } + out := new(CanUpdateMachineResponse) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *CanUpdateMachineResponse) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ClusterBuiltins) DeepCopyInto(out *ClusterBuiltins) { *out = *in @@ -975,6 +1035,72 @@ func (in *MachinePoolBuiltins) DeepCopy() *MachinePoolBuiltins { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ObjectReference) DeepCopyInto(out *ObjectReference) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ObjectReference. +func (in *ObjectReference) DeepCopy() *ObjectReference { + if in == nil { + return nil + } + out := new(ObjectReference) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *UpdateMachineRequest) DeepCopyInto(out *UpdateMachineRequest) { + *out = *in + out.TypeMeta = in.TypeMeta + in.CommonRequest.DeepCopyInto(&out.CommonRequest) + out.MachineRef = in.MachineRef +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UpdateMachineRequest. +func (in *UpdateMachineRequest) DeepCopy() *UpdateMachineRequest { + if in == nil { + return nil + } + out := new(UpdateMachineRequest) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *UpdateMachineRequest) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *UpdateMachineResponse) DeepCopyInto(out *UpdateMachineResponse) { + *out = *in + out.TypeMeta = in.TypeMeta + out.CommonRetryResponse = in.CommonRetryResponse +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UpdateMachineResponse. +func (in *UpdateMachineResponse) DeepCopy() *UpdateMachineResponse { + if in == nil { + return nil + } + out := new(UpdateMachineResponse) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *UpdateMachineResponse) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ValidateTopologyRequest) DeepCopyInto(out *ValidateTopologyRequest) { *out = *in diff --git a/api/runtime/hooks/v1alpha1/zz_generated.openapi.go b/api/runtime/hooks/v1alpha1/zz_generated.openapi.go index e72d12416126..f2b1ee297815 100644 --- a/api/runtime/hooks/v1alpha1/zz_generated.openapi.go +++ b/api/runtime/hooks/v1alpha1/zz_generated.openapi.go @@ -41,6 +41,8 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "sigs.k8s.io/cluster-api/api/runtime/hooks/v1alpha1.BeforeClusterUpgradeRequest": schema_api_runtime_hooks_v1alpha1_BeforeClusterUpgradeRequest(ref), "sigs.k8s.io/cluster-api/api/runtime/hooks/v1alpha1.BeforeClusterUpgradeResponse": schema_api_runtime_hooks_v1alpha1_BeforeClusterUpgradeResponse(ref), "sigs.k8s.io/cluster-api/api/runtime/hooks/v1alpha1.Builtins": schema_api_runtime_hooks_v1alpha1_Builtins(ref), + "sigs.k8s.io/cluster-api/api/runtime/hooks/v1alpha1.CanUpdateMachineRequest": schema_api_runtime_hooks_v1alpha1_CanUpdateMachineRequest(ref), + "sigs.k8s.io/cluster-api/api/runtime/hooks/v1alpha1.CanUpdateMachineResponse": schema_api_runtime_hooks_v1alpha1_CanUpdateMachineResponse(ref), "sigs.k8s.io/cluster-api/api/runtime/hooks/v1alpha1.ClusterBuiltins": schema_api_runtime_hooks_v1alpha1_ClusterBuiltins(ref), "sigs.k8s.io/cluster-api/api/runtime/hooks/v1alpha1.ClusterNetworkBuiltins": schema_api_runtime_hooks_v1alpha1_ClusterNetworkBuiltins(ref), "sigs.k8s.io/cluster-api/api/runtime/hooks/v1alpha1.ClusterTopologyBuiltins": schema_api_runtime_hooks_v1alpha1_ClusterTopologyBuiltins(ref), @@ -67,6 +69,9 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "sigs.k8s.io/cluster-api/api/runtime/hooks/v1alpha1.MachineDeploymentBuiltins": schema_api_runtime_hooks_v1alpha1_MachineDeploymentBuiltins(ref), "sigs.k8s.io/cluster-api/api/runtime/hooks/v1alpha1.MachineInfrastructureRefBuiltins": schema_api_runtime_hooks_v1alpha1_MachineInfrastructureRefBuiltins(ref), "sigs.k8s.io/cluster-api/api/runtime/hooks/v1alpha1.MachinePoolBuiltins": schema_api_runtime_hooks_v1alpha1_MachinePoolBuiltins(ref), + "sigs.k8s.io/cluster-api/api/runtime/hooks/v1alpha1.ObjectReference": schema_api_runtime_hooks_v1alpha1_ObjectReference(ref), + "sigs.k8s.io/cluster-api/api/runtime/hooks/v1alpha1.UpdateMachineRequest": schema_api_runtime_hooks_v1alpha1_UpdateMachineRequest(ref), + "sigs.k8s.io/cluster-api/api/runtime/hooks/v1alpha1.UpdateMachineResponse": schema_api_runtime_hooks_v1alpha1_UpdateMachineResponse(ref), "sigs.k8s.io/cluster-api/api/runtime/hooks/v1alpha1.ValidateTopologyRequest": schema_api_runtime_hooks_v1alpha1_ValidateTopologyRequest(ref), "sigs.k8s.io/cluster-api/api/runtime/hooks/v1alpha1.ValidateTopologyRequestItem": schema_api_runtime_hooks_v1alpha1_ValidateTopologyRequestItem(ref), "sigs.k8s.io/cluster-api/api/runtime/hooks/v1alpha1.ValidateTopologyResponse": schema_api_runtime_hooks_v1alpha1_ValidateTopologyResponse(ref), @@ -759,6 +764,124 @@ func schema_api_runtime_hooks_v1alpha1_Builtins(ref common.ReferenceCallback) co } } +func schema_api_runtime_hooks_v1alpha1_CanUpdateMachineRequest(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CanUpdateMachineRequest is the request of the CanUpdateMachine hook. This hook is called to determine if an extension can handle specific changes.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "settings": { + SchemaProps: spec.SchemaProps{ + Description: "settings defines key value pairs to be passed to the call.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "changes": { + SchemaProps: spec.SchemaProps{ + Description: "changes is a list of field paths that need to be updated on the machine. Examples: [\"spec.version\", \"spec.infrastructureRef.spec.memoryMiB\"]", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"changes"}, + }, + }, + } +} + +func schema_api_runtime_hooks_v1alpha1_CanUpdateMachineResponse(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CanUpdateMachineResponse is the response of the CanUpdateMachine hook.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "status of the call. One of \"Success\" or \"Failure\".\n\nPossible enum values:\n - `\"Failure\"` represents a failure response.\n - `\"Success\"` represents a success response.", + Default: "", + Type: []string{"string"}, + Format: "", + Enum: []interface{}{"Failure", "Success"}, + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "message is a human-readable description of the status of the call.", + Type: []string{"string"}, + Format: "", + }, + }, + "acceptedChanges": { + SchemaProps: spec.SchemaProps{ + Description: "acceptedChanges is the subset of requested changes that this extension can handle. If empty, the extension cannot handle any of the requested changes.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"status"}, + }, + }, + } +} + func schema_api_runtime_hooks_v1alpha1_ClusterBuiltins(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ @@ -1871,6 +1994,141 @@ func schema_api_runtime_hooks_v1alpha1_MachinePoolBuiltins(ref common.ReferenceC } } +func schema_api_runtime_hooks_v1alpha1_ObjectReference(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ObjectReference represents a reference to a Kubernetes object.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "name is the name of the referenced object.", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "namespace": { + SchemaProps: spec.SchemaProps{ + Description: "namespace is the namespace of the referenced object.", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"name", "namespace"}, + }, + }, + } +} + +func schema_api_runtime_hooks_v1alpha1_UpdateMachineRequest(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "UpdateMachineRequest is the request of the UpdateMachine hook. This hook is called to perform the actual in-place update on a machine.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "settings": { + SchemaProps: spec.SchemaProps{ + Description: "settings defines key value pairs to be passed to the call.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "machineRef": { + SchemaProps: spec.SchemaProps{ + Description: "machineRef is a reference to the machine object the in-place update hook corresponds to. Updaters should fetch the latest machine state using this reference.", + Default: map[string]interface{}{}, + Ref: ref("sigs.k8s.io/cluster-api/api/runtime/hooks/v1alpha1.ObjectReference"), + }, + }, + }, + Required: []string{"machineRef"}, + }, + }, + Dependencies: []string{ + "sigs.k8s.io/cluster-api/api/runtime/hooks/v1alpha1.ObjectReference"}, + } +} + +func schema_api_runtime_hooks_v1alpha1_UpdateMachineResponse(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "UpdateMachineResponse is the response of the UpdateMachine hook. The status of the update operation is determined by the CommonRetryResponse fields: - Status=Success + RetryAfterSeconds > 0: update is in progress - Status=Success + RetryAfterSeconds = 0: update completed successfully - Status=Failure: update failed", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "status of the call. One of \"Success\" or \"Failure\".\n\nPossible enum values:\n - `\"Failure\"` represents a failure response.\n - `\"Success\"` represents a success response.", + Default: "", + Type: []string{"string"}, + Format: "", + Enum: []interface{}{"Failure", "Success"}, + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "message is a human-readable description of the status of the call.", + Type: []string{"string"}, + Format: "", + }, + }, + "retryAfterSeconds": { + SchemaProps: spec.SchemaProps{ + Description: "retryAfterSeconds when set to a non-zero value signifies that the hook will be called again at a future time.", + Default: 0, + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"status", "retryAfterSeconds"}, + }, + }, + } +} + func schema_api_runtime_hooks_v1alpha1_ValidateTopologyRequest(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{