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

* Add support for archive upload Signed-off-by: Shelly Kagan <skagan@redhat.com> * fix golang errors Signed-off-by: Shelly Kagan <skagan@redhat.com> * Change storage profile property set to support more then one set So far CDI supported only 1 claim propery set. We want to be able to support more then one so in case the user provides to the DV storage volumeMode without accessMode or vice versa cdi will be able to fit to it the most appropriate match. Added to rook ceph block a second default of filesystem volume mode with RWO access mode, it will support archive upload which has default of filesystem mode. Signed-off-by: Shelly Kagan <skagan@redhat.com> * CR fix - change to one endpoint for the user upload proxy will identify if the upload is archive or not by looking at the content type annotation on the pvc. If the content type is archive it will route the uplaod to upload server to a new archive upload uri. Signed-off-by: Shelly Kagan <skagan@redhat.com> * Add storage profile and data volume controllers unit tests Signed-off-by: Shelly Kagan <skagan@redhat.com> * CR fixes * add default volume mode to archive content type * upload server use data processor for archive upload * tests for volume mode with archive content type * tests for archive upload of compressed tar Signed-off-by: Shelly Kagan <skagan@redhat.com> * Adjust imports acording to new apis dir Signed-off-by: Shelly Kagan <skagan@redhat.com> * CR small fixes Signed-off-by: Shelly Kagan <skagan@redhat.com>
269 lines
12 KiB
Go
269 lines
12 KiB
Go
package common
|
|
|
|
import (
|
|
"time"
|
|
|
|
v1 "k8s.io/api/core/v1"
|
|
)
|
|
|
|
// Common types and constants used by the importer and controller.
|
|
// TODO: maybe the vm cloner can use these common values
|
|
|
|
const (
|
|
// CDILabelKey provides a constant for CDI PVC labels
|
|
CDILabelKey = "app"
|
|
// CDILabelValue provides a constant for CDI PVC label values
|
|
CDILabelValue = "containerized-data-importer"
|
|
// CDILabelSelector provides a constant to use for the selector to identify CDI objects in list
|
|
CDILabelSelector = CDILabelKey + "=" + CDILabelValue
|
|
|
|
// CDIComponentLabel can be added to all CDI resources
|
|
CDIComponentLabel = "cdi.kubevirt.io"
|
|
|
|
// AppKubernetesPartOfLabel is the Kubernetes recommended part-of label
|
|
AppKubernetesPartOfLabel = "app.kubernetes.io/part-of"
|
|
// AppKubernetesVersionLabel is the Kubernetes recommended version label
|
|
AppKubernetesVersionLabel = "app.kubernetes.io/version"
|
|
// AppKubernetesManagedByLabel is the Kubernetes recommended managed-by label
|
|
AppKubernetesManagedByLabel = "app.kubernetes.io/managed-by"
|
|
// AppKubernetesComponentLabel is the Kubernetes recommended component label
|
|
AppKubernetesComponentLabel = "app.kubernetes.io/component"
|
|
|
|
// PrometheusLabelKey provides the label to indicate prometheus metrics are available in the pods.
|
|
PrometheusLabelKey = "prometheus.cdi.kubevirt.io"
|
|
// PrometheusLabelValue provides the label value which shouldn't be empty to avoid a prometheus WIP issue.
|
|
PrometheusLabelValue = "true"
|
|
// PrometheusServiceName is the name of the prometheus service created by the operator.
|
|
PrometheusServiceName = "cdi-prometheus-metrics"
|
|
|
|
// UploadTargetLabel has the UID of upload target PVC
|
|
UploadTargetLabel = CDIComponentLabel + "/uploadTarget"
|
|
|
|
// ImporterVolumePath provides a constant for the directory where the PV is mounted.
|
|
ImporterVolumePath = "/data"
|
|
// DiskImageName provides a constant for our importer/datastream_ginkgo_test and to build ImporterWritePath
|
|
DiskImageName = "disk.img"
|
|
// ImporterWritePath provides a constant for the cmd/cdi-importer/importer.go executable
|
|
ImporterWritePath = ImporterVolumePath + "/" + DiskImageName
|
|
// WriteBlockPath provides a constant for the path where the PV is mounted.
|
|
WriteBlockPath = "/dev/cdi-block-volume"
|
|
// NbdkitLogPath provides a constant for the path in which the nbdkit log messages are stored.
|
|
NbdkitLogPath = "/tmp/nbdkit.log"
|
|
// PodTerminationMessageFile is the name of the file to write the termination message to.
|
|
PodTerminationMessageFile = "/dev/termination-log"
|
|
// ImporterPodName provides a constant to use as a prefix for Pods created by CDI (controller only)
|
|
ImporterPodName = "importer"
|
|
// ImporterDataDir provides a constant for the controller pkg to use as a hardcoded path to where content is transferred to/from (controller only)
|
|
ImporterDataDir = "/data"
|
|
// ScratchDataDir provides a constant for the controller pkg to use as a hardcoded path to where scratch space is located.
|
|
ScratchDataDir = "/scratch"
|
|
// ImporterS3Host provides an S3 string used by importer/dataStream.go only
|
|
ImporterS3Host = "s3.amazonaws.com"
|
|
// ImporterCertDir is where the configmap containing certs will be mounted
|
|
ImporterCertDir = "/certs"
|
|
// DefaultPullPolicy imports k8s "IfNotPresent" string for the import_controller_gingko_test and the cdi-controller executable
|
|
DefaultPullPolicy = string(v1.PullIfNotPresent)
|
|
// ImportProxyConfigMapName provides the name of the ConfigMap in the cdi namespace containing a CA certificate bundle
|
|
ImportProxyConfigMapName = "trusted-ca-proxy-bundle-cm"
|
|
// ImportProxyConfigMapKey provides the key name of the ConfigMap in the cdi namespace containing a CA certificate bundle
|
|
ImportProxyConfigMapKey = "ca.pem"
|
|
// ImporterProxyCertDir is where the configmap containing proxy certs will be mounted
|
|
ImporterProxyCertDir = "/proxycerts/"
|
|
|
|
// PullPolicy provides a constant to capture our env variable "PULL_POLICY" (only used by cmd/cdi-controller/controller.go)
|
|
PullPolicy = "PULL_POLICY"
|
|
// ImporterSource provides a constant to capture our env variable "IMPORTER_SOURCE"
|
|
ImporterSource = "IMPORTER_SOURCE"
|
|
// ImporterContentType provides a constant to capture our env variable "IMPORTER_CONTENTTYPE"
|
|
ImporterContentType = "IMPORTER_CONTENTTYPE"
|
|
// ImporterEndpoint provides a constant to capture our env variable "IMPORTER_ENDPOINT"
|
|
ImporterEndpoint = "IMPORTER_ENDPOINT"
|
|
// ImporterAccessKeyID provides a constant to capture our env variable "IMPORTER_ACCES_KEY_ID"
|
|
ImporterAccessKeyID = "IMPORTER_ACCESS_KEY_ID"
|
|
// ImporterSecretKey provides a constant to capture our env variable "IMPORTER_SECRET_KEY"
|
|
ImporterSecretKey = "IMPORTER_SECRET_KEY"
|
|
// ImporterImageSize provides a constant to capture our env variable "IMPORTER_IMAGE_SIZE"
|
|
ImporterImageSize = "IMPORTER_IMAGE_SIZE"
|
|
// ImporterCertDirVar provides a constant to capture our env variable "IMPORTER_CERT_DIR"
|
|
ImporterCertDirVar = "IMPORTER_CERT_DIR"
|
|
// InsecureTLSVar provides a constant to capture our env variable "INSECURE_TLS"
|
|
InsecureTLSVar = "INSECURE_TLS"
|
|
// ImporterDiskID provides a constant to capture our env variable "IMPORTER_DISK_ID"
|
|
ImporterDiskID = "IMPORTER_DISK_ID"
|
|
// ImporterUUID provides a constant to capture our env variable "IMPORTER_UUID"
|
|
ImporterUUID = "IMPORTER_UUID"
|
|
// ImporterReadyFile provides a constant to capture our env variable "IMPORTER_READY_FILE"
|
|
ImporterReadyFile = "IMPORTER_READY_FILE"
|
|
// ImporterDoneFile provides a constant to capture our env variable "IMPORTER_DONE_FILE"
|
|
ImporterDoneFile = "IMPORTER_DONE_FILE"
|
|
// ImporterBackingFile provides a constant to capture our env variable "IMPORTER_BACKING_FILE"
|
|
ImporterBackingFile = "IMPORTER_BACKING_FILE"
|
|
// ImporterThumbprint provides a constant to capture our env variable "IMPORTER_THUMBPRINT"
|
|
ImporterThumbprint = "IMPORTER_THUMBPRINT"
|
|
// ImporterCurrentCheckpoint provides a constant to capture our env variable "IMPORTER_CURRENT_CHECKPOINT"
|
|
ImporterCurrentCheckpoint = "IMPORTER_CURRENT_CHECKPOINT"
|
|
// ImporterPreviousCheckpoint provides a constant to capture our env variable "IMPORTER_PREVIOUS_CHECKPOINT"
|
|
ImporterPreviousCheckpoint = "IMPORTER_PREVIOUS_CHECKPOINT"
|
|
// ImporterFinalCheckpoint provides a constant to capture our env variable "IMPORTER_FINAL_CHECKPOINT"
|
|
ImporterFinalCheckpoint = "IMPORTER_FINAL_CHECKPOINT"
|
|
// Preallocation provides a constant to capture out env variable "PREALLOCATION"
|
|
Preallocation = "PREALLOCATION"
|
|
// ImportProxyHTTP provides a constant to capture our env variable "HTTP_PROXY"
|
|
ImportProxyHTTP = "HTTP_PROXY"
|
|
// ImportProxyHTTPS provides a constant to capture our env variable "HTTPS_PROXY"
|
|
ImportProxyHTTPS = "HTTPS_PROXY"
|
|
// ImportProxyNoProxy provides a constant to capture our env variable "NO_PROXY"
|
|
ImportProxyNoProxy = "NO_PROXY"
|
|
// ImporterProxyCertDirVar provides a constant to capture our env variable "IMPORTER_PROXY_CERT_DIR"
|
|
ImporterProxyCertDirVar = "IMPORTER_PROXY_CERT_DIR"
|
|
// InstallerPartOfLabel provides a constant to capture our env variable "INSTALLER_PART_OF_LABEL"
|
|
InstallerPartOfLabel = "INSTALLER_PART_OF_LABEL"
|
|
// InstallerVersionLabel provides a constant to capture our env variable "INSTALLER_VERSION_LABEL"
|
|
InstallerVersionLabel = "INSTALLER_VERSION_LABEL"
|
|
|
|
// CloningLabelValue provides a constant to use as a label value for pod affinity (controller pkg only)
|
|
CloningLabelValue = "host-assisted-cloning"
|
|
// CloningTopologyKey (controller pkg only)
|
|
CloningTopologyKey = "kubernetes.io/hostname"
|
|
// ClonerSourcePodName (controller pkg only)
|
|
ClonerSourcePodName = "cdi-clone-source"
|
|
// ClonerMountPath (controller pkg only)
|
|
ClonerMountPath = "/var/run/cdi/clone/source"
|
|
// ClonerSourcePodNameSuffix (controller pkg only)
|
|
ClonerSourcePodNameSuffix = "-source-pod"
|
|
|
|
// KubeVirtAnnKey is part of a kubevirt.io key.
|
|
KubeVirtAnnKey = "kubevirt.io/"
|
|
// CDIAnnKey is part of a kubevirt.io key.
|
|
CDIAnnKey = "cdi.kubevirt.io/"
|
|
|
|
// SmartClonerCDILabel is the label applied to resources created by the smart-clone controller
|
|
SmartClonerCDILabel = "cdi-smart-clone"
|
|
|
|
// UploadServerCDILabel is the label applied to upload server resources
|
|
UploadServerCDILabel = "cdi-upload-server"
|
|
// UploadServerPodname is name of the upload server pod container
|
|
UploadServerPodname = UploadServerCDILabel
|
|
// UploadServerDataDir is the destination directoryfor uploads
|
|
UploadServerDataDir = ImporterDataDir
|
|
// UploadServerServiceLabel is the label selector for upload server services
|
|
UploadServerServiceLabel = "service"
|
|
// UploadImageSize provides a constant to capture our env variable "UPLOAD_IMAGE_SIZE"
|
|
UploadImageSize = "UPLOAD_IMAGE_SIZE"
|
|
|
|
// FilesystemOverheadVar provides a constant to capture our env variable "FILESYSTEM_OVERHEAD"
|
|
FilesystemOverheadVar = "FILESYSTEM_OVERHEAD"
|
|
// DefaultGlobalOverhead is the amount of space reserved on Filesystem volumes by default
|
|
DefaultGlobalOverhead = "0.055"
|
|
|
|
// ConfigName is the name of default CDI Config
|
|
ConfigName = "config"
|
|
|
|
// OwnerUID provides the UID of the owner entity (either PVC or DV)
|
|
OwnerUID = "OWNER_UID"
|
|
|
|
// KeyAccess provides a constant to the accessKeyId label using in controller pkg and transport_test.go
|
|
KeyAccess = "accessKeyId"
|
|
// KeySecret provides a constant to the secretKey label using in controller pkg and transport_test.go
|
|
KeySecret = "secretKey"
|
|
|
|
// DefaultResyncPeriod sets a 10 minute resync period, used in the controller pkg and the controller cmd executable
|
|
DefaultResyncPeriod = 10 * time.Minute
|
|
// InsecureRegistryConfigMap is the name of the ConfigMap for insecure registries
|
|
InsecureRegistryConfigMap = "cdi-insecure-registries"
|
|
|
|
// ScratchSpaceNeededExitCode is the exit code that indicates the importer pod requires scratch space to function properly.
|
|
ScratchSpaceNeededExitCode = 42
|
|
|
|
// ScratchNameSuffix (controller pkg only)
|
|
ScratchNameSuffix = "scratch"
|
|
|
|
// UploadTokenIssuer is the JWT issuer of upload tokens
|
|
UploadTokenIssuer = "cdi-apiserver"
|
|
|
|
// CloneTokenIssuer is the JWT issuer for clone tokens
|
|
CloneTokenIssuer = "cdi-apiserver"
|
|
|
|
// ExtendedCloneTokenIssuer is the JWT issuer for clone tokens
|
|
ExtendedCloneTokenIssuer = "cdi-deployment"
|
|
|
|
// QemuSubGid is the gid used as the qemu group in fsGroup
|
|
QemuSubGid = int64(107)
|
|
|
|
// ControllerServiceAccountName is the name of the CDI controller service account
|
|
ControllerServiceAccountName = "cdi-sa"
|
|
|
|
// VddkConfigMap is the name of the ConfigMap with a reference to the VDDK image
|
|
VddkConfigMap = "v2v-vmware"
|
|
// VddkConfigDataKey is the name of the ConfigMap key of the VDDK image reference
|
|
VddkConfigDataKey = "vddk-init-image"
|
|
// AwaitingVDDK is a Pending condition reason that indicates the PVC is waiting for a VDDK image
|
|
AwaitingVDDK = "AwaitingVDDK"
|
|
|
|
// UploadContentTypeHeader is the header upload clients may use to set the content type explicitly
|
|
UploadContentTypeHeader = "x-cdi-content-type"
|
|
|
|
// FilesystemCloneContentType is the content type when cloning a filesystem
|
|
FilesystemCloneContentType = "filesystem-clone"
|
|
|
|
// BlockdeviceClone is the content type when cloning a block device
|
|
BlockdeviceClone = "blockdevice-clone"
|
|
|
|
// UploadPathSync is the path to POST CDI uploads
|
|
UploadPathSync = "/v1beta1/upload"
|
|
|
|
// UploadPathAsync is the path to POST CDI uploads in async mode
|
|
UploadPathAsync = "/v1beta1/upload-async"
|
|
|
|
// UploadArchivePath is the path to POST CDI archive uploads
|
|
UploadArchivePath = "/v1beta1/upload-archive"
|
|
|
|
// UploadArchiveAlphaPath is the path to POST CDI alpha archive uploads
|
|
UploadArchiveAlphaPath = "/v1alpha1/upload-archive"
|
|
|
|
// UploadFormSync is the path to POST CDI uploads as form data
|
|
UploadFormSync = "/v1beta1/upload-form"
|
|
|
|
// UploadFormAsync is the path to POST CDI uploads as form data in async mode
|
|
UploadFormAsync = "/v1beta1/upload-form-async"
|
|
|
|
// PreallocationApplied is a string inserted into importer's/uploader's exit message
|
|
PreallocationApplied = "Preallocation applied"
|
|
)
|
|
|
|
// ProxyPaths are all supported paths
|
|
var ProxyPaths = append(
|
|
append(SyncUploadPaths, AsyncUploadPaths...),
|
|
append(SyncUploadFormPaths, AsyncUploadFormPaths...)...,
|
|
)
|
|
|
|
// SyncUploadPaths are paths to POST CDI uploads
|
|
var SyncUploadPaths = []string{
|
|
UploadPathSync,
|
|
"/v1alpha1/upload",
|
|
}
|
|
|
|
// AsyncUploadPaths are paths to POST CDI uploads in async mode
|
|
var AsyncUploadPaths = []string{
|
|
UploadPathAsync,
|
|
"/v1alpha1/upload-async",
|
|
}
|
|
|
|
// ArchiveUploadPaths are paths to POST CDI uploads of archive
|
|
var ArchiveUploadPaths = []string{
|
|
UploadArchivePath,
|
|
UploadArchiveAlphaPath,
|
|
}
|
|
|
|
// SyncUploadFormPaths are paths to POST CDI uploads as form data
|
|
var SyncUploadFormPaths = []string{
|
|
UploadFormSync,
|
|
"/v1alpha1/upload-form",
|
|
}
|
|
|
|
// AsyncUploadFormPaths are paths to POST CDI uploads as form data in async mode
|
|
var AsyncUploadFormPaths = []string{
|
|
UploadFormAsync,
|
|
"/v1alpha1/upload-form-async",
|
|
}
|