mirror of
https://github.com/kubevirt/containerized-data-importer.git
synced 2025-06-03 06:30:22 +00:00

* Handle labels length correctly Signed-off-by: Bartosz Rybacki <brybacki@redhat.com> * Handle service name generation correctly Signed-off-by: Bartosz Rybacki <brybacki@redhat.com> * Remove not needed labels Signed-off-by: Bartosz Rybacki <brybacki@redhat.com> * Store import pod name in annotation Signed-off-by: Bartosz Rybacki <brybacki@redhat.com> * Enable long DV name Signed-off-by: Bartosz Rybacki <brybacki@redhat.com> * Handle name with dot when creating service/label name Signed-off-by: Bartosz Rybacki <brybacki@redhat.com> * Test long names on import, upload and clone Signed-off-by: Bartosz Rybacki <brybacki@redhat.com> * Store upload pod name in annotation Signed-off-by: Bartosz Rybacki <brybacki@redhat.com> * Store importer scratch pvc name in annotation Signed-off-by: Bartosz Rybacki <brybacki@redhat.com> * Quick fix for tests (need improvements) Signed-off-by: Bartosz Rybacki <brybacki@redhat.com> * Cleanup handling scratch name Signed-off-by: Bartosz Rybacki <brybacki@redhat.com> * Ensure pod/service name conflicts are handled Signed-off-by: Bartosz Rybacki <brybacki@redhat.com> * Handle client errors when trying to get the import pod Signed-off-by: Bartosz Rybacki <brybacki@redhat.com> * Style improvements, and other code review fixes. Signed-off-by: Bartosz Rybacki <brybacki@redhat.com> * Store clone source pod name in an annotation Signed-off-by: Bartosz Rybacki <brybacki@redhat.com> * Correct name initialization and tests Signed-off-by: Bartosz Rybacki <brybacki@redhat.com> * Do not init name if pod already exists. It is not needed. The situation of having a pod but not name on annotation can happen after the upgrade, when we have a legacy pvc and pod already existing, but clone operation not finished. But when we already have the pod, then in the code (currently) we do not need the name from annotation. Signed-off-by: Bartosz Rybacki <brybacki@redhat.com> * Cleanup scratch name handling Signed-off-by: Bartosz Rybacki <brybacki@redhat.com> * Use constant for max dv name in validation Signed-off-by: Bartosz Rybacki <brybacki@redhat.com> * Simplify clone source pod name initialization Signed-off-by: Bartosz Rybacki <brybacki@redhat.com>
72 lines
2.6 KiB
Go
72 lines
2.6 KiB
Go
package utils
|
|
|
|
import (
|
|
k8sv1 "k8s.io/api/core/v1"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/client-go/kubernetes"
|
|
|
|
cdiuploadv1alpha1 "kubevirt.io/containerized-data-importer/pkg/apis/upload/v1alpha1"
|
|
cdiClientset "kubevirt.io/containerized-data-importer/pkg/client/clientset/versioned"
|
|
"kubevirt.io/containerized-data-importer/pkg/util/naming"
|
|
)
|
|
|
|
const (
|
|
// UploadFile is the file to upload
|
|
UploadFile = "./images/tinyCore.iso"
|
|
|
|
// UploadFileSize is the size of UploadFile
|
|
UploadFileSize = 18874368
|
|
|
|
// UploadFileMD5 is the expected MD5 of the uploaded file
|
|
UploadFileMD5 = "2a7a52285c846314d1dbd79e9818270d"
|
|
|
|
// UploadFileMD5100kbytes is the size of the image after being extended
|
|
UploadFileMD5100kbytes = "3710416a680523c7d07538cb1026c60c"
|
|
|
|
uploadTargetAnnotation = "cdi.kubevirt.io/storage.upload.target"
|
|
uploadStatusAnnotation = "cdi.kubevirt.io/storage.pod.phase"
|
|
uploadReadyAnnotation = "cdi.kubevirt.io/storage.pod.ready"
|
|
)
|
|
|
|
// UploadPodName returns the name of the upload server pod associated with a PVC
|
|
func UploadPodName(pvc *k8sv1.PersistentVolumeClaim) string {
|
|
return naming.GetResourceName("cdi-upload", pvc.Name)
|
|
}
|
|
|
|
// UploadPVCDefinition creates a PVC with the upload target annotation
|
|
func UploadPVCDefinition() *k8sv1.PersistentVolumeClaim {
|
|
annotations := map[string]string{uploadTargetAnnotation: ""}
|
|
return NewPVCDefinition("upload-test", "1Gi", annotations, nil)
|
|
}
|
|
|
|
// UploadBlockPVCDefinition creates a PVC with the upload target annotation for block PV
|
|
func UploadBlockPVCDefinition(storageClass string) *k8sv1.PersistentVolumeClaim {
|
|
annotations := map[string]string{uploadTargetAnnotation: ""}
|
|
return NewBlockPVCDefinition("upload-test", "500Mi", annotations, nil, storageClass)
|
|
}
|
|
|
|
// WaitPVCUploadPodStatusRunning waits for the upload server pod status annotation to be Running
|
|
func WaitPVCUploadPodStatusRunning(clientSet *kubernetes.Clientset, pvc *k8sv1.PersistentVolumeClaim) (bool, error) {
|
|
return WaitForPVCAnnotationWithValue(clientSet, pvc.Namespace, pvc, uploadStatusAnnotation, string(k8sv1.PodRunning))
|
|
}
|
|
|
|
// RequestUploadToken sends an upload token request to the server
|
|
func RequestUploadToken(clientSet *cdiClientset.Clientset, pvc *k8sv1.PersistentVolumeClaim) (string, error) {
|
|
request := &cdiuploadv1alpha1.UploadTokenRequest{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Name: "test-token",
|
|
Namespace: pvc.Namespace,
|
|
},
|
|
Spec: cdiuploadv1alpha1.UploadTokenRequestSpec{
|
|
PvcName: pvc.Name,
|
|
},
|
|
}
|
|
|
|
response, err := clientSet.UploadV1alpha1().UploadTokenRequests(pvc.Namespace).Create(request)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return response.Status.Token, nil
|
|
}
|