From 430bd3e323712da97ea5a1df2c5cb797ba652446 Mon Sep 17 00:00:00 2001 From: OmkarDeshpande7 Date: Tue, 15 Sep 2026 22:50:04 +0530 Subject: [PATCH] Add release v0.4.6 --- deploy/00crds.yaml | 208 +++++++++++++++++++++------ deploy/05controller-deployment.yaml | 2 +- deploy/06vpwned-deployment.yaml | 2 +- deploy/07ui-deployment.yaml | 2 +- deploy/installer.yaml | 214 ++++++++++++++++++++++------ releases/v0.4.6.md | 69 +++++++++ 6 files changed, 403 insertions(+), 94 deletions(-) create mode 100644 releases/v0.4.6.md diff --git a/deploy/00crds.yaml b/deploy/00crds.yaml index 9713317..c8c69f5 100644 --- a/deploy/00crds.yaml +++ b/deploy/00crds.yaml @@ -980,13 +980,6 @@ spec: to remove VMware Tools post migration type: boolean type: object - assignedIPsPerVM: - additionalProperties: - type: string - description: |- - AssignedIPsPerVM is a map of VM names to comma-separated assigned IPs for cold migration - Format: {"vm-name": "IP1,IP2,IP3"} where each IP corresponds to a network interface by index - type: object fallbackToDHCP: type: boolean firstBootScript: @@ -1176,11 +1169,6 @@ spec: spec: description: Spec defines the desired state of Migration properties: - assignedIP: - description: |- - AssignedIP is the comma-separated list of user-assigned IPs for cold migration - Format: "IP1,IP2,IP3" where each IP corresponds to a network interface by index - type: string disconnectSourceNetwork: description: |- DisconnectSourceNetwork specifies whether to disconnect the source VM's network interfaces @@ -1304,6 +1292,11 @@ spec: - MappingVolume - RescanningStorage - XCOPYInProgress + - SnapshottingSourceVM + - AttachingDisksToProxy + - IdentifyingBlockDevices + - HotAddTransferInProgress + - HotAddCleanup type: string retryable: description: |- @@ -1391,8 +1384,10 @@ spec: - openstackRef type: object networkMapping: - description: NetworkMapping is the reference to the NetworkMapping - resource that defines source to destination network mappings + description: |- + NetworkMapping is the reference to the NetworkMapping resource that defines source to destination network mappings. + Optional: when the selected VMs have no attached VMware networks, no NetworkMapping is required and this field + may be empty. The controller will skip network reconciliation in that case. type: string osFamily: description: OSFamily is the OS type of the virtual machine @@ -1400,6 +1395,22 @@ spec: - windowsGuest - linuxGuest type: string + proxyVMRef: + description: |- + ProxyVMRef references the ProxyVM to use for HotAdd data copy. + Required when StorageCopyMethod is "HotAdd". + properties: + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + type: string + type: object + x-kubernetes-map-type: atomic source: description: Source is the source details for the virtual machine properties: @@ -1414,10 +1425,11 @@ spec: default: normal description: |- StorageCopyMethod indicates the method to use for storage migration - Valid values: "normal" (default), "StorageAcceleratedCopy" + Valid values: "normal" (default), "StorageAcceleratedCopy", "HotAdd" enum: - normal - StorageAcceleratedCopy + - HotAdd type: string storageMapping: description: |- @@ -1442,7 +1454,6 @@ spec: type: string required: - destination - - networkMapping - source type: object type: object @@ -2032,6 +2043,138 @@ spec: --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.17.1 + name: proxyvms.vjailbreak.k8s.pf9.io +spec: + group: vjailbreak.k8s.pf9.io + names: + kind: ProxyVM + listKind: ProxyVMList + plural: proxyvms + singular: proxyvm + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.vmName + name: VM-Name + type: string + - jsonPath: .status.validationStatus + name: Status + type: string + - jsonPath: .status.ipAddress + name: IP + type: string + - jsonPath: .status.attachedDiskCount + name: Attached-Disks + type: integer + name: v1alpha1 + schema: + openAPIV3Schema: + description: |- + ProxyVM is the Schema for a registered Proxy VM used in Hot-Add data copy migrations. + The controller validates SSH connectivity and required components on the referenced VM. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: ProxyVMSpec defines the desired state of ProxyVM + properties: + vmName: + description: VMName is the display name of the Proxy VM in vCenter. + type: string + vmwareCredsRef: + description: VMwareCredsRef references the VMwareCreds used to locate + and connect to the Proxy VM. + properties: + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + type: string + type: object + x-kubernetes-map-type: atomic + required: + - vmName + - vmwareCredsRef + type: object + status: + description: ProxyVMStatus defines the observed state of ProxyVM + properties: + attachedDiskCount: + description: |- + AttachedDiskCount is the number of source-snapshot disks currently attached + to this Proxy VM across all active Hot-Add migrations. Max 60. + type: integer + componentsVerified: + description: ComponentsVerified lists each required component and + whether it was found. + items: + description: ProxyVMComponentCheck records whether a required component + was found on the Proxy VM. + properties: + message: + description: Message provides detail for missing components. + type: string + name: + description: Name is the component name (e.g. "lsblk", "qemu-nbd", + "sshd"). + type: string + present: + description: Present indicates whether the component was found + in PATH. + type: boolean + required: + - name + - present + type: object + type: array + ipAddress: + description: IPAddress is the IP address discovered from vCenter guest + info. + type: string + lastValidationTime: + description: LastValidationTime records when the last verification + completed. + format: date-time + type: string + validationMessage: + description: ValidationMessage contains a human-readable summary of + the last validation result. + type: string + validationStatus: + description: 'ValidationStatus is one of: Pending, Verifying, Ready, + VerificationFailed.' + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.17.1 @@ -3651,6 +3794,7 @@ rules: - openstackcreds - pcdclusters - pcdhosts + - proxyvms - rdmdisks - rollingmigrationplans - storagemappings @@ -3681,6 +3825,7 @@ rules: - openstackcreds/finalizers - pcdclusters/finalizers - pcdhosts/finalizers + - proxyvms/finalizers - rdmdisks/finalizers - rollingmigrationplans/finalizers - storagemappings/finalizers @@ -3703,6 +3848,7 @@ rules: - openstackcreds/status - pcdclusters/status - pcdhosts/status + - proxyvms/status - rdmdisks/status - rollingmigrationplans/status - storagemappings/status @@ -4680,17 +4826,6 @@ kind: ClusterRole metadata: name: ui-manager-role rules: -- apiGroups: - - "" - resources: - - secrets - verbs: - - create - - delete - - get - - list - - patch - - update - apiGroups: - "" resources: @@ -4703,20 +4838,10 @@ rules: - patch - update - watch -- apiGroups: - - "" - resources: - - pods - verbs: - - get - - list - - watch - - patch - apiGroups: - "" resources: - configmaps/status - - pods/status verbs: - get - apiGroups: @@ -4727,13 +4852,6 @@ rules: - get - list - watch -- apiGroups: - - "" - resources: - - pods/log - verbs: - - get - - list - apiGroups: - vjailbreak.k8s.pf9.io resources: @@ -4750,6 +4868,7 @@ rules: - openstackcreds - pcdclusters - pcdhosts + - proxyvms - rdmdisks - rollingmigrationplans - storagemappings @@ -4782,6 +4901,7 @@ rules: - openstackcreds/finalizers - pcdclusters/finalizers - pcdhosts/finalizers + - proxyvms/finalizers - rdmdisks/finalizers - rollingmigrationplans/finalizers - storagemappings/finalizers diff --git a/deploy/05controller-deployment.yaml b/deploy/05controller-deployment.yaml index 4429505..20951eb 100644 --- a/deploy/05controller-deployment.yaml +++ b/deploy/05controller-deployment.yaml @@ -41,7 +41,7 @@ spec: envFrom: - configMapRef: name: pf9-env - image: quay.io/platform9/vjailbreak-controller:v0.4.5 + image: quay.io/platform9/vjailbreak-controller:v0.4.6 imagePullPolicy: IfNotPresent lifecycle: preStop: diff --git a/deploy/06vpwned-deployment.yaml b/deploy/06vpwned-deployment.yaml index 53c56f9..ee6b8a3 100644 --- a/deploy/06vpwned-deployment.yaml +++ b/deploy/06vpwned-deployment.yaml @@ -27,7 +27,7 @@ spec: - envFrom: - configMapRef: name: pf9-env - image: quay.io/platform9/vjailbreak-vpwned:v0.4.5 + image: quay.io/platform9/vjailbreak-vpwned:v0.4.6 imagePullPolicy: IfNotPresent name: vpwned ports: diff --git a/deploy/07ui-deployment.yaml b/deploy/07ui-deployment.yaml index ee521c9..adce031 100644 --- a/deploy/07ui-deployment.yaml +++ b/deploy/07ui-deployment.yaml @@ -24,7 +24,7 @@ spec: serviceAccountName: ui-manager-sa containers: - name: vjailbreak-ui-container - image: quay.io/platform9/vjailbreak-ui:v0.4.5 + image: quay.io/platform9/vjailbreak-ui:v0.4.6 imagePullPolicy: IfNotPresent ports: - containerPort: 80 diff --git a/deploy/installer.yaml b/deploy/installer.yaml index 75e5fb0..692c588 100644 --- a/deploy/installer.yaml +++ b/deploy/installer.yaml @@ -980,13 +980,6 @@ spec: to remove VMware Tools post migration type: boolean type: object - assignedIPsPerVM: - additionalProperties: - type: string - description: |- - AssignedIPsPerVM is a map of VM names to comma-separated assigned IPs for cold migration - Format: {"vm-name": "IP1,IP2,IP3"} where each IP corresponds to a network interface by index - type: object fallbackToDHCP: type: boolean firstBootScript: @@ -1176,11 +1169,6 @@ spec: spec: description: Spec defines the desired state of Migration properties: - assignedIP: - description: |- - AssignedIP is the comma-separated list of user-assigned IPs for cold migration - Format: "IP1,IP2,IP3" where each IP corresponds to a network interface by index - type: string disconnectSourceNetwork: description: |- DisconnectSourceNetwork specifies whether to disconnect the source VM's network interfaces @@ -1304,6 +1292,11 @@ spec: - MappingVolume - RescanningStorage - XCOPYInProgress + - SnapshottingSourceVM + - AttachingDisksToProxy + - IdentifyingBlockDevices + - HotAddTransferInProgress + - HotAddCleanup type: string retryable: description: |- @@ -1391,8 +1384,10 @@ spec: - openstackRef type: object networkMapping: - description: NetworkMapping is the reference to the NetworkMapping - resource that defines source to destination network mappings + description: |- + NetworkMapping is the reference to the NetworkMapping resource that defines source to destination network mappings. + Optional: when the selected VMs have no attached VMware networks, no NetworkMapping is required and this field + may be empty. The controller will skip network reconciliation in that case. type: string osFamily: description: OSFamily is the OS type of the virtual machine @@ -1400,6 +1395,22 @@ spec: - windowsGuest - linuxGuest type: string + proxyVMRef: + description: |- + ProxyVMRef references the ProxyVM to use for HotAdd data copy. + Required when StorageCopyMethod is "HotAdd". + properties: + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + type: string + type: object + x-kubernetes-map-type: atomic source: description: Source is the source details for the virtual machine properties: @@ -1414,10 +1425,11 @@ spec: default: normal description: |- StorageCopyMethod indicates the method to use for storage migration - Valid values: "normal" (default), "StorageAcceleratedCopy" + Valid values: "normal" (default), "StorageAcceleratedCopy", "HotAdd" enum: - normal - StorageAcceleratedCopy + - HotAdd type: string storageMapping: description: |- @@ -1442,7 +1454,6 @@ spec: type: string required: - destination - - networkMapping - source type: object type: object @@ -2032,6 +2043,138 @@ spec: --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.17.1 + name: proxyvms.vjailbreak.k8s.pf9.io +spec: + group: vjailbreak.k8s.pf9.io + names: + kind: ProxyVM + listKind: ProxyVMList + plural: proxyvms + singular: proxyvm + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.vmName + name: VM-Name + type: string + - jsonPath: .status.validationStatus + name: Status + type: string + - jsonPath: .status.ipAddress + name: IP + type: string + - jsonPath: .status.attachedDiskCount + name: Attached-Disks + type: integer + name: v1alpha1 + schema: + openAPIV3Schema: + description: |- + ProxyVM is the Schema for a registered Proxy VM used in Hot-Add data copy migrations. + The controller validates SSH connectivity and required components on the referenced VM. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: ProxyVMSpec defines the desired state of ProxyVM + properties: + vmName: + description: VMName is the display name of the Proxy VM in vCenter. + type: string + vmwareCredsRef: + description: VMwareCredsRef references the VMwareCreds used to locate + and connect to the Proxy VM. + properties: + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + type: string + type: object + x-kubernetes-map-type: atomic + required: + - vmName + - vmwareCredsRef + type: object + status: + description: ProxyVMStatus defines the observed state of ProxyVM + properties: + attachedDiskCount: + description: |- + AttachedDiskCount is the number of source-snapshot disks currently attached + to this Proxy VM across all active Hot-Add migrations. Max 60. + type: integer + componentsVerified: + description: ComponentsVerified lists each required component and + whether it was found. + items: + description: ProxyVMComponentCheck records whether a required component + was found on the Proxy VM. + properties: + message: + description: Message provides detail for missing components. + type: string + name: + description: Name is the component name (e.g. "lsblk", "qemu-nbd", + "sshd"). + type: string + present: + description: Present indicates whether the component was found + in PATH. + type: boolean + required: + - name + - present + type: object + type: array + ipAddress: + description: IPAddress is the IP address discovered from vCenter guest + info. + type: string + lastValidationTime: + description: LastValidationTime records when the last verification + completed. + format: date-time + type: string + validationMessage: + description: ValidationMessage contains a human-readable summary of + the last validation result. + type: string + validationStatus: + description: 'ValidationStatus is one of: Pending, Verifying, Ready, + VerificationFailed.' + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.17.1 @@ -3651,6 +3794,7 @@ rules: - openstackcreds - pcdclusters - pcdhosts + - proxyvms - rdmdisks - rollingmigrationplans - storagemappings @@ -3681,6 +3825,7 @@ rules: - openstackcreds/finalizers - pcdclusters/finalizers - pcdhosts/finalizers + - proxyvms/finalizers - rdmdisks/finalizers - rollingmigrationplans/finalizers - storagemappings/finalizers @@ -3703,6 +3848,7 @@ rules: - openstackcreds/status - pcdclusters/status - pcdhosts/status + - proxyvms/status - rdmdisks/status - rollingmigrationplans/status - storagemappings/status @@ -4592,7 +4738,7 @@ spec: envFrom: - configMapRef: name: pf9-env - image: quay.io/platform9/vjailbreak-controller:v0.4.5 + image: quay.io/platform9/vjailbreak-controller:v0.4.6 imagePullPolicy: IfNotPresent lifecycle: preStop: @@ -4686,7 +4832,7 @@ spec: - envFrom: - configMapRef: name: pf9-env - image: quay.io/platform9/vjailbreak-vpwned:v0.4.5 + image: quay.io/platform9/vjailbreak-vpwned:v0.4.6 imagePullPolicy: IfNotPresent name: vpwned ports: @@ -4775,7 +4921,7 @@ spec: serviceAccountName: ui-manager-sa containers: - name: vjailbreak-ui-container - image: quay.io/platform9/vjailbreak-ui:v0.4.5 + image: quay.io/platform9/vjailbreak-ui:v0.4.6 imagePullPolicy: IfNotPresent ports: - containerPort: 80 @@ -4896,17 +5042,6 @@ kind: ClusterRole metadata: name: ui-manager-role rules: -- apiGroups: - - "" - resources: - - secrets - verbs: - - create - - delete - - get - - list - - patch - - update - apiGroups: - "" resources: @@ -4919,20 +5054,10 @@ rules: - patch - update - watch -- apiGroups: - - "" - resources: - - pods - verbs: - - get - - list - - watch - - patch - apiGroups: - "" resources: - configmaps/status - - pods/status verbs: - get - apiGroups: @@ -4943,13 +5068,6 @@ rules: - get - list - watch -- apiGroups: - - "" - resources: - - pods/log - verbs: - - get - - list - apiGroups: - vjailbreak.k8s.pf9.io resources: @@ -4966,6 +5084,7 @@ rules: - openstackcreds - pcdclusters - pcdhosts + - proxyvms - rdmdisks - rollingmigrationplans - storagemappings @@ -4998,6 +5117,7 @@ rules: - openstackcreds/finalizers - pcdclusters/finalizers - pcdhosts/finalizers + - proxyvms/finalizers - rdmdisks/finalizers - rollingmigrationplans/finalizers - storagemappings/finalizers diff --git a/releases/v0.4.6.md b/releases/v0.4.6.md new file mode 100644 index 0000000..7cb83f4 --- /dev/null +++ b/releases/v0.4.6.md @@ -0,0 +1,69 @@ +# v0.4.6 + +- **Tag:** `v0.4.6` +- **Published:** 2026-06-11T05:42:35Z +- **Source release:** https://github.com/platform9/vjailbreak/releases/tag/v0.4.6 + +## Release Notes + +## What's Changed +* [1822] Removed redundant field (AssignedIP) by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/1899 +* [1907] Fix: fetch single VMwareMachine instead of entire list in migration detail query by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/1903 +* [1241] Disable port security on migrated ports when no security group is selected while migration by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/1892 +* #1822: Display All VM IP Addresses in Migration Details Page (Assigned & Preserved IPs) by @AbhijeetThakur in https://github.com/platform9/vjailbreak/pull/1911 +* [1897] Feat: Add controller logs button to topbar in UI by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/1896 +* docs(CLAUDE.md): add unit test requirements for Claude-written code by @OmkarDeshpande7 in https://github.com/platform9/vjailbreak/pull/1917 +* [1830] Fix: Include RBAC-shared security groups in destination tenant security group list by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/1910 +* [1925] ci: Shift nightly build trigger to 01:00 IST by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/1924 +* [1920] Added warnings for selected VMs with missing IPs by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/1918 +* [1913] Fix: Skip VMwareMachine reconciliation for migrated VMs by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/1912 +* #973: Verify vCenter FQDN DNS resolution by @AbhijeetThakur in https://github.com/platform9/vjailbreak/pull/1928 +* [1931] feat: Add debug bundle collection with resources and logs for easier troubleshooting by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/1929 +* Bug: Filter Flavor Selection on AZ and flavours without AZ by @spai-p9 in https://github.com/platform9/vjailbreak/pull/1916 +* [1840] Added the ability to migrate the VMs with no interface by @meghansh-pf9 in https://github.com/platform9/vjailbreak/pull/1927 +* Updating the compute api version to support multi-attach volumes by @meghansh-pf9 in https://github.com/platform9/vjailbreak/pull/1932 +* [1921] feat: Show revalidation progress on Credentials page by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/1919 +* [1890] agent dns config by @OmkarDeshpande7 in https://github.com/platform9/vjailbreak/pull/1937 +* [1888] refactor: Remove direct pod permissions by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/1935 +* [1938] Support VMs with space in their name by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/1936 +* [1933] Don't restart ui when listing users by @spai-p9 in https://github.com/platform9/vjailbreak/pull/1939 +* [1796] Optimising the copy changed blocks mechanism for faster sync by @meghansh-pf9 in https://github.com/platform9/vjailbreak/pull/1934 +* #587: UI refactor migration by @AbhijeetThakur in https://github.com/platform9/vjailbreak/pull/1960 +* #1940: Block v2v pod creation or disable start migration if vddk is not uploaded by @AbhijeetThakur in https://github.com/platform9/vjailbreak/pull/1969 +* #1873: Block security group selection during scaling L2 Agent by @AbhijeetThakur in https://github.com/platform9/vjailbreak/pull/1962 +* [1803] fix: Added retry for transient API errors by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/1958 +* [1961] fix: Handle transient vCenter errors during VM power-off by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/1973 +* [1610] Fix VMware Tools cleanup for Linux/SUSE VMs by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/1968 +* [1482] Adding hot add proxy by @meghansh-pf9 in https://github.com/platform9/vjailbreak/pull/1964 +* [1978] Sles LVM Minitrd fix by @meghansh-pf9 in https://github.com/platform9/vjailbreak/pull/1976 +* #1971: UI hot add proxy migration complete UI requirements by @AbhijeetThakur in https://github.com/platform9/vjailbreak/pull/1981 +* UI E2E testcases with mock data using playwright by @AbhijeetThakur in https://github.com/platform9/vjailbreak/pull/1972 +* Fix cluster conversion issues by @geet-pf9 in https://github.com/platform9/vjailbreak/pull/1984 +* [1990] Fix boot device index parse failure due to mixed guestfish stderr/stdout by @OmkarDeshpande7 in https://github.com/platform9/vjailbreak/pull/1993 +* Hypervisor resmgr role Cluster Conversion by @OmkarDeshpande7 in https://github.com/platform9/vjailbreak/pull/1997 +* #1999: Security group warning should be visible for Use security group of primary vJB vm by @AbhijeetThakur in https://github.com/platform9/vjailbreak/pull/2000 +* [2004] Fix SLED OS detection and broaden SSH key format support by @meghansh-pf9 in https://github.com/platform9/vjailbreak/pull/2003 +* [2002] fix- Cant upload key Invalid key error for RSA key by @AbhijeetThakur in https://github.com/platform9/vjailbreak/pull/2006 +* [2009] Unified logs icons and aligned migration name across logs drawer and details by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2008 +* Update CRD for v0.4.6 by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2017 + + +## Highlights +**Hot Add Proxy**: Hot-Add Proxy is an advanced data copy method that attaches source VM disks directly to a dedicated Proxy VM and streams the data over NBD (Network Block Device) to the destination. Instead of copying data over the NFC protocol from ESXi. This feature is currently in beta, will be stabilized in the coming releases. + +**Migration Reliability**: + - VMs with no network interfaces can now be migrated successfully. + - Multi-attach volume types are now supported for migration. + +**Enhanced UX**: +- All IP addresses (assigned and preserved) are now shown on the Migration Details page in the UI. +- Controller logs (migration controller manager) are visible in the UI irrespective of any migrations triggered. +- A debug bundle collection button makes log and resource gathering easier for troubleshooting. All CRs related to that migration are now gathered for easier debugging. + + +## Known Limitations +- Migrations of VMs with grub version lower than 2 might face issues while booting post migration. + + + +**Full Changelog**: https://github.com/platform9/vjailbreak/compare/v0.4.5...v0.4.6