1 /* 2 Copyright 2024 The Kubernetes Authors. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package storagemigration 18 19 import ( 20 corev1 "k8s.io/api/core/v1" 21 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 22 ) 23 24 // +genclient 25 // +genclient:nonNamespaced 26 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object 27 // +k8s:prerelease-lifecycle-gen:introduced=1.30 28 29 // StorageVersionMigration represents a migration of stored data to the latest 30 // storage version. 31 type StorageVersionMigration struct { 32 metav1.TypeMeta 33 // Standard object metadata. 34 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata 35 // +optional 36 metav1.ObjectMeta 37 // Specification of the migration. 38 // +optional 39 Spec StorageVersionMigrationSpec 40 // Status of the migration. 41 // +optional 42 Status StorageVersionMigrationStatus 43 } 44 45 // Spec of the storage version migration. 46 type StorageVersionMigrationSpec struct { 47 // The resource that is being migrated. The migrator sends requests to 48 // the endpoint serving the resource. 49 // Immutable. 50 Resource GroupVersionResource 51 // The token used in the list options to get the next chunk of objects 52 // to migrate. When the .status.conditions indicates the migration is 53 // "Running", users can use this token to check the progress of the 54 // migration. 55 // +optional 56 ContinueToken string 57 // TODO: consider recording the storage version hash when the migration 58 // is created. It can avoid races. 59 } 60 61 // The names of the group, the version, and the resource. 62 type GroupVersionResource struct { 63 // The name of the group. 64 Group string 65 // The name of the version. 66 Version string 67 // The name of the resource. 68 Resource string 69 } 70 71 type MigrationConditionType string 72 73 const ( 74 // Indicates that the migration is running. 75 MigrationRunning MigrationConditionType = "Running" 76 // Indicates that the migration has completed successfully. 77 MigrationSucceeded MigrationConditionType = "Succeeded" 78 // Indicates that the migration has failed. 79 MigrationFailed MigrationConditionType = "Failed" 80 ) 81 82 // Describes the state of a migration at a certain point. 83 type MigrationCondition struct { 84 // Type of the condition. 85 Type MigrationConditionType 86 // Status of the condition, one of True, False, Unknown. 87 Status corev1.ConditionStatus 88 // The last time this condition was updated. 89 // +optional 90 LastUpdateTime metav1.Time 91 // The reason for the condition's last transition. 92 // +optional 93 Reason string 94 // A human readable message indicating details about the transition. 95 // +optional 96 Message string 97 } 98 99 // Status of the storage version migration. 100 type StorageVersionMigrationStatus struct { 101 // The latest available observations of the migration's current state. 102 // +patchMergeKey=type 103 // +patchStrategy=merge 104 // +listType=map 105 // +listMapKey=type 106 // +optional 107 Conditions []MigrationCondition 108 // ResourceVersion to compare with the GC cache for performing the migration. 109 // This is the current resource version of given group, version and resource when 110 // kube-controller-manager first observes this StorageVersionMigration resource. 111 ResourceVersion string 112 } 113 114 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object 115 // +k8s:prerelease-lifecycle-gen:introduced=1.30 116 117 // StorageVersionMigrationList is a collection of storage version migrations. 118 type StorageVersionMigrationList struct { 119 metav1.TypeMeta 120 121 // Standard list metadata 122 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata 123 // +optional 124 metav1.ListMeta 125 // Items is the list of StorageVersionMigration 126 // +patchMergeKey=type 127 // +patchStrategy=merge 128 // +listType=map 129 // +listMapKey=type 130 Items []StorageVersionMigration 131 } 132