diff --git a/Makefile b/Makefile index a93539c8..7d9ba6f8 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ all: fmt check # Always keep the last released version here -VERSION_REPLACES ?= v0.3.0 +VERSION_REPLACES ?= v0.3.1 VERSION ?= v0.0.1 export VERSION := $(VERSION) diff --git a/README.md b/README.md index 45e99ff6..0bd20837 100644 --- a/README.md +++ b/README.md @@ -17,8 +17,8 @@ TARGET_NAMESPACE=YOUR_DESIRED_NAMESPACE make gen-manifests Deploy vm-import-operator resources: ```bash -kubectl apply -f https://github.com/kubevirt/vm-import-operator/releases/download/v0.3.0/operator.yaml -kubectl apply -f https://github.com/kubevirt/vm-import-operator/releases/download/v0.3.0/vmimportconfig_cr.yaml +kubectl apply -f https://github.com/kubevirt/vm-import-operator/releases/download/v0.3.1/operator.yaml +kubectl apply -f https://github.com/kubevirt/vm-import-operator/releases/download/v0.3.1/vmimportconfig_cr.yaml ``` # Import virtual machine from oVirt diff --git a/manifests/vm-import-operator/v0.3.1/namespace.yaml b/manifests/vm-import-operator/v0.3.1/namespace.yaml new file mode 100644 index 00000000..fd9fad63 --- /dev/null +++ b/manifests/vm-import-operator/v0.3.1/namespace.yaml @@ -0,0 +1,5 @@ +--- +apiVersion: v1 +kind: Namespace +metadata: + name: kubevirt-hyperconverged diff --git a/manifests/vm-import-operator/v0.3.1/operator.yaml b/manifests/vm-import-operator/v0.3.1/operator.yaml new file mode 100644 index 00000000..4a1ff24b --- /dev/null +++ b/manifests/vm-import-operator/v0.3.1/operator.yaml @@ -0,0 +1,209 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + labels: + operator.v2v.kubevirt.io: "" + name: vmimportconfigs.v2v.kubevirt.io +spec: + group: v2v.kubevirt.io + names: + categories: + - all + kind: VMImportConfig + listKind: VMImportConfigList + plural: vmimportconfigs + singular: vmimportconfig + scope: Cluster + versions: + - name: v1beta1 + served: true + storage: true + subresources: + status: {} + schema: + openAPIV3Schema: + description: VMImportConfig is the Schema for the vmimportconfigs API + properties: + apiVersion: + description: APIVersion defines the versioned schema of this representation + of an object + type: string + kind: + description: Kind is a string value representing the REST resource this + object represents + type: string + metadata: + type: object + spec: + description: VMImportConfigSpec defines the desired state of VMImportConfig + properties: + imagePullPolicy: + description: "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images" + enum: + - Always + - IfNotPresent + - Never + type: string + type: object + status: + description: VMImportConfigStatus defines the observed state of VMImportConfig + properties: + conditions: + description: A list of current conditions of the VMImportConfig resource + items: + properties: + lastHeartbeatTime: + description: Last time the state of the condition was checked + format: date-time + type: string + lastTransitionTime: + description: Last time the state of the condition changed + format: date-time + type: string + message: + description: Message related to the last condition change + type: string + reason: + description: Reason the last condition changed + type: string + status: + description: Current status of the condition, True, False, Unknown + type: string + type: + description: ConditionType is the state of the operator's reconciliation functionality. + type: string + type: object + type: array + observedVersion: + description: The observed version of the VMImportConfig resource + type: string + operatorVersion: + description: The version of the VMImportConfig resource as defined by + the operator + type: string + targetVersion: + description: The desired version of the VMImportConfig resource + type: string + phase: + description: Phase is the current phase of the VMImportConfig deployment + type: string + type: object + type: object +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: vm-import-operator + namespace: kubevirt-hyperconverged + +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + creationTimestamp: null + name: vm-import-operator +rules: +- apiGroups: + - "" + resources: + - pods + - events + - configmaps + - secrets + - serviceaccounts + - services + verbs: + - '*' +- apiGroups: + - apps + resources: + - deployments + - deployments/finalizers + verbs: + - '*' +- apiGroups: + - v2v.kubevirt.io + resources: + - vmimportconfigs + - vmimportconfigs/finalizers + - vmimportconfigs/status + verbs: + - '*' +- apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - '*' +- apiGroups: + - rbac.authorization.k8s.io + resources: + - clusterrolebindings + - clusterroles + verbs: + - '*' +- apiGroups: + - monitoring.coreos.com + resources: + - servicemonitors + verbs: + - '*' +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: vm-import-operator +roleRef: + kind: ClusterRole + name: vm-import-operator + apiGroup: rbac.authorization.k8s.io +subjects: +- kind: ServiceAccount + name: vm-import-operator + namespace: kubevirt-hyperconverged + +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: vm-import-operator + namespace: kubevirt-hyperconverged +spec: + replicas: 1 + selector: + matchLabels: + name: vm-import-operator + template: + metadata: + labels: + name: vm-import-operator + spec: + serviceAccountName: vm-import-operator + containers: + - name: vm-import-operator + # Replace this with the built image name + image: quay.io/kubevirt/vm-import-operator:v0.3.1 + command: + - vm-import-operator + imagePullPolicy: Always + env: + - name: WATCH_NAMESPACE + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: OPERATOR_NAME + value: "vm-import-operator" + - name: DEPLOY_CLUSTER_RESOURCES + value: "true" + - name: OPERATOR_VERSION + value: v0.3.1 + - name: CONTROLLER_IMAGE + value: quay.io/kubevirt/vm-import-controller:v0.3.1 + - name: VIRTV2V_IMAGE + value: quay.io/kubevirt/vm-import-virtv2v:v0.3.1 + - name: PULL_POLICY + value: Always + - name: MONITORING_NAMESPACE + value: openshift-monitoring diff --git a/manifests/vm-import-operator/v0.3.1/vm-import-operator.0.3.1.clusterserviceversion.yaml b/manifests/vm-import-operator/v0.3.1/vm-import-operator.0.3.1.clusterserviceversion.yaml new file mode 100644 index 00000000..6e625820 --- /dev/null +++ b/manifests/vm-import-operator/v0.3.1/vm-import-operator.0.3.1.clusterserviceversion.yaml @@ -0,0 +1,199 @@ +--- +apiVersion: operators.coreos.com/v1alpha1 +kind: ClusterServiceVersion +metadata: + annotations: + alm-examples: |2- + + [ + { + "apiVersion":"v2v.kubevirt.io/v1beta1", + "kind":"VMImportConfig", + "metadata": { + "name":"vm-import-operator-config" + }, + "spec": { + "imagePullPolicy":"IfNotPresent" + } + } + ] + capabilities: Virtual Machine Import + categories: Import,Virtualization, RHV + name: vm-import-operator.0.3.1 + namespace: kubevirt-hyperconverged +spec: + apiservicedefinitions: {} + customresourcedefinitions: + owned: + - description: Represents a virtual machine import config + displayName: Virtual Machine import config + kind: VMImportConfig + name: vmimportconfigs.v2v.kubevirt.io + specDescriptors: + - description: The ImageRegistry to use for vm import. + displayName: ImageRegistry + path: imageRegistry + x-descriptors: + - urn:alm:descriptor:text + - description: The ImageTag to use for vm import. + displayName: ImageTag + path: imageTag + x-descriptors: + - urn:alm:descriptor:text + - description: The ImagePullPolicy to use for vm import. + displayName: ImagePullPolicy + path: imagePullPolicy + x-descriptors: + - urn:alm:descriptor:io.kubernetes:imagePullPolicy + statusDescriptors: + - description: The deployment phase. + displayName: Phase + path: phase + x-descriptors: + - urn:alm:descriptor:io.kubernetes.phase + - description: Explanation for the current status of the vm import deployment. + displayName: Conditions + path: conditions + x-descriptors: + - urn:alm:descriptor:io.kubernetes.conditions + - description: The observed version of the vm import deployment. + displayName: Observed vm import Version + path: observedVersion + x-descriptors: + - urn:alm:descriptor:text + - description: The targeted version of the vm import deployment. + displayName: Target vm import Version + path: targetVersion + x-descriptors: + - urn:alm:descriptor:text + - description: The version of the vm import Operator + displayName: Vm import Operator Version + path: operatorVersion + x-descriptors: + - urn:alm:descriptor:text + version: v1beta1 + description: VM import operator provides ability to import virtual machines from other infrastructure like oVirt/RHV + displayName: VM import operator + install: + spec: + clusterPermissions: + - rules: + - apiGroups: + - "" + resources: + - pods + - events + - configmaps + - secrets + - serviceaccounts + - services + - services/finalizers + verbs: + - '*' + - apiGroups: + - apps + resources: + - deployments + - deployments/finalizers + verbs: + - '*' + - apiGroups: + - v2v.kubevirt.io + resources: + - vmimportconfigs + - vmimportconfigs/finalizers + - vmimportconfigs/status + verbs: + - '*' + - apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - '*' + - apiGroups: + - rbac.authorization.k8s.io + resources: + - clusterrolebindings + - clusterroles + verbs: + - '*' + - apiGroups: + - monitoring.coreos.com + resources: + - servicemonitors + verbs: + - '*' + serviceAccountName: vm-import-operator + deployments: + - name: vm-import-operator + spec: + replicas: 1 + selector: + matchLabels: + name: vm-import-operator + operator.v2v.kubevirt.io: "" + strategy: {} + template: + metadata: + labels: + name: vm-import-operator + operator.v2v.kubevirt.io: "" + spec: + containers: + - env: + - name: DEPLOY_CLUSTER_RESOURCES + value: "true" + - name: OPERATOR_VERSION + value: v0.3.1 + - name: CONTROLLER_IMAGE + value: quay.io/kubevirt/vm-import-controller:v0.3.1 + - name: PULL_POLICY + value: Always + - name: WATCH_NAMESPACE + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: MONITORING_NAMESPACE + value: openshift-monitoring + - name: VIRTV2V_IMAGE + value: quay.io/kubevirt/vm-import-virtv2v:v0.3.1 + image: quay.io/kubevirt/vm-import-operator:v0.3.1 + imagePullPolicy: Always + name: vm-import-operator + resources: {} + securityContext: + runAsNonRoot: true + serviceAccountName: vm-import-operator + strategy: deployment + installModes: + - supported: true + type: OwnNamespace + - supported: true + type: SingleNamespace + - supported: true + type: AllNamespaces + keywords: + - Import + - Virtualization + - oVirt + - RHV + labels: + operated-by: vm-import-operator + links: + - name: VM import operator + url: https://github.com/kubevirt/vm-import-operator/blob/master/README.md + - name: Source Code + url: https://github.com/kubevirt/vm-import-operator + maintainers: + - email: kubevirt-dev@googlegroups.com + name: KubeVirt project + maturity: alpha + provider: + name: KubeVirt project + replaces: 0.3.0 + selector: + matchLabels: + operated-by: vm-import-operator + version: 0.3.1 diff --git a/manifests/vm-import-operator/v0.3.1/vmimportconfig_cr.yaml b/manifests/vm-import-operator/v0.3.1/vmimportconfig_cr.yaml new file mode 100644 index 00000000..317f7fd6 --- /dev/null +++ b/manifests/vm-import-operator/v0.3.1/vmimportconfig_cr.yaml @@ -0,0 +1,7 @@ +--- +apiVersion: v2v.kubevirt.io/v1beta1 +kind: VMImportConfig +metadata: + name: vm-import-operator-config +spec: + imagePullPolicy: IfNotPresent diff --git a/version/description b/version/description index 6d2b7b4a..f5178faf 100644 --- a/version/description +++ b/version/description @@ -1,35 +1,14 @@ -v0.3.0 - -Adds support for Warm Import of vSphere VMs. +v0.3.1 Features: -* Base Dockerfiles on ubi/go-toolset:1.14.12 -* Update to CDI 1.27.0 -* Add support for Warm Import -* Validate the target VM name -* Pin gorilla/websocket to 1.4.2 -* Replace Kubevirt client with controller-runtime client in tests -* Allow explicit AccessMode mapping in the oVirt provider -* Add optional AccessMode to StorageResourceMappingItem -* Add CreateVMSnapshot to Provider interface +* Add annotation to retain the v2v pod after success +* Propagate network annotations to DataVolumes Bugs: -* sigs.k8s.io/controller-runtime/pkg/runtime/* packages are deprecated, and were moved to new pathes. -* Don't stop VM for warm imports until finalization -* Update Network Mapping validation for duplicates -* Fix erroneous test failures caused by lingering resources -* Throw a validation error if a VM with the given name exists -* Requeque when VMI not yet created -* Fix typo in VM validation for NUMA -* vSphere: Gracefully shutdown vSphere VMs -* vSphere: Don't add interfaces for unmapped networks -* vSphere: find a desktop template if there are no server templates -* vSphere: always map machine type to q35 -* vSphere: use VM UUID and disk key to name DataVolumes -* vSphere: should look for a small template for the given OS first -* oVirt: mapper should not set memory limits -* oVirt: use 'scsi' bus for disks with the 'virtio_scsi' type - -Docs: -* Add documentation for Access Mode and Volume Mode -* Add vSphere resource mapping documentation. +* Fix warm import finalization edge case +* Validate that VMWare Tools are present +* Use VMI UID instead of vSphere UUID to name DVs +* Add overhead to requested size when creating DVs +* Fail the import if the target VM is gone +* Mount block devices properly on the virt-v2v container +* Fail import when V2V overlays can't be committed. diff --git a/version/version.go b/version/version.go index 3aca22e8..b5d1bf72 100644 --- a/version/version.go +++ b/version/version.go @@ -2,5 +2,5 @@ package version var ( // Version represents the version of the operator - Version = "v0.3.0" + Version = "v0.3.1" )