// Module included in the following assemblies: // // * virt/virtual_machines/virt-export-vms.adoc :_mod-docs-content-type: PROCEDURE [id="virt-creating-virtualmachineexport_{context}"] = Creating a VirtualMachineExport custom resource You can create a `VirtualMachineExport` custom resource (CR) to export the following objects: * Virtual machine (VM): Exports the persistent volume claims (PVCs) of a specified VM. * VM snapshot: Exports PVCs contained in a `VirtualMachineSnapshot` CR. * PVC: Exports a PVC. If the PVC is used by another pod, such as the `virt-launcher` pod, the export remains in a `Pending` state until the PVC is no longer in use. The `VirtualMachineExport` CR creates internal and external links for the exported volumes. Internal links are valid within the cluster. External links can be accessed by using an `Ingress` or `Route`. The export server supports the following file formats: * `raw`: Raw disk image file. * `gzip`: Compressed disk image file. * `dir`: PVC directory and files. * `tar.gz`: Compressed PVC file. .Prerequisites * The VM must be shut down for a VM export. .Procedure . Create a `VirtualMachineExport` manifest to export a volume from a `VirtualMachine`, `VirtualMachineSnapshot`, or `PersistentVolumeClaim` CR according to the following example and save it as `example-export.yaml`: + .`VirtualMachineExport` example [source,yaml] ---- apiVersion: export.kubevirt.io/v1beta1 kind: VirtualMachineExport metadata: name: example-export spec: source: apiGroup: "kubevirt.io" <1> kind: VirtualMachine <2> name: example-vm ttlDuration: 1h <3> ---- <1> Specify the appropriate API group: + * `"kubevirt.io"` for `VirtualMachine`. * `"snapshot.kubevirt.io"` for `VirtualMachineSnapshot`. * `""` for `PersistentVolumeClaim`. <2> Specify `VirtualMachine`, `VirtualMachineSnapshot`, or `PersistentVolumeClaim`. <3> Optional. The default duration is 2 hours. . Create the `VirtualMachineExport` CR: + [source,terminal] ---- $ oc create -f example-export.yaml ---- . Get the `VirtualMachineExport` CR: + [source,terminal] ---- $ oc get vmexport example-export -o yaml ---- + The internal and external links for the exported volumes are displayed in the `status` stanza: + .Output example [source,yaml] ---- apiVersion: export.kubevirt.io/v1beta1 kind: VirtualMachineExport metadata: name: example-export namespace: example spec: source: apiGroup: "" kind: PersistentVolumeClaim name: example-pvc tokenSecretRef: example-token status: conditions: - lastProbeTime: null lastTransitionTime: "2022-06-21T14:10:09Z" reason: podReady status: "True" type: Ready - lastProbeTime: null lastTransitionTime: "2022-06-21T14:09:02Z" reason: pvcBound status: "True" type: PVCReady links: external: <1> cert: |- -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- volumes: - formats: - format: raw url: https://vmexport-proxy.test.net/api/export.kubevirt.io/v1beta1/namespaces/example/virtualmachineexports/example-export/volumes/example-disk/disk.img - format: gzip url: https://vmexport-proxy.test.net/api/export.kubevirt.io/v1beta1/namespaces/example/virtualmachineexports/example-export/volumes/example-disk/disk.img.gz name: example-disk internal: <2> cert: |- -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- volumes: - formats: - format: raw url: https://virt-export-example-export.example.svc/volumes/example-disk/disk.img - format: gzip url: https://virt-export-example-export.example.svc/volumes/example-disk/disk.img.gz name: example-disk phase: Ready serviceName: virt-export-example-export ---- <1> External links are accessible from outside the cluster by using an `Ingress` or `Route`. <2> Internal links are only valid inside the cluster.