Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b4d65e549e | ||
|
|
f42e7a3eeb | ||
|
|
430bd3e323 | ||
|
|
eebd715455 |
+662
-48
@@ -878,6 +878,356 @@ spec:
|
|||||||
---
|
---
|
||||||
apiVersion: apiextensions.k8s.io/v1
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
kind: CustomResourceDefinition
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
controller-gen.kubebuilder.io/version: v0.17.1
|
||||||
|
name: migrationblueprints.vjailbreak.k8s.pf9.io
|
||||||
|
spec:
|
||||||
|
group: vjailbreak.k8s.pf9.io
|
||||||
|
names:
|
||||||
|
kind: MigrationBlueprint
|
||||||
|
listKind: MigrationBlueprintList
|
||||||
|
plural: migrationblueprints
|
||||||
|
singular: migrationblueprint
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- additionalPrinterColumns:
|
||||||
|
- jsonPath: .spec.displayName
|
||||||
|
name: Display Name
|
||||||
|
type: string
|
||||||
|
- jsonPath: .spec.vmwareRef
|
||||||
|
name: Source
|
||||||
|
type: string
|
||||||
|
- jsonPath: .spec.pcdRef
|
||||||
|
name: Destination
|
||||||
|
type: string
|
||||||
|
- jsonPath: .metadata.creationTimestamp
|
||||||
|
name: Age
|
||||||
|
type: date
|
||||||
|
name: v1alpha1
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
description: |-
|
||||||
|
MigrationBlueprint is the Schema for the migrationblueprints API. It stores a
|
||||||
|
reusable, named migration configuration that the UI presents as a "Migration
|
||||||
|
Template": users save a configuration once and apply it later to pre-populate
|
||||||
|
the migration form. Blueprints are not read by the migration controller.
|
||||||
|
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: |-
|
||||||
|
MigrationBlueprintSpec defines a reusable, named snapshot of a migration
|
||||||
|
configuration. It captures everything from the migration form except the VM
|
||||||
|
selection, so the UI can present it as a "Migration Template" and pre-fill
|
||||||
|
the migration wizard. Blueprints are consumed only by the UI: applying one
|
||||||
|
still creates the regular MigrationTemplate/MigrationPlan/mapping resources,
|
||||||
|
so the migration controller never reads a blueprint.
|
||||||
|
properties:
|
||||||
|
advancedOptions:
|
||||||
|
description: AdvancedOptions captures the advanced migration options
|
||||||
|
to pre-fill
|
||||||
|
properties:
|
||||||
|
acknowledgeNetworkConflictRisk:
|
||||||
|
description: AcknowledgeNetworkConflictRisk indicates that the
|
||||||
|
user acknowledges the risk of network conflicts when doing live
|
||||||
|
migration
|
||||||
|
type: boolean
|
||||||
|
granularNetworks:
|
||||||
|
description: GranularNetworks is a list of networks to be migrated
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
granularPorts:
|
||||||
|
description: GranularPorts is a list of ports to be migrated
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
granularVolumeTypes:
|
||||||
|
description: GranularVolumeTypes is a list of volume types to
|
||||||
|
be migrated
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
imageProfiles:
|
||||||
|
description: ImageProfiles is the ordered list of VolumeImageProfile
|
||||||
|
names to apply to the migrated VM's boot volume.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
networkPersistence:
|
||||||
|
description: NetworkPersistence instructs the migration helper
|
||||||
|
to persist the source networking configuration
|
||||||
|
type: boolean
|
||||||
|
periodicSyncEnabled:
|
||||||
|
description: PeriodicSyncEnabled is a boolean to enable periodic
|
||||||
|
sync
|
||||||
|
type: boolean
|
||||||
|
periodicSyncInterval:
|
||||||
|
description: PeriodicSyncInterval is the interval at which the
|
||||||
|
migration plan should be synced
|
||||||
|
type: string
|
||||||
|
removeVMwareTools:
|
||||||
|
default: true
|
||||||
|
description: |-
|
||||||
|
RemoveVMwareTools instructs the migration helper to remove VMware Tools post migration.
|
||||||
|
Defaults to true since most migrations require VMware Tools removal.
|
||||||
|
type: boolean
|
||||||
|
type: object
|
||||||
|
arrayCredsMappings:
|
||||||
|
description: |-
|
||||||
|
ArrayCredsMappings is an inline snapshot of datastore-to-ArrayCreds pairs.
|
||||||
|
Used when StorageCopyMethod is "StorageAcceleratedCopy".
|
||||||
|
items:
|
||||||
|
description: DatastoreArrayCredsMapping represents a mapping between
|
||||||
|
a VMware datastore and ArrayCreds
|
||||||
|
properties:
|
||||||
|
source:
|
||||||
|
description: Source is the name of the source datastore in VMware
|
||||||
|
type: string
|
||||||
|
target:
|
||||||
|
description: Target is the name of the ArrayCreds resource to
|
||||||
|
use for this datastore
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- source
|
||||||
|
- target
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
customMetadata:
|
||||||
|
additionalProperties:
|
||||||
|
type: string
|
||||||
|
description: |-
|
||||||
|
CustomMetadata is a map of additional key-value pairs applied as instance
|
||||||
|
metadata to every migrated VM
|
||||||
|
type: object
|
||||||
|
dataOnly:
|
||||||
|
description: |-
|
||||||
|
DataOnly copies and converts disks to Cinder volumes without creating an
|
||||||
|
OpenStack VM
|
||||||
|
type: boolean
|
||||||
|
description:
|
||||||
|
description: Description is a free-text description of the blueprint
|
||||||
|
type: string
|
||||||
|
displayName:
|
||||||
|
description: DisplayName is the human-readable name of the blueprint
|
||||||
|
shown in the UI
|
||||||
|
minLength: 1
|
||||||
|
type: string
|
||||||
|
fallbackToDHCP:
|
||||||
|
description: FallbackToDHCP falls back to DHCP when static IP assignment
|
||||||
|
is not possible
|
||||||
|
type: boolean
|
||||||
|
firstBootScript:
|
||||||
|
description: FirstBootScript is the script to run on first boot of
|
||||||
|
migrated VMs
|
||||||
|
type: string
|
||||||
|
migrationStrategy:
|
||||||
|
description: |-
|
||||||
|
MigrationStrategy captures the migration type, cutover windows, and
|
||||||
|
health-check settings to pre-fill into the migration form.
|
||||||
|
Optional so partially filled forms can be saved as templates.
|
||||||
|
properties:
|
||||||
|
adminInitiatedCutOver:
|
||||||
|
default: false
|
||||||
|
type: boolean
|
||||||
|
arrayOffload:
|
||||||
|
default: false
|
||||||
|
type: boolean
|
||||||
|
dataCopyStart:
|
||||||
|
format: date-time
|
||||||
|
type: string
|
||||||
|
dataOnly:
|
||||||
|
default: false
|
||||||
|
description: |-
|
||||||
|
DataOnly skips OpenStack VM creation; converted Cinder volumes are left staged.
|
||||||
|
Compatible with all strategy types (hot, cold, mock).
|
||||||
|
type: boolean
|
||||||
|
disconnectSourceNetwork:
|
||||||
|
default: false
|
||||||
|
type: boolean
|
||||||
|
healthCheckPort:
|
||||||
|
default: "443"
|
||||||
|
type: string
|
||||||
|
performHealthChecks:
|
||||||
|
default: false
|
||||||
|
type: boolean
|
||||||
|
type:
|
||||||
|
enum:
|
||||||
|
- hot
|
||||||
|
- cold
|
||||||
|
- mock
|
||||||
|
type: string
|
||||||
|
vmCutoverEnd:
|
||||||
|
format: date-time
|
||||||
|
type: string
|
||||||
|
vmCutoverStart:
|
||||||
|
format: date-time
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- type
|
||||||
|
type: object
|
||||||
|
networkMappings:
|
||||||
|
description: |-
|
||||||
|
NetworkMappings is an inline snapshot of source-to-target network pairs.
|
||||||
|
Copied by value rather than referencing a NetworkMapping resource, since
|
||||||
|
those are per-migration objects that may be mutated or deleted.
|
||||||
|
items:
|
||||||
|
description: Network represents a mapping between source and target
|
||||||
|
networks
|
||||||
|
properties:
|
||||||
|
source:
|
||||||
|
description: Source is the name of the source network in VMware
|
||||||
|
type: string
|
||||||
|
target:
|
||||||
|
description: Target is the name of the target network in OpenStack
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- source
|
||||||
|
- target
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
noVMwareClusterFilter:
|
||||||
|
description: |-
|
||||||
|
NoVMwareClusterFilter records that the user explicitly chose the
|
||||||
|
"No Cluster" source filter: VMs on standalone ESXi hosts that are not
|
||||||
|
part of any vCenter cluster in the datacenter referenced by VMwareRef.
|
||||||
|
This is distinct from VMwareClusterName simply not being set yet, so it
|
||||||
|
is tracked as its own field rather than inferred from an empty string.
|
||||||
|
type: boolean
|
||||||
|
osFamily:
|
||||||
|
description: OSFamily is the OS type of the virtual machines this
|
||||||
|
blueprint targets
|
||||||
|
enum:
|
||||||
|
- windowsGuest
|
||||||
|
- linuxGuest
|
||||||
|
type: string
|
||||||
|
pcdRef:
|
||||||
|
description: |-
|
||||||
|
PCDRef is the name of the OpenstackCreds to use as the destination PCD environment.
|
||||||
|
Optional so partially filled forms can be saved as templates.
|
||||||
|
type: string
|
||||||
|
postMigrationAction:
|
||||||
|
description: PostMigrationAction captures the post-migration actions
|
||||||
|
to pre-fill
|
||||||
|
properties:
|
||||||
|
folderName:
|
||||||
|
type: string
|
||||||
|
moveToFolder:
|
||||||
|
type: boolean
|
||||||
|
renameVm:
|
||||||
|
type: boolean
|
||||||
|
suffix:
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
preserveSourceTags:
|
||||||
|
description: |-
|
||||||
|
PreserveSourceTags copies each source VM's vSphere tags and custom
|
||||||
|
attributes to the migrated VM as instance metadata
|
||||||
|
type: boolean
|
||||||
|
proxyVMRef:
|
||||||
|
description: |-
|
||||||
|
ProxyVMRef references the ProxyVM to use for data copy.
|
||||||
|
Used 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
|
||||||
|
securityGroups:
|
||||||
|
description: SecurityGroups is the list of OpenStack security group
|
||||||
|
names to apply
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
serverGroup:
|
||||||
|
description: ServerGroup is the OpenStack server group to place migrated
|
||||||
|
VMs into
|
||||||
|
type: string
|
||||||
|
storageCopyMethod:
|
||||||
|
default: normal
|
||||||
|
description: StorageCopyMethod indicates the method to use for storage
|
||||||
|
migration
|
||||||
|
enum:
|
||||||
|
- normal
|
||||||
|
- StorageAcceleratedCopy
|
||||||
|
- HotAdd
|
||||||
|
type: string
|
||||||
|
storageMappings:
|
||||||
|
description: |-
|
||||||
|
StorageMappings is an inline snapshot of source-to-target storage pairs.
|
||||||
|
Copied by value for the same reason as NetworkMappings.
|
||||||
|
items:
|
||||||
|
description: Storage represents a mapping between source and target
|
||||||
|
storage types
|
||||||
|
properties:
|
||||||
|
source:
|
||||||
|
description: Source is the name of the source storage type in
|
||||||
|
VMware
|
||||||
|
type: string
|
||||||
|
target:
|
||||||
|
description: Target is the name of the target storage type in
|
||||||
|
OpenStack
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- source
|
||||||
|
- target
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
targetPCDClusterName:
|
||||||
|
description: TargetPCDClusterName is the name of the PCD cluster to
|
||||||
|
migrate VMs into
|
||||||
|
type: string
|
||||||
|
useGPUFlavor:
|
||||||
|
description: UseGPUFlavor indicates if the migration should filter
|
||||||
|
and use GPU-enabled flavors
|
||||||
|
type: boolean
|
||||||
|
virtioWinDriver:
|
||||||
|
description: VirtioWinDriver is the virtio-win driver version to use
|
||||||
|
for Windows guests
|
||||||
|
type: string
|
||||||
|
vmwareClusterName:
|
||||||
|
description: |-
|
||||||
|
VMwareClusterName is the name of the source vCenter cluster VMs are
|
||||||
|
migrated from.
|
||||||
|
type: string
|
||||||
|
vmwareRef:
|
||||||
|
description: |-
|
||||||
|
VMwareRef is the name of the VMwareCreds to use as the source environment.
|
||||||
|
Optional so partially filled forms can be saved as templates.
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- displayName
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
served: true
|
||||||
|
storage: true
|
||||||
|
subresources: {}
|
||||||
|
---
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
metadata:
|
metadata:
|
||||||
annotations:
|
annotations:
|
||||||
controller-gen.kubebuilder.io/version: v0.17.1
|
controller-gen.kubebuilder.io/version: v0.17.1
|
||||||
@@ -976,16 +1326,19 @@ spec:
|
|||||||
migration plan should be synced
|
migration plan should be synced
|
||||||
type: string
|
type: string
|
||||||
removeVMwareTools:
|
removeVMwareTools:
|
||||||
description: RemoveVMwareTools instructs the migration helper
|
default: true
|
||||||
to remove VMware Tools post migration
|
description: |-
|
||||||
|
RemoveVMwareTools instructs the migration helper to remove VMware Tools post migration.
|
||||||
|
Defaults to true since most migrations require VMware Tools removal.
|
||||||
type: boolean
|
type: boolean
|
||||||
type: object
|
type: object
|
||||||
assignedIPsPerVM:
|
customMetadata:
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
type: string
|
type: string
|
||||||
description: |-
|
description: |-
|
||||||
AssignedIPsPerVM is a map of VM names to comma-separated assigned IPs for cold migration
|
CustomMetadata is a map of additional key-value pairs applied as instance
|
||||||
Format: {"vm-name": "IP1,IP2,IP3"} where each IP corresponds to a network interface by index
|
metadata to every migrated VM in the plan. Keys here override colliding
|
||||||
|
keys derived from preserved source tags.
|
||||||
type: object
|
type: object
|
||||||
fallbackToDHCP:
|
fallbackToDHCP:
|
||||||
type: boolean
|
type: boolean
|
||||||
@@ -1005,6 +1358,12 @@ spec:
|
|||||||
dataCopyStart:
|
dataCopyStart:
|
||||||
format: date-time
|
format: date-time
|
||||||
type: string
|
type: string
|
||||||
|
dataOnly:
|
||||||
|
default: false
|
||||||
|
description: |-
|
||||||
|
DataOnly skips OpenStack VM creation; converted Cinder volumes are left staged.
|
||||||
|
Compatible with all strategy types (hot, cold, mock).
|
||||||
|
type: boolean
|
||||||
disconnectSourceNetwork:
|
disconnectSourceNetwork:
|
||||||
default: false
|
default: false
|
||||||
type: boolean
|
type: boolean
|
||||||
@@ -1076,6 +1435,12 @@ spec:
|
|||||||
suffix:
|
suffix:
|
||||||
type: string
|
type: string
|
||||||
type: object
|
type: object
|
||||||
|
preserveSourceTags:
|
||||||
|
default: false
|
||||||
|
description: |-
|
||||||
|
PreserveSourceTags copies each source VM's vSphere tags and custom attributes
|
||||||
|
to the migrated VM as instance metadata. Applies to all VMs in the plan.
|
||||||
|
type: boolean
|
||||||
securityGroups:
|
securityGroups:
|
||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
@@ -1176,11 +1541,10 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
description: Spec defines the desired state of Migration
|
description: Spec defines the desired state of Migration
|
||||||
properties:
|
properties:
|
||||||
assignedIP:
|
dataOnly:
|
||||||
description: |-
|
description: DataOnly indicates no OpenStack VM should be created
|
||||||
AssignedIP is the comma-separated list of user-assigned IPs for cold migration
|
after disk conversion.
|
||||||
Format: "IP1,IP2,IP3" where each IP corresponds to a network interface by index
|
type: boolean
|
||||||
type: string
|
|
||||||
disconnectSourceNetwork:
|
disconnectSourceNetwork:
|
||||||
description: |-
|
description: |-
|
||||||
DisconnectSourceNetwork specifies whether to disconnect the source VM's network interfaces
|
DisconnectSourceNetwork specifies whether to disconnect the source VM's network interfaces
|
||||||
@@ -1214,6 +1578,12 @@ spec:
|
|||||||
podRef:
|
podRef:
|
||||||
description: PodRef is the name of the pod
|
description: PodRef is the name of the pod
|
||||||
type: string
|
type: string
|
||||||
|
preserveSourceTags:
|
||||||
|
default: false
|
||||||
|
description: |-
|
||||||
|
PreserveSourceTags indicates whether the source VM's vSphere tags and custom
|
||||||
|
attributes are copied to the migrated VM as instance metadata.
|
||||||
|
type: boolean
|
||||||
vmName:
|
vmName:
|
||||||
description: VMName is the name of the VM getting migrated from VMWare
|
description: VMName is the name of the VM getting migrated from VMWare
|
||||||
to Openstack
|
to Openstack
|
||||||
@@ -1304,6 +1674,12 @@ spec:
|
|||||||
- MappingVolume
|
- MappingVolume
|
||||||
- RescanningStorage
|
- RescanningStorage
|
||||||
- XCOPYInProgress
|
- XCOPYInProgress
|
||||||
|
- SnapshottingSourceVM
|
||||||
|
- AttachingDisksToProxy
|
||||||
|
- IdentifyingBlockDevices
|
||||||
|
- HotAddTransferInProgress
|
||||||
|
- HotAddCleanup
|
||||||
|
- DataCopied
|
||||||
type: string
|
type: string
|
||||||
retryable:
|
retryable:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -1311,6 +1687,12 @@ spec:
|
|||||||
Set to false for VMs with RDM (Raw Device Mapping) disks that share storage,
|
Set to false for VMs with RDM (Raw Device Mapping) disks that share storage,
|
||||||
as RDM disk migration state prevents automatic retry.
|
as RDM disk migration state prevents automatic retry.
|
||||||
type: boolean
|
type: boolean
|
||||||
|
stagedVolumeIDs:
|
||||||
|
description: StagedVolumeIDs lists the Cinder volume IDs created during
|
||||||
|
a data-only migration.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
syncWarningMessage:
|
syncWarningMessage:
|
||||||
description: |-
|
description: |-
|
||||||
SyncWarningMessage contains the warning message when periodic sync is in a warning state.
|
SyncWarningMessage contains the warning message when periodic sync is in a warning state.
|
||||||
@@ -1391,8 +1773,10 @@ spec:
|
|||||||
- openstackRef
|
- openstackRef
|
||||||
type: object
|
type: object
|
||||||
networkMapping:
|
networkMapping:
|
||||||
description: NetworkMapping is the reference to the NetworkMapping
|
description: |-
|
||||||
resource that defines source to destination network mappings
|
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
|
type: string
|
||||||
osFamily:
|
osFamily:
|
||||||
description: OSFamily is the OS type of the virtual machine
|
description: OSFamily is the OS type of the virtual machine
|
||||||
@@ -1400,6 +1784,22 @@ spec:
|
|||||||
- windowsGuest
|
- windowsGuest
|
||||||
- linuxGuest
|
- linuxGuest
|
||||||
type: string
|
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:
|
source:
|
||||||
description: Source is the source details for the virtual machine
|
description: Source is the source details for the virtual machine
|
||||||
properties:
|
properties:
|
||||||
@@ -1414,10 +1814,11 @@ spec:
|
|||||||
default: normal
|
default: normal
|
||||||
description: |-
|
description: |-
|
||||||
StorageCopyMethod indicates the method to use for storage migration
|
StorageCopyMethod indicates the method to use for storage migration
|
||||||
Valid values: "normal" (default), "StorageAcceleratedCopy"
|
Valid values: "normal" (default), "StorageAcceleratedCopy", "HotAdd"
|
||||||
enum:
|
enum:
|
||||||
- normal
|
- normal
|
||||||
- StorageAcceleratedCopy
|
- StorageAcceleratedCopy
|
||||||
|
- HotAdd
|
||||||
type: string
|
type: string
|
||||||
storageMapping:
|
storageMapping:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -1428,10 +1829,6 @@ spec:
|
|||||||
description: TargetPCDClusterName is the name of the PCD cluster where
|
description: TargetPCDClusterName is the name of the PCD cluster where
|
||||||
the virtual machine will be migrated
|
the virtual machine will be migrated
|
||||||
type: string
|
type: string
|
||||||
useFlavorless:
|
|
||||||
description: UseFlavorless indicates if the migration should use flavorless
|
|
||||||
VM creation for PCD.
|
|
||||||
type: boolean
|
|
||||||
useGPUFlavor:
|
useGPUFlavor:
|
||||||
description: UseGPUFlavor indicates if the migration should filter
|
description: UseGPUFlavor indicates if the migration should filter
|
||||||
and use GPU-enabled flavors.
|
and use GPU-enabled flavors.
|
||||||
@@ -1442,7 +1839,6 @@ spec:
|
|||||||
type: string
|
type: string
|
||||||
required:
|
required:
|
||||||
- destination
|
- destination
|
||||||
- networkMapping
|
|
||||||
- source
|
- source
|
||||||
type: object
|
type: object
|
||||||
type: object
|
type: object
|
||||||
@@ -2032,6 +2428,134 @@ spec:
|
|||||||
---
|
---
|
||||||
apiVersion: apiextensions.k8s.io/v1
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
kind: CustomResourceDefinition
|
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 the proxyvms API.
|
||||||
|
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:
|
||||||
|
sshKeyPairRef:
|
||||||
|
description: |-
|
||||||
|
LocalObjectReference contains enough information to let you locate the
|
||||||
|
referenced object inside the same namespace.
|
||||||
|
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
|
||||||
|
vmName:
|
||||||
|
type: string
|
||||||
|
vmwareCredsRef:
|
||||||
|
description: |-
|
||||||
|
LocalObjectReference contains enough information to let you locate the
|
||||||
|
referenced object inside the same namespace.
|
||||||
|
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:
|
||||||
|
type: integer
|
||||||
|
componentsVerified:
|
||||||
|
items:
|
||||||
|
description: ProxyVMComponentCheck records whether a required component
|
||||||
|
was found on the Proxy VM.
|
||||||
|
properties:
|
||||||
|
message:
|
||||||
|
type: string
|
||||||
|
name:
|
||||||
|
type: string
|
||||||
|
present:
|
||||||
|
type: boolean
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
- present
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
ipAddress:
|
||||||
|
type: string
|
||||||
|
lastValidationTime:
|
||||||
|
format: date-time
|
||||||
|
type: string
|
||||||
|
validationMessage:
|
||||||
|
type: string
|
||||||
|
validationStatus:
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
served: true
|
||||||
|
storage: true
|
||||||
|
subresources:
|
||||||
|
status: {}
|
||||||
|
---
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
metadata:
|
metadata:
|
||||||
annotations:
|
annotations:
|
||||||
controller-gen.kubebuilder.io/version: v0.17.1
|
controller-gen.kubebuilder.io/version: v0.17.1
|
||||||
@@ -2271,8 +2795,10 @@ spec:
|
|||||||
migration plan should be synced
|
migration plan should be synced
|
||||||
type: string
|
type: string
|
||||||
removeVMwareTools:
|
removeVMwareTools:
|
||||||
description: RemoveVMwareTools instructs the migration helper
|
default: true
|
||||||
to remove VMware Tools post migration
|
description: |-
|
||||||
|
RemoveVMwareTools instructs the migration helper to remove VMware Tools post migration.
|
||||||
|
Defaults to true since most migrations require VMware Tools removal.
|
||||||
type: boolean
|
type: boolean
|
||||||
type: object
|
type: object
|
||||||
bmConfigRef:
|
bmConfigRef:
|
||||||
@@ -2370,6 +2896,14 @@ spec:
|
|||||||
- vmSequence
|
- vmSequence
|
||||||
type: object
|
type: object
|
||||||
type: array
|
type: array
|
||||||
|
customMetadata:
|
||||||
|
additionalProperties:
|
||||||
|
type: string
|
||||||
|
description: |-
|
||||||
|
CustomMetadata is a map of additional key-value pairs applied as instance
|
||||||
|
metadata to every migrated VM in the plan. Keys here override colliding
|
||||||
|
keys derived from preserved source tags.
|
||||||
|
type: object
|
||||||
firstBootScript:
|
firstBootScript:
|
||||||
default: echo "Add your startup script here!"
|
default: echo "Add your startup script here!"
|
||||||
type: string
|
type: string
|
||||||
@@ -2386,6 +2920,12 @@ spec:
|
|||||||
dataCopyStart:
|
dataCopyStart:
|
||||||
format: date-time
|
format: date-time
|
||||||
type: string
|
type: string
|
||||||
|
dataOnly:
|
||||||
|
default: false
|
||||||
|
description: |-
|
||||||
|
DataOnly skips OpenStack VM creation; converted Cinder volumes are left staged.
|
||||||
|
Compatible with all strategy types (hot, cold, mock).
|
||||||
|
type: boolean
|
||||||
disconnectSourceNetwork:
|
disconnectSourceNetwork:
|
||||||
default: false
|
default: false
|
||||||
type: boolean
|
type: boolean
|
||||||
@@ -2427,6 +2967,12 @@ spec:
|
|||||||
suffix:
|
suffix:
|
||||||
type: string
|
type: string
|
||||||
type: object
|
type: object
|
||||||
|
preserveSourceTags:
|
||||||
|
default: false
|
||||||
|
description: |-
|
||||||
|
PreserveSourceTags copies each source VM's vSphere tags and custom attributes
|
||||||
|
to the migrated VM as instance metadata. Applies to all VMs in the plan.
|
||||||
|
type: boolean
|
||||||
vmMigrationPlans:
|
vmMigrationPlans:
|
||||||
description: VMMigrationPlans is the reference to the VM migration
|
description: VMMigrationPlans is the reference to the VM migration
|
||||||
plan
|
plan
|
||||||
@@ -2714,6 +3260,12 @@ spec:
|
|||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
type: array
|
type: array
|
||||||
|
openstackServerGroup:
|
||||||
|
description: |-
|
||||||
|
OpenstackServerGroup is the ID of the OpenStack server group used for VM placement scheduling.
|
||||||
|
When set, the agent VM is placed according to the server group's policy.
|
||||||
|
If empty, default OpenStack scheduling applies.
|
||||||
|
type: string
|
||||||
openstackVolumeType:
|
openstackVolumeType:
|
||||||
description: |-
|
description: |-
|
||||||
OpenstackVolumeType is the volume type for the root disk of the VM
|
OpenstackVolumeType is the volume type for the root disk of the VM
|
||||||
@@ -3106,6 +3658,12 @@ spec:
|
|||||||
cpu:
|
cpu:
|
||||||
description: CPU is the number of CPUs in the virtual machine
|
description: CPU is the number of CPUs in the virtual machine
|
||||||
type: integer
|
type: integer
|
||||||
|
customAttributes:
|
||||||
|
additionalProperties:
|
||||||
|
type: string
|
||||||
|
description: CustomAttributes maps vSphere custom attribute names
|
||||||
|
to their values for the VM
|
||||||
|
type: object
|
||||||
datastores:
|
datastores:
|
||||||
description: Datastores is the list of datastores for the virtual
|
description: Datastores is the list of datastores for the virtual
|
||||||
machine
|
machine
|
||||||
@@ -3213,6 +3771,13 @@ spec:
|
|||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
type: array
|
type: array
|
||||||
|
tags:
|
||||||
|
additionalProperties:
|
||||||
|
type: string
|
||||||
|
description: |-
|
||||||
|
Tags maps vSphere tag category names to a comma-separated list of the
|
||||||
|
tag names attached to the VM in that category (e.g. "env" -> "production")
|
||||||
|
type: object
|
||||||
vmState:
|
vmState:
|
||||||
description: VMState is the state of the virtual machine
|
description: VMState is the state of the virtual machine
|
||||||
type: string
|
type: string
|
||||||
@@ -3651,6 +4216,7 @@ rules:
|
|||||||
- openstackcreds
|
- openstackcreds
|
||||||
- pcdclusters
|
- pcdclusters
|
||||||
- pcdhosts
|
- pcdhosts
|
||||||
|
- proxyvms
|
||||||
- rdmdisks
|
- rdmdisks
|
||||||
- rollingmigrationplans
|
- rollingmigrationplans
|
||||||
- storagemappings
|
- storagemappings
|
||||||
@@ -3681,6 +4247,7 @@ rules:
|
|||||||
- openstackcreds/finalizers
|
- openstackcreds/finalizers
|
||||||
- pcdclusters/finalizers
|
- pcdclusters/finalizers
|
||||||
- pcdhosts/finalizers
|
- pcdhosts/finalizers
|
||||||
|
- proxyvms/finalizers
|
||||||
- rdmdisks/finalizers
|
- rdmdisks/finalizers
|
||||||
- rollingmigrationplans/finalizers
|
- rollingmigrationplans/finalizers
|
||||||
- storagemappings/finalizers
|
- storagemappings/finalizers
|
||||||
@@ -3703,6 +4270,7 @@ rules:
|
|||||||
- openstackcreds/status
|
- openstackcreds/status
|
||||||
- pcdclusters/status
|
- pcdclusters/status
|
||||||
- pcdhosts/status
|
- pcdhosts/status
|
||||||
|
- proxyvms/status
|
||||||
- rdmdisks/status
|
- rdmdisks/status
|
||||||
- rollingmigrationplans/status
|
- rollingmigrationplans/status
|
||||||
- storagemappings/status
|
- storagemappings/status
|
||||||
@@ -3767,6 +4335,44 @@ rules:
|
|||||||
---
|
---
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
kind: ClusterRole
|
kind: ClusterRole
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/managed-by: kustomize
|
||||||
|
app.kubernetes.io/name: migration
|
||||||
|
name: migration-migrationblueprint-editor-role
|
||||||
|
rules:
|
||||||
|
- apiGroups:
|
||||||
|
- vjailbreak.k8s.pf9.io
|
||||||
|
resources:
|
||||||
|
- migrationblueprints
|
||||||
|
verbs:
|
||||||
|
- create
|
||||||
|
- delete
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- patch
|
||||||
|
- update
|
||||||
|
- watch
|
||||||
|
---
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRole
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/managed-by: kustomize
|
||||||
|
app.kubernetes.io/name: migration
|
||||||
|
name: migration-migrationblueprint-viewer-role
|
||||||
|
rules:
|
||||||
|
- apiGroups:
|
||||||
|
- vjailbreak.k8s.pf9.io
|
||||||
|
resources:
|
||||||
|
- migrationblueprints
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
|
---
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRole
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/managed-by: kustomize
|
app.kubernetes.io/managed-by: kustomize
|
||||||
@@ -4680,17 +5286,6 @@ kind: ClusterRole
|
|||||||
metadata:
|
metadata:
|
||||||
name: ui-manager-role
|
name: ui-manager-role
|
||||||
rules:
|
rules:
|
||||||
- apiGroups:
|
|
||||||
- ""
|
|
||||||
resources:
|
|
||||||
- secrets
|
|
||||||
verbs:
|
|
||||||
- create
|
|
||||||
- delete
|
|
||||||
- get
|
|
||||||
- list
|
|
||||||
- patch
|
|
||||||
- update
|
|
||||||
- apiGroups:
|
- apiGroups:
|
||||||
- ""
|
- ""
|
||||||
resources:
|
resources:
|
||||||
@@ -4703,20 +5298,10 @@ rules:
|
|||||||
- patch
|
- patch
|
||||||
- update
|
- update
|
||||||
- watch
|
- watch
|
||||||
- apiGroups:
|
|
||||||
- ""
|
|
||||||
resources:
|
|
||||||
- pods
|
|
||||||
verbs:
|
|
||||||
- get
|
|
||||||
- list
|
|
||||||
- watch
|
|
||||||
- patch
|
|
||||||
- apiGroups:
|
- apiGroups:
|
||||||
- ""
|
- ""
|
||||||
resources:
|
resources:
|
||||||
- configmaps/status
|
- configmaps/status
|
||||||
- pods/status
|
|
||||||
verbs:
|
verbs:
|
||||||
- get
|
- get
|
||||||
- apiGroups:
|
- apiGroups:
|
||||||
@@ -4727,13 +5312,6 @@ rules:
|
|||||||
- get
|
- get
|
||||||
- list
|
- list
|
||||||
- watch
|
- watch
|
||||||
- apiGroups:
|
|
||||||
- ""
|
|
||||||
resources:
|
|
||||||
- pods/log
|
|
||||||
verbs:
|
|
||||||
- get
|
|
||||||
- list
|
|
||||||
- apiGroups:
|
- apiGroups:
|
||||||
- vjailbreak.k8s.pf9.io
|
- vjailbreak.k8s.pf9.io
|
||||||
resources:
|
resources:
|
||||||
@@ -4743,6 +5321,7 @@ rules:
|
|||||||
- esxisshcreds
|
- esxisshcreds
|
||||||
- clustermigrations
|
- clustermigrations
|
||||||
- esximigrations
|
- esximigrations
|
||||||
|
- migrationblueprints
|
||||||
- migrationplans
|
- migrationplans
|
||||||
- migrations
|
- migrations
|
||||||
- migrationtemplates
|
- migrationtemplates
|
||||||
@@ -4750,6 +5329,7 @@ rules:
|
|||||||
- openstackcreds
|
- openstackcreds
|
||||||
- pcdclusters
|
- pcdclusters
|
||||||
- pcdhosts
|
- pcdhosts
|
||||||
|
- proxyvms
|
||||||
- rdmdisks
|
- rdmdisks
|
||||||
- rollingmigrationplans
|
- rollingmigrationplans
|
||||||
- storagemappings
|
- storagemappings
|
||||||
@@ -4782,6 +5362,7 @@ rules:
|
|||||||
- openstackcreds/finalizers
|
- openstackcreds/finalizers
|
||||||
- pcdclusters/finalizers
|
- pcdclusters/finalizers
|
||||||
- pcdhosts/finalizers
|
- pcdhosts/finalizers
|
||||||
|
- proxyvms/finalizers
|
||||||
- rdmdisks/finalizers
|
- rdmdisks/finalizers
|
||||||
- rollingmigrationplans/finalizers
|
- rollingmigrationplans/finalizers
|
||||||
- storagemappings/finalizers
|
- storagemappings/finalizers
|
||||||
@@ -4831,4 +5412,37 @@ subjects:
|
|||||||
- kind: ServiceAccount
|
- kind: ServiceAccount
|
||||||
name: ui-manager-sa
|
name: ui-manager-sa
|
||||||
namespace: migration-system
|
namespace: migration-system
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ServiceAccount
|
||||||
|
metadata:
|
||||||
|
name: vjailbreak-ai-sa
|
||||||
|
namespace: migration-system
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: vjailbreak-ai-data
|
||||||
|
namespace: migration-system
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 2Gi
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: vjailbreak-ai
|
||||||
|
namespace: migration-system
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
app: vjailbreak-ai
|
||||||
|
type: ClusterIP
|
||||||
|
ports:
|
||||||
|
- protocol: TCP
|
||||||
|
port: 8080
|
||||||
|
targetPort: 8080
|
||||||
---
|
---
|
||||||
@@ -20,6 +20,10 @@ spec:
|
|||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 80
|
- containerPort: 80
|
||||||
|
envFrom:
|
||||||
|
- configMapRef:
|
||||||
|
name: pf9-env
|
||||||
|
optional: true
|
||||||
volumeMounts:
|
volumeMounts:
|
||||||
- name: pf9-logs
|
- name: pf9-logs
|
||||||
mountPath: /var/log/pf9
|
mountPath: /var/log/pf9
|
||||||
|
|||||||
@@ -41,7 +41,8 @@ spec:
|
|||||||
envFrom:
|
envFrom:
|
||||||
- configMapRef:
|
- configMapRef:
|
||||||
name: pf9-env
|
name: pf9-env
|
||||||
image: quay.io/platform9/vjailbreak-controller:v0.4.4
|
optional: true
|
||||||
|
image: quay.io/platform9/vjailbreak-controller:v0.4.8
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
lifecycle:
|
lifecycle:
|
||||||
preStop:
|
preStop:
|
||||||
|
|||||||
@@ -20,20 +20,41 @@ spec:
|
|||||||
type: RollingUpdate
|
type: RollingUpdate
|
||||||
template:
|
template:
|
||||||
metadata:
|
metadata:
|
||||||
|
annotations:
|
||||||
|
container.apparmor.security.beta.kubernetes.io/vpwned: unconfined
|
||||||
labels:
|
labels:
|
||||||
app: vpwned-sdk
|
app: vpwned-sdk
|
||||||
spec:
|
spec:
|
||||||
|
affinity:
|
||||||
|
nodeAffinity:
|
||||||
|
requiredDuringSchedulingIgnoredDuringExecution:
|
||||||
|
nodeSelectorTerms:
|
||||||
|
- matchExpressions:
|
||||||
|
- key: node-role.kubernetes.io/control-plane
|
||||||
|
operator: Exists
|
||||||
containers:
|
containers:
|
||||||
- envFrom:
|
- env:
|
||||||
|
- name: DBUS_SYSTEM_BUS_ADDRESS
|
||||||
|
value: unix:path=/run/dbus/system_bus_socket
|
||||||
|
envFrom:
|
||||||
- configMapRef:
|
- configMapRef:
|
||||||
name: pf9-env
|
name: pf9-env
|
||||||
image: quay.io/platform9/vjailbreak-vpwned:v0.4.4
|
optional: true
|
||||||
|
image: quay.io/platform9/vjailbreak-vpwned:v0.4.8
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
name: vpwned
|
name: vpwned
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 3001
|
- containerPort: 3001
|
||||||
protocol: TCP
|
protocol: TCP
|
||||||
resources: {}
|
resources: {}
|
||||||
|
securityContext:
|
||||||
|
allowPrivilegeEscalation: false
|
||||||
|
capabilities:
|
||||||
|
add:
|
||||||
|
- DAC_OVERRIDE
|
||||||
|
drop:
|
||||||
|
- ALL
|
||||||
|
runAsUser: 0
|
||||||
terminationMessagePath: /dev/termination-log
|
terminationMessagePath: /dev/termination-log
|
||||||
terminationMessagePolicy: File
|
terminationMessagePolicy: File
|
||||||
volumeMounts:
|
volumeMounts:
|
||||||
@@ -42,6 +63,18 @@ spec:
|
|||||||
readOnly: true
|
readOnly: true
|
||||||
- mountPath: /home/ubuntu
|
- mountPath: /home/ubuntu
|
||||||
name: vddk-storage
|
name: vddk-storage
|
||||||
|
- mountPath: /run/dbus/system_bus_socket
|
||||||
|
name: dbus-socket
|
||||||
|
- mountPath: /etc/systemd/timesyncd.conf.d
|
||||||
|
name: timesyncd-conf-dir
|
||||||
|
- mountPath: /usr/share/zoneinfo
|
||||||
|
name: host-zoneinfo
|
||||||
|
readOnly: true
|
||||||
|
- mountPath: /etc/pf9
|
||||||
|
name: pf9-config
|
||||||
|
- mountPath: /var/log/pf9
|
||||||
|
name: pf9-logs
|
||||||
|
readOnly: true
|
||||||
dnsConfig:
|
dnsConfig:
|
||||||
options:
|
options:
|
||||||
- name: ndots
|
- name: ndots
|
||||||
@@ -61,4 +94,24 @@ spec:
|
|||||||
path: /home/ubuntu
|
path: /home/ubuntu
|
||||||
type: DirectoryOrCreate
|
type: DirectoryOrCreate
|
||||||
name: vddk-storage
|
name: vddk-storage
|
||||||
|
- hostPath:
|
||||||
|
path: /run/dbus/system_bus_socket
|
||||||
|
type: Socket
|
||||||
|
name: dbus-socket
|
||||||
|
- hostPath:
|
||||||
|
path: /etc/systemd/timesyncd.conf.d
|
||||||
|
type: DirectoryOrCreate
|
||||||
|
name: timesyncd-conf-dir
|
||||||
|
- hostPath:
|
||||||
|
path: /usr/share/zoneinfo
|
||||||
|
type: Directory
|
||||||
|
name: host-zoneinfo
|
||||||
|
- hostPath:
|
||||||
|
path: /etc/pf9
|
||||||
|
type: Directory
|
||||||
|
name: pf9-config
|
||||||
|
- hostPath:
|
||||||
|
path: /var/log/pf9
|
||||||
|
type: DirectoryOrCreate
|
||||||
|
name: pf9-logs
|
||||||
---
|
---
|
||||||
@@ -24,23 +24,20 @@ spec:
|
|||||||
serviceAccountName: ui-manager-sa
|
serviceAccountName: ui-manager-sa
|
||||||
containers:
|
containers:
|
||||||
- name: vjailbreak-ui-container
|
- name: vjailbreak-ui-container
|
||||||
image: quay.io/platform9/vjailbreak-ui:v0.4.4
|
image: quay.io/platform9/vjailbreak-ui:v0.4.8
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 80
|
- containerPort: 80
|
||||||
|
envFrom:
|
||||||
|
- configMapRef:
|
||||||
|
name: pf9-env
|
||||||
|
optional: true
|
||||||
volumeMounts:
|
volumeMounts:
|
||||||
- name: nginx-shadow-htpasswd
|
- name: nginx-shadow-htpasswd
|
||||||
mountPath: /etc/nginx/shadow
|
mountPath: /etc/nginx/shadow
|
||||||
- name: pf9-logs
|
|
||||||
mountPath: /var/log/pf9
|
|
||||||
readOnly: true
|
|
||||||
volumes:
|
volumes:
|
||||||
- name: nginx-shadow-htpasswd
|
- name: nginx-shadow-htpasswd
|
||||||
hostPath:
|
hostPath:
|
||||||
path: /etc/htpasswd
|
path: /etc/htpasswd
|
||||||
type: FileOrCreate
|
type: FileOrCreate
|
||||||
- name: pf9-logs
|
|
||||||
hostPath:
|
|
||||||
path: /var/log/pf9
|
|
||||||
type: DirectoryOrCreate
|
|
||||||
---
|
---
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: vjailbreak-ai
|
||||||
|
namespace: migration-system
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: vjailbreak-ai
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: vjailbreak-ai
|
||||||
|
spec:
|
||||||
|
affinity:
|
||||||
|
nodeAffinity:
|
||||||
|
requiredDuringSchedulingIgnoredDuringExecution:
|
||||||
|
nodeSelectorTerms:
|
||||||
|
- matchExpressions:
|
||||||
|
- key: node-role.kubernetes.io/control-plane
|
||||||
|
operator: Exists
|
||||||
|
serviceAccountName: vjailbreak-ai-sa
|
||||||
|
containers:
|
||||||
|
- name: vjailbreak-ai
|
||||||
|
image: quay.io/platform9/vjailbreak-ai:v0.4.8
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
ports:
|
||||||
|
- containerPort: 8080
|
||||||
|
env:
|
||||||
|
- name: ANTHROPIC_API_KEY
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: vjailbreak-ai-secret
|
||||||
|
key: api-key
|
||||||
|
optional: true
|
||||||
|
- name: CHROMA_PATH
|
||||||
|
value: /data/chroma
|
||||||
|
- name: CONTEXT_PATH
|
||||||
|
value: /data/context.md
|
||||||
|
- name: ALLOWED_ORIGINS
|
||||||
|
value: "http://vjailbreak-ui-service.migration-system.svc.cluster.local"
|
||||||
|
volumeMounts:
|
||||||
|
- name: ai-data
|
||||||
|
mountPath: /data
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: "256Mi"
|
||||||
|
cpu: "100m"
|
||||||
|
limits:
|
||||||
|
memory: "1Gi"
|
||||||
|
cpu: "500m"
|
||||||
|
volumes:
|
||||||
|
- name: ai-data
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: vjailbreak-ai-data
|
||||||
|
---
|
||||||
+781
-59
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,75 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: vjailbreak-ai-context
|
||||||
|
namespace: migration-system
|
||||||
|
data:
|
||||||
|
additional_context: |
|
||||||
|
## vJailbreak Architecture
|
||||||
|
|
||||||
|
vJailbreak migrates VMware VMs to OpenStack in this sequence:
|
||||||
|
1. Controller creates a v2v-helper pod per migration
|
||||||
|
2. v2v-helper runs virt-v2v with the nbdkit+VDDK plugin to stream VMDK data
|
||||||
|
3. Converted disk is uploaded to OpenStack Glance as QCOW2 (or written to a Cinder volume via RAW)
|
||||||
|
4. Nova boots the migrated VM using the uploaded image or volume
|
||||||
|
|
||||||
|
Key components:
|
||||||
|
- **migration-controller-manager** — Kubernetes controller in `migration-system` namespace; reconciles Migration CRs
|
||||||
|
- **v2v-helper pod** — named `<migration-name>` in `migration-system`; runs virt-v2v; one pod per Migration
|
||||||
|
- **VDDK** — VMware Virtual Disk Development Kit at `/home/ubuntu/vmware-vix-disklib-distrib/` on the vJailbreak VM
|
||||||
|
- **Conversion scratch space** — `emptyDir` at `/var/tmp/v2v-conversion-disks/` inside v2v-helper pod (~2× VM disk size required)
|
||||||
|
- **storageCopyMethod** — `hot` (live/CBT incremental) or `cold` (offline full-copy); set in MigrationTemplate
|
||||||
|
|
||||||
|
CRD hierarchy: Migration → MigrationPlan → MigrationTemplate → NetworkMapping + StorageMapping
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Common Failure Patterns and Fixes
|
||||||
|
|
||||||
|
### VDDK / VMware Connectivity
|
||||||
|
| Symptom | Likely Cause | Fix |
|
||||||
|
|---------|-------------|-----|
|
||||||
|
| `VixDiskLib_Open failed` / `Transport error` | VDDK library missing or wrong version | Verify `/home/ubuntu/vmware-vix-disklib-distrib/` exists; VDDK 7.0+ required |
|
||||||
|
| `Failed to connect to host <esxi-fqdn>` | ESXi hostname not resolving in pod | Add ESXi host entries to `/etc/hosts` on vJailbreak VM, then restart controller |
|
||||||
|
| `SSL certificate verify failed` | vCenter TLS cert untrusted | Set `InsecureSkipVerify: true` in VMwareCreds or add cert to trust store |
|
||||||
|
| `NoPermission` / `NotAuthenticated` | Insufficient vCenter permissions | Account needs Datastore.Browse, VirtualMachine.Provisioning.DiskRandomRead, Global.DisableMethods |
|
||||||
|
| `CBT not enabled` / `queryChangedDiskAreas` error | Changed Block Tracking disabled on source VM | Enable CBT in vCenter VM settings, create a snapshot, then retry |
|
||||||
|
|
||||||
|
### virt-v2v / Conversion
|
||||||
|
| Symptom | Likely Cause | Fix |
|
||||||
|
|---------|-------------|-----|
|
||||||
|
| `No space left on device` | Node disk exhausted during conversion | Ensure node has ≥2× VM disk size free in `/var/tmp`; check `df -h` on vJailbreak VM |
|
||||||
|
| `libguestfs: error: could not create appliance` | libguestfs kernel/QEMU unavailable in pod | Check pod for missing KVM device; vJailbreak VM must have nested virt or bare-metal KVM |
|
||||||
|
| `Failed to locate virtio drivers` / `virtio-win` | virtio-win ISO not found | Confirm virtio-win ISO is present at the expected path in the v2v-helper image |
|
||||||
|
| `qemu-img: Could not open` / `corrupt` | VMDK corrupt or CBT snapshot stale | Remove stale snapshots in vCenter; try `storageCopyMethod: cold` |
|
||||||
|
| `virt-v2v: error: inspection of disk image failed` | Unsupported guest OS | Check virt-v2v support page; Windows requires virtio-win, Linux needs grub accessible |
|
||||||
|
| Conversion stuck / timeout | Very large VM or slow storage | Increase `migrationTimeout` in MigrationPlan; check network throughput between vJailbreak and ESXi |
|
||||||
|
|
||||||
|
### OpenStack Upload / Deploy
|
||||||
|
| Symptom | Likely Cause | Fix |
|
||||||
|
|---------|-------------|-----|
|
||||||
|
| `No valid host found` | Flavor constraints or resource exhaustion | Verify flavor exists and Nova has capacity; check `openstack flavor list` |
|
||||||
|
| `Quota exceeded` | OpenStack project quota hit | Check `openstack quota show` for instances, cores, RAM, volumes, gigabytes |
|
||||||
|
| `Network <name> could not be found` | NetworkMapping source or target name mismatch | Verify NetworkMapping.Spec matches exact OpenStack network names |
|
||||||
|
| `VolumeType <name> not found` | StorageMapping mismatch | Verify StorageMapping.Spec matches exact Cinder volume type names; case-sensitive |
|
||||||
|
| `Provided image is too large` | Glance upload size limit | Increase `glance-api.conf image_size_cap`; or use `storageCopyMethod: raw-volume` to bypass Glance |
|
||||||
|
| `ImageNotFound` during Nova boot | Glance upload failed or image in error state | Check `openstack image list`; look for image in `killed` or `queued` state |
|
||||||
|
|
||||||
|
### Kubernetes / Controller
|
||||||
|
| Symptom | Likely Cause | Fix |
|
||||||
|
|---------|-------------|-----|
|
||||||
|
| Pod `OOMKilled` | Insufficient memory for conversion | Large Windows VMs need 4–8 GB; increase v2v-helper memory limit in MigrationPlan |
|
||||||
|
| Pod stuck in `Pending` | Node selector mismatch or node resource shortage | Check `kubectl describe pod <name>` for scheduling events |
|
||||||
|
| `context deadline exceeded` in controller | Migration timeout too short | Increase `migrationTimeout` in MigrationPlan spec |
|
||||||
|
| Migration stuck in `DataCopyStart` | NBD/VDDK stream stalled | Check v2v-helper logs for `nbdkit` errors; restart migration |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Analysis Guidelines
|
||||||
|
|
||||||
|
- **Always quote specific log lines** as evidence in `root_cause` — vague causes are not actionable
|
||||||
|
- **fix_steps** should be concrete shell commands or UI steps, not generic advice
|
||||||
|
- Check `storageCopyMethod` (`hot` vs `cold`) — hot migrations have extra pre-copy phases that can fail
|
||||||
|
- If `phase` is `Failed` but logs are empty, check controller logs for reconcile errors mentioning the Migration name
|
||||||
|
- Network and storage mapping errors almost always have the exact mismatched name in the log — quote it
|
||||||
|
- If confidence is `low` or `none`, list the specific information that would be needed to diagnose further
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: vjailbreak-ai-context
|
||||||
|
namespace: migration-system
|
||||||
|
data:
|
||||||
|
# Operator-provided context injected into every AI analysis prompt.
|
||||||
|
# Edit the value below to add site-specific information.
|
||||||
|
# Examples:
|
||||||
|
# - Custom VDDK install path
|
||||||
|
# - Known ESXi certificate issues in this environment
|
||||||
|
# - Network restrictions that affect migrations
|
||||||
|
# - OpenStack volume type mappings in use
|
||||||
|
additional_context: |
|
||||||
|
# Add operator-specific notes here.
|
||||||
|
# Example:
|
||||||
|
# VDDK is installed at /opt/vmware/vddk (non-standard path).
|
||||||
|
# All ESXi hosts use self-signed TLS certificates -- SSL errors are expected.
|
||||||
|
# OpenStack Cinder volume type "ssd" maps to VMware datastore "fast-ssd".
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
# Prerequisites:
|
||||||
|
# Create the API key Secret via Settings → AI in the vJailbreak UI, or manually:
|
||||||
|
# kubectl -n migration-system create secret generic vjailbreak-ai-secret \
|
||||||
|
# --from-literal=api-key=<anthropic-api-key> \
|
||||||
|
# --from-literal=admin-key=<admin-key>
|
||||||
|
# The Deployment uses optional: true so it starts without the Secret,
|
||||||
|
# but AI analysis calls will fail until the key is configured.
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: vjailbreak-ai
|
||||||
|
namespace: migration-system
|
||||||
|
labels:
|
||||||
|
app: vjailbreak-ai
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: vjailbreak-ai
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: vjailbreak-ai
|
||||||
|
spec:
|
||||||
|
securityContext:
|
||||||
|
runAsNonRoot: true
|
||||||
|
runAsUser: 1001
|
||||||
|
fsGroup: 1001
|
||||||
|
containers:
|
||||||
|
- name: vjailbreak-ai
|
||||||
|
image: quay.io/platform9/vjailbreak-ai:main
|
||||||
|
ports:
|
||||||
|
- containerPort: 8080
|
||||||
|
env:
|
||||||
|
- name: ANTHROPIC_API_KEY
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: vjailbreak-ai-secret
|
||||||
|
key: api-key
|
||||||
|
optional: true # Secret must be created via Settings UI before AI analysis works
|
||||||
|
- name: ADMIN_API_KEY
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: vjailbreak-ai-secret
|
||||||
|
key: admin-key
|
||||||
|
optional: true
|
||||||
|
volumeMounts:
|
||||||
|
- name: chroma-data
|
||||||
|
mountPath: /data
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 200m
|
||||||
|
memory: 512Mi
|
||||||
|
limits:
|
||||||
|
cpu: "1"
|
||||||
|
memory: 1Gi
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /health
|
||||||
|
port: 8080
|
||||||
|
initialDelaySeconds: 30
|
||||||
|
periodSeconds: 30
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /health
|
||||||
|
port: 8080
|
||||||
|
initialDelaySeconds: 10
|
||||||
|
periodSeconds: 10
|
||||||
|
volumes:
|
||||||
|
- name: chroma-data
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: vjailbreak-ai-chroma
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: vjailbreak-ai-chroma
|
||||||
|
namespace: migration-system
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 2Gi
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: vjailbreak-ai
|
||||||
|
namespace: migration-system
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
app: vjailbreak-ai
|
||||||
|
ports:
|
||||||
|
- port: 8080
|
||||||
|
targetPort: 8080
|
||||||
|
type: ClusterIP
|
||||||
@@ -59,20 +59,55 @@ spec:
|
|||||||
- |
|
- |
|
||||||
IS_MASTER=$(grep -E '^export IS_MASTER=' /etc/pf9/k3s.env | cut -d'=' -f2)
|
IS_MASTER=$(grep -E '^export IS_MASTER=' /etc/pf9/k3s.env | cut -d'=' -f2)
|
||||||
MASTER_IP=$(grep -E '^export MASTER_IP=' /etc/pf9/k3s.env | cut -d'=' -f2)
|
MASTER_IP=$(grep -E '^export MASTER_IP=' /etc/pf9/k3s.env | cut -d'=' -f2)
|
||||||
|
|
||||||
|
# Migration considered idle if quiet for this long; only then is it eligible for cleanup.
|
||||||
|
ACTIVITY_WINDOW_MIN=60
|
||||||
|
# Delete threshold: older than 24h.
|
||||||
|
RETENTION_MTIME=+1
|
||||||
|
|
||||||
|
# Deletes migration-<vm>-<id>.log + migration-<vm>-<id>/ as one unit,
|
||||||
|
# skipping the pair if either was written to within ACTIVITY_WINDOW_MIN.
|
||||||
|
cleanup_dir() {
|
||||||
|
local base_dir="$1"
|
||||||
|
[ -d "$base_dir" ] || return 0
|
||||||
|
|
||||||
|
local names
|
||||||
|
names=$( { find "$base_dir" -maxdepth 1 -type f -name 'migration-*.log' -printf '%f\n' 2>/dev/null | sed 's/\.log$//'
|
||||||
|
find "$base_dir" -mindepth 1 -maxdepth 1 -type d -name 'migration-*' -printf '%f\n' 2>/dev/null
|
||||||
|
} | sort -u )
|
||||||
|
|
||||||
|
echo "$names" | while IFS= read -r name; do
|
||||||
|
[ -n "$name" ] || continue
|
||||||
|
local log_file="$base_dir/$name.log"
|
||||||
|
local dir="$base_dir/$name"
|
||||||
|
|
||||||
|
if find "$log_file" "$dir" -type f -mmin -"$ACTIVITY_WINDOW_MIN" 2>/dev/null | grep -q .; then
|
||||||
|
echo "[cleanup] Skipping $name (active within last ${ACTIVITY_WINDOW_MIN}m)"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
[ -f "$log_file" ] && find "$log_file" -mtime "$RETENTION_MTIME" -delete 2>/dev/null
|
||||||
|
if [ -d "$dir" ]; then
|
||||||
|
find "$dir" -type f -mtime "$RETENTION_MTIME" -delete 2>/dev/null
|
||||||
|
rmdir "$dir" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Stray non-migration files: clean by age alone.
|
||||||
|
find "$base_dir" -maxdepth 1 -type f ! -name 'migration-*.log' -mtime "$RETENTION_MTIME" -delete 2>/dev/null || true
|
||||||
|
}
|
||||||
|
|
||||||
if [ "$IS_MASTER" = "true" ]; then
|
if [ "$IS_MASTER" = "true" ]; then
|
||||||
echo "Master node detected. IP: $MASTER_IP"
|
echo "Master node detected. IP: $MASTER_IP"
|
||||||
|
|
||||||
# Clean up logs older than 24 hours on master node
|
master_cleanup_loop() {
|
||||||
echo "Cleaning up logs older than 24 hours on master node"
|
while true; do
|
||||||
# Note: Not restarting services to avoid disruption
|
echo "Cleaning up logs older than 24 hours on master node ($(date))"
|
||||||
# Instead, properly closing files in the v2v-helper code
|
cleanup_dir /var/log/pf9
|
||||||
# Clean master's own logs and force delete any stuck files
|
sleep 300
|
||||||
find /var/log/pf9 -type f -mtime +1 -delete 2>/dev/null || true
|
done
|
||||||
# Clean worker logs stored on master and force delete any stuck files
|
}
|
||||||
find /var/lib/rsync/worker-logs -type f -mtime +1 -delete 2>/dev/null || true
|
master_cleanup_loop &
|
||||||
# Clear deleted but open files (useful when processes still hold file handles)
|
|
||||||
echo "Clearing deleted but open files..."
|
|
||||||
lsof +L1 | grep "/var/log/pf9\|/var/lib/rsync/worker-logs" | awk '{print $2}' | xargs -r kill -HUP 2>/dev/null || true
|
|
||||||
|
|
||||||
echo "Starting rsync daemon..."
|
echo "Starting rsync daemon..."
|
||||||
rsync --daemon --config=/etc/pf9/rsyncd.conf --no-detach
|
rsync --daemon --config=/etc/pf9/rsyncd.conf --no-detach
|
||||||
@@ -84,29 +119,24 @@ spec:
|
|||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echo "Worker node detected. Syncing from Master..."
|
echo "Worker node detected. Syncing from Master..."
|
||||||
|
|
||||||
|
agent_cleanup_loop() {
|
||||||
|
while true; do
|
||||||
|
echo "Cleaning up logs older than 24 hours on worker node ($(date))"
|
||||||
|
cleanup_dir /var/log/pf9
|
||||||
|
sync
|
||||||
|
echo 3 > /proc/sys/vm/drop_caches 2>/dev/null || true
|
||||||
|
sleep 300
|
||||||
|
done
|
||||||
|
}
|
||||||
|
agent_cleanup_loop &
|
||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
mkdir -p /home/ubuntu/vmware-vix-disklib-distrib/
|
mkdir -p /home/ubuntu/vmware-vix-disklib-distrib/
|
||||||
|
|
||||||
# Clean up logs older than 24 hours on worker node
|
|
||||||
echo "Cleaning up logs older than 24 hours on worker node"
|
|
||||||
# Note: Not restarting services to avoid disruption
|
|
||||||
# Instead, properly closing files in the v2v-helper code
|
|
||||||
# Force delete old log files
|
|
||||||
find /var/log/pf9 -type f -mtime +1 -delete 2>/dev/null || true
|
|
||||||
# Clear deleted but open files
|
|
||||||
echo "Clearing deleted but open files..."
|
|
||||||
lsof +L1 | grep "/var/log/pf9" | awk '{print $2}' | xargs -r kill -HUP 2>/dev/null || true
|
|
||||||
# Free up disk space by clearing caches
|
|
||||||
sync
|
|
||||||
echo 3 > /proc/sys/vm/drop_caches 2>/dev/null || true
|
|
||||||
|
|
||||||
echo "Syncing from rsync://${MASTER_IP}"
|
echo "Syncing from rsync://${MASTER_IP}"
|
||||||
rsync -avz rsync://${MASTER_IP}/vmwarelib/ /home/ubuntu/vmware-vix-disklib-distrib/
|
rsync -avz rsync://${MASTER_IP}/vmwarelib/ /home/ubuntu/vmware-vix-disklib-distrib/
|
||||||
|
|
||||||
# Sync logs from worker to master
|
|
||||||
rsync -avz /var/log/pf9 rsync://${MASTER_IP}/worker-logs
|
rsync -avz /var/log/pf9 rsync://${MASTER_IP}/worker-logs
|
||||||
|
|
||||||
# Sync virtio-win drivers from master to worker
|
|
||||||
rsync -avz rsync://${MASTER_IP}/virtio-win /home/ubuntu/virtio-win
|
rsync -avz rsync://${MASTER_IP}/virtio-win /home/ubuntu/virtio-win
|
||||||
|
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
# This file is used to set environment variables to be injected into v2v-helper
|
# This file is used to set environment variables to be injected into v2v-helper
|
||||||
# User can populate this file via cloud-init
|
# User can populate this file via cloud-init
|
||||||
|
|
||||||
|
TZ=UTC
|
||||||
|
|
||||||
|
|||||||
@@ -20,9 +20,11 @@ data:
|
|||||||
VMWARE_CREDS_REQUEUE_AFTER_MINUTES: "60" # number of minutes to requeue after for vmware creds
|
VMWARE_CREDS_REQUEUE_AFTER_MINUTES: "60" # number of minutes to requeue after for vmware creds
|
||||||
VALIDATE_RDM_OWNER_VMS: "true" # validate RDM owner VMs before migration
|
VALIDATE_RDM_OWNER_VMS: "true" # validate RDM owner VMs before migration
|
||||||
DEPLOYMENT_NAME: vJailbreak
|
DEPLOYMENT_NAME: vJailbreak
|
||||||
|
TIMEZONE: ""
|
||||||
PERIODIC_SYNC_MAX_RETRIES: "3" # max number of retries for CBT sync
|
PERIODIC_SYNC_MAX_RETRIES: "3" # max number of retries for CBT sync
|
||||||
PERIODIC_SYNC_RETRY_CAP: "3h" # max retry interval for CBT sync
|
PERIODIC_SYNC_RETRY_CAP: "3h" # max retry interval for CBT sync
|
||||||
AUTO_FSTAB_UPDATE: "true" # automatically update fstab
|
AUTO_FSTAB_UPDATE: "true" # automatically update fstab
|
||||||
|
DEFAULT_NETWORK_PERSISTENCE: "false" # default value for persist source network interfaces in migration form
|
||||||
AUTO_PXE_BOOT_ON_CONVERSION: "false" # automatically set machine to PXE boot during cluster conversion
|
AUTO_PXE_BOOT_ON_CONVERSION: "false" # automatically set machine to PXE boot during cluster conversion
|
||||||
V2V_HELPER_POD_CPU_REQUEST: "1000m"
|
V2V_HELPER_POD_CPU_REQUEST: "1000m"
|
||||||
V2V_HELPER_POD_MEMORY_REQUEST: "2Gi"
|
V2V_HELPER_POD_MEMORY_REQUEST: "2Gi"
|
||||||
@@ -30,5 +32,7 @@ data:
|
|||||||
V2V_HELPER_POD_MEMORY_LIMIT: "5Gi"
|
V2V_HELPER_POD_MEMORY_LIMIT: "5Gi"
|
||||||
V2V_HELPER_POD_EPHEMERAL_STORAGE_REQUEST: "3Gi"
|
V2V_HELPER_POD_EPHEMERAL_STORAGE_REQUEST: "3Gi"
|
||||||
V2V_HELPER_POD_EPHEMERAL_STORAGE_LIMIT: "3Gi"
|
V2V_HELPER_POD_EPHEMERAL_STORAGE_LIMIT: "3Gi"
|
||||||
|
NTP_SERVERS: ""
|
||||||
HTTP_TIMEOUT_SECONDS: "30" # timeout for http calls in seconds
|
HTTP_TIMEOUT_SECONDS: "30" # timeout for http calls in seconds
|
||||||
|
PROXY_VM_OVA_URL: "https://vjailbreak-dev.s3.us-west-2.amazonaws.com/hot-add/ha-proxy-vm.ova" # OVA template URL for deploying the Hot-Add Proxy VM
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
# v0.4.5
|
||||||
|
|
||||||
|
- **Tag:** `v0.4.5`
|
||||||
|
- **Published:** 2026-05-06T06:19:56Z
|
||||||
|
- **Source release:** https://github.com/platform9/vjailbreak/releases/tag/v0.4.5
|
||||||
|
|
||||||
|
## Release Notes
|
||||||
|
|
||||||
|
## What's Changed
|
||||||
|
* Fix RDM configuration issue from UI by @geet-pf9 in https://github.com/platform9/vjailbreak/pull/1895
|
||||||
|
* Bug: Fix unauthenticated error when doing vcenter operations after a long time. by @spai-p9 in https://github.com/platform9/vjailbreak/pull/1891
|
||||||
|
* Fixed migration issue for shared rdm disk by @geet-pf9 in https://github.com/platform9/vjailbreak/pull/1902
|
||||||
|
* chore: Pre-release CRD generation for v0.4.5 by @github-actions[bot] in https://github.com/platform9/vjailbreak/pull/1904
|
||||||
|
|
||||||
|
|
||||||
|
**Full Changelog**: https://github.com/platform9/vjailbreak/compare/v0.4.4...v0.4.5
|
||||||
@@ -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
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
# v0.4.7
|
||||||
|
|
||||||
|
- **Tag:** `v0.4.7`
|
||||||
|
- **Published:** 2026-07-02T10:52:42Z
|
||||||
|
- **Source release:** https://github.com/platform9/vjailbreak/releases/tag/v0.4.7
|
||||||
|
|
||||||
|
## Release Notes
|
||||||
|
|
||||||
|
## What's Changed
|
||||||
|
* Fixed the missing --binding-profile '{"l2-port": true}' on ports created for VMs migrated onto L2-only networks in PCD by @spai-p9 in https://github.com/platform9/vjailbreak/pull/2015
|
||||||
|
* [2007] Fix fstab rewrite incorrectly activating commented bind-mount entries by @meghansh-pf9 in https://github.com/platform9/vjailbreak/pull/2011
|
||||||
|
* [1058] Configure NTP servers and system timezone for the vJailbreak VM directly from the UI by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/1742
|
||||||
|
* [1915] Added persist source network interfaces as a global setting by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2025
|
||||||
|
* Detect if we are using virtio-scsi controller for windows and pass --blockdriver for conversion by @spai-p9 in https://github.com/platform9/vjailbreak/pull/2027
|
||||||
|
* [1812] Fix volume cleanup when CreateTargetInstance times out by @meghansh-pf9 in https://github.com/platform9/vjailbreak/pull/2026
|
||||||
|
* [1975] Hot-Add Proxy VM UX improvements by @meghansh-pf9 in https://github.com/platform9/vjailbreak/pull/2023
|
||||||
|
* [1996] upgrade core components with guest OS migration fixes by @meghansh-pf9 in https://github.com/platform9/vjailbreak/pull/2031
|
||||||
|
* [1970] Add server group selection for agent scale-up to control placement affinity by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2032
|
||||||
|
* [1979] VM selection refresh button now revalidates VMware credentials by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2034
|
||||||
|
* [1872] Verify volume bootable state after SetBootable timeout by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2035
|
||||||
|
* prebake proxy VM OVA into appliance image by @meghansh-pf9 in https://github.com/platform9/vjailbreak/pull/2038
|
||||||
|
* Fix: Check hardware version and migration type only then check for cbt by @spai-p9 in https://github.com/platform9/vjailbreak/pull/2037
|
||||||
|
* [1980] Enhance user experience with new UI by @AbhijeetThakur in https://github.com/platform9/vjailbreak/pull/2040
|
||||||
|
* UI side changes for Hot add proxy improvements by @meghansh-pf9 in https://github.com/platform9/vjailbreak/pull/2030
|
||||||
|
* Rename Firstboot-Scheduler.ps1 to 0-Firstboot-Scheduler.ps1 by @noaboa97 in https://github.com/platform9/vjailbreak/pull/1994
|
||||||
|
* fix(v2v-helper): repair broken build on main by @valentin-pf9 in https://github.com/platform9/vjailbreak/pull/1945
|
||||||
|
* [1750] UI for edit and retry by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2024
|
||||||
|
* [2044] Consolidate edit-and-retry into single Retry action by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2021
|
||||||
|
* #2047 : Need UI enhancement in hot add proxy changes by @AbhijeetThakur in https://github.com/platform9/vjailbreak/pull/2048
|
||||||
|
* [2050] Optimize retry flow and add bulk retry by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2049
|
||||||
|
* [2052] Fix Windows firstboot loop by @meghansh-pf9 in https://github.com/platform9/vjailbreak/pull/2056
|
||||||
|
* [1915] Added persist source network interfaces as a global setting by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2058
|
||||||
|
* [2054] fix(retry): prefilled IP overrides not shown in Assign IP dialog on retry form by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2059
|
||||||
|
* [2062] fix - ssh keypair name missmatch by @meghansh-pf9 in https://github.com/platform9/vjailbreak/pull/2060
|
||||||
|
* #2051: Converting disk shows copy disk inside the migration details page by @AbhijeetThakur in https://github.com/platform9/vjailbreak/pull/2063
|
||||||
|
* #2067: Block/Grey out the already registered proxy vm, this could mismatch the secret by @AbhijeetThakur in https://github.com/platform9/vjailbreak/pull/2070
|
||||||
|
* [2079] Fix ProxyVM showing Ready status while SSH validation is failing by @meghansh-pf9 in https://github.com/platform9/vjailbreak/pull/2080
|
||||||
|
* #2068 #2078 #2069: VM is in conversion state but it shows Hot add transfer in UI and stuck in validating state by @AbhijeetThakur in https://github.com/platform9/vjailbreak/pull/2074
|
||||||
|
* [2077] Fix: Reset to Defaults must skip NTP server & timezone while migration running by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2084
|
||||||
|
* #2088: [UI] Windows VM should be blocked for selection as a proxy VM by @AbhijeetThakur in https://github.com/platform9/vjailbreak/pull/2089
|
||||||
|
* [2093] feat: add debug-bundle API to vpwned by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2090
|
||||||
|
* #2082: Debug logs, yamls are not present in logs fetched using log download button by @AbhijeetThakur in https://github.com/platform9/vjailbreak/pull/2092
|
||||||
|
* Fix Host Entries tab: duplicate description text and low-visibility button by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2099
|
||||||
|
|
||||||
|
## New Contributors
|
||||||
|
* @noaboa97 made their first contribution in https://github.com/platform9/vjailbreak/pull/1994
|
||||||
|
* @valentin-pf9 made their first contribution in https://github.com/platform9/vjailbreak/pull/1945
|
||||||
|
|
||||||
|
## Highlights
|
||||||
|
**Migration details page**: Added new page which shows in depth state monitoring for migration lifecycle.
|
||||||
|
|
||||||
|
**Vjailbreak Proxy**:
|
||||||
|
* End-to-end UI for registering a Proxy VM (SSH key upload, validation status), selecting Hot-Add as the copy method in the migration form, and monitoring hot-add-specific migration phases
|
||||||
|
* Verification now auto-installs missing dependencies on the Proxy VM during validation, eliminating the need for manual pre-configuration before registering
|
||||||
|
|
||||||
|
**Advanced Configuration Management**
|
||||||
|
* Configure **NTP servers** and **system timezone** for vJailbreak VMs directly from the UI.
|
||||||
|
* Introduced **server group selection** for agent scale-up, enabling better placement and affinity control.
|
||||||
|
|
||||||
|
**Enhanced Retry Experience**
|
||||||
|
* Introduced a new Edit & Retry capability, allowing users to modify migration settings and retry failed migrations without recreating the migration.
|
||||||
|
* Simplified recovery with a unified Retry action and support for Bulk Retry, reducing manual effort.
|
||||||
|
|
||||||
|
|
||||||
|
## Known Limitations
|
||||||
|
|
||||||
|
**Proxy VM OVA requires ESXi 8.0 U2 or higher**: The bundled OVA template uses virtual hardware version vmx-21, which is incompatible with older ESXi hosts. Attempting to deploy it on ESXi 7.x will fail with an "unsupported hardware family" error. For ESXi 7.x environments, the Proxy VM must be created and configured manually instead of using the OVA deploy option.
|
||||||
|
|
||||||
|
**Full Changelog**: https://github.com/platform9/vjailbreak/compare/v0.4.6...v0.4.7
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
# v0.4.8
|
||||||
|
|
||||||
|
- **Tag:** `v0.4.8`
|
||||||
|
- **Published:** 2026-08-04T09:22:20Z
|
||||||
|
- **Source release:** https://github.com/platform9/vjailbreak/releases/tag/v0.4.8
|
||||||
|
|
||||||
|
## Release Notes
|
||||||
|
|
||||||
|
## What's Changed
|
||||||
|
* #2067: Block/Grey out the already registered proxy vm, this could mismatch the secret by @AbhijeetThakur in https://github.com/platform9/vjailbreak/pull/2105
|
||||||
|
* [2083] Infer hotplug intent from assigned flavor by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2109
|
||||||
|
* fix: security workflow fork PR comments + graphify git noise by @OmkarDeshpande7 in https://github.com/platform9/vjailbreak/pull/2116
|
||||||
|
* test(v2v-helper): repair stale mkinitrd LVM wrapper unit tests by @gtherond in https://github.com/platform9/vjailbreak/pull/2075
|
||||||
|
* [2106] Fix wrong stage shown for Hot-Add proxy migrations by @meghansh-pf9 in https://github.com/platform9/vjailbreak/pull/2117
|
||||||
|
* [2085] Block Persist source network interfaces when mapped network subnet doesn't match VM IPs by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2110
|
||||||
|
* [2095] Serve debug bundle as .tar.gz archive instead of single .txt file by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2112
|
||||||
|
* [2113] Improved subnet mismatch warning and Persist IP disabled warning by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2126
|
||||||
|
* refactor: remove deprecated files and components, streamline package dependencies by @AbhijeetThakur in https://github.com/platform9/vjailbreak/pull/2114
|
||||||
|
* Don't call openstackcreds per cluster to get tenant name by @spai-p9 in https://github.com/platform9/vjailbreak/pull/2057
|
||||||
|
* #2087 : Add confirmation dialog for node reprovisioning by @AbhijeetThakur in https://github.com/platform9/vjailbreak/pull/2131
|
||||||
|
* #2094: [UI] Update Controller Log Section Styling to Match Migration Details Logs by @AbhijeetThakur in https://github.com/platform9/vjailbreak/pull/2136
|
||||||
|
* [2128] Show assigned flavor and disk size for VMs selected for migration by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2137
|
||||||
|
* [1930] Fix CentOS 7 conversion failure from e2fsck bitmap errors by @meghansh-pf9 in https://github.com/platform9/vjailbreak/pull/2134
|
||||||
|
* Delete associated agent nodes when OpenstackCreds is deleted by @OmkarDeshpande7 in https://github.com/platform9/vjailbreak/pull/2119
|
||||||
|
* #2125: Move Proxy VM Credentials Navigation from Credentials to Migration Menu by @AbhijeetThakur in https://github.com/platform9/vjailbreak/pull/2138
|
||||||
|
* Refactor: ReservePortsForVM by @spai-p9 in https://github.com/platform9/vjailbreak/pull/2140
|
||||||
|
* [2012] Fix SUSE GRUB Legacy device references post-migration by @meghansh-pf9 in https://github.com/platform9/vjailbreak/pull/2133
|
||||||
|
* AI analysis of migration failures by @OmkarDeshpande7 in https://github.com/platform9/vjailbreak/pull/1998
|
||||||
|
* [1801] Twice HOTPLUG_CPU_MAX/HOTPLUG_MEMORY_MAX metadata so migrated VMs can be resized on PCD by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2127
|
||||||
|
* [2167] fix(v2v-helper): Install vendored libnbd with libnbd-devel by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2166
|
||||||
|
* When Ip is empty and fallback to dhcp true ask pcd to assign ip via dhcp by @spai-p9 in https://github.com/platform9/vjailbreak/pull/2153
|
||||||
|
* [2161] fix(ui): Global Settings Save button silently dead by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2162
|
||||||
|
* [428] Added ability to preserve tags, attributes, and custom metadata attached to the virtual machine by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2146
|
||||||
|
* [2115] Fix IP address not populating on port creation due to MAC address case mismatch by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2160
|
||||||
|
* [428] UI: Added ability to preserve tags, attributes, and custom metadata attached to the virtual machine by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2145
|
||||||
|
* [2096] Default removeVMwareTools to true by @OmkarDeshpande7 in https://github.com/platform9/vjailbreak/pull/2159
|
||||||
|
* Make clean up both agents and vjb nodes to run as background and improve reliability by @spai-p9 in https://github.com/platform9/vjailbreak/pull/2155
|
||||||
|
* Refactoring boot partition detection by @meghansh-pf9 in https://github.com/platform9/vjailbreak/pull/2168
|
||||||
|
* Separate out nbd and virtv2v debug logs by @spai-p9 in https://github.com/platform9/vjailbreak/pull/2165
|
||||||
|
https://github.com/platform9/vjailbreak/pull/2172
|
||||||
|
* [2173] Remove beta tag from Storage Accelerated Copy by @meghansh-pf9 in https://github.com/platform9/vjailbreak/pull/2177
|
||||||
|
* [2152] Add MigrationBlueprint CRD to support migration templates by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2158
|
||||||
|
* [2175] UI patch call for proxy vm retry by @meghansh-pf9 in https://github.com/platform9/vjailbreak/pull/2181
|
||||||
|
* [2176] Fix tags toggle needing two clicks to enable by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2183
|
||||||
|
* [2184] Fix Migration Options toggles needing two clicks to enable by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2185
|
||||||
|
* #2120: Add Support for Migration Templates and Saved Configurations by @AbhijeetThakur in https://github.com/platform9/vjailbreak/pull/2180
|
||||||
|
* Configure guest network incase of ubuntu for fallback to dhcp case by @spai-p9 in https://github.com/platform9/vjailbreak/pull/2182
|
||||||
|
* [2178] fix(migration): disable persist network interfaces when Preserve IP is off and mapped to diff network by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2189
|
||||||
|
* Feature: Add error propogation to UI from debug logs for failures by @spai-p9 in https://github.com/platform9/vjailbreak/pull/2170
|
||||||
|
* [2213] Fix migration stuck in ConvertingDisk after transient VM creation timeout by @OmkarDeshpande7 in https://github.com/platform9/vjailbreak/pull/2192
|
||||||
|
* [2143] unique port names for multi-NIC VMs using network+subnet+vmname by @OmkarDeshpande7 in https://github.com/platform9/vjailbreak/pull/2147
|
||||||
|
* [2191] Grid/list toggle wraps left instead of staying inline on Templates tooolbar by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2199
|
||||||
|
* [2193] Prevent checkbox selection column from being hidden via Manage Columns by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2198
|
||||||
|
* [2194] Fix: Converting Disk status should not show count of disks by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2200
|
||||||
|
* [2202] Fix: AI Analysis key configuration redirect to correct settings tab by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2204
|
||||||
|
* feat: add data-only migration mode (no VM creation) (#492) by @OmkarDeshpande7 in https://github.com/platform9/vjailbreak/pull/2171
|
||||||
|
* Support encrypted volume types in pcd. by @spai-p9 in https://github.com/platform9/vjailbreak/pull/2208
|
||||||
|
* [2201] Show migration failure messages on the UI by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2205
|
||||||
|
* [2203] Fix: Disable migration progress bar by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2210
|
||||||
|
* #2209: Step check marks doesnt disable if user disable the option by @AbhijeetThakur in https://github.com/platform9/vjailbreak/pull/2215
|
||||||
|
* [2214] Fix: Controller/pod log search returns zero results for lines that exist by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2221
|
||||||
|
* [2217] Fix: Remove stale network/storage mappings when VMs are deselected by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2222
|
||||||
|
* feat(dev): add Claude Code agent definitions for vjailbreak workflows by @OmkarDeshpande7 in https://github.com/platform9/vjailbreak/pull/2223
|
||||||
|
* [2195] Fix incorrect step timings on the migration detail page by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2225
|
||||||
|
* [2213] Fix: Migration phase permanently frozen at Failed from transient kubelet events by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2229
|
||||||
|
* [2234] Fix: remove VM selection from template creation and refactor pruning of mappings by @sarika-pf9 in https://github.com/platform9/vjailbreak/pull/2233
|
||||||
|
* [CI] modify pre-release actions to not skip builds by @OmkarDeshpande7 in https://github.com/platform9/vjailbreak/pull/2239
|
||||||
|
|
||||||
|
## New Contributors
|
||||||
|
* @gtherond made their first contribution in https://github.com/platform9/vjailbreak/pull/2075
|
||||||
|
|
||||||
|
## Highlights
|
||||||
|
|
||||||
|
* Introduced log analysis for failed migrations using Anthropic AI to help identify potential root causes and simplify troubleshooting.
|
||||||
|
* Added ability to preserve source vCenter VM tags, attributes, and custom metadata during migration.
|
||||||
|
* Promoted Storage Assisted Migration to General Availability (GA).
|
||||||
|
* Added support for Migration Templates and Saved Configurations to streamline repeated migration workflows.
|
||||||
|
* Added support for Data-Only migration mode, enabling data transfer without creating the destination VM.
|
||||||
|
* Added support for migrating KMS-encrypted source VMs.
|
||||||
|
|
||||||
|
## Known Limitations
|
||||||
|
|
||||||
|
* The **Data-Only** migration option is not preserved when a migration is retried using the **Retry** button. See [[Issue #2245](https://github.com/platform9/vjailbreak/issues/2245)] for details.
|
||||||
|
* Migrations of VMs running **RHEL 7.9** may intermittently encounter a disk index-related issue. Retrying the migration typically resolves the problem.
|
||||||
|
* When using the **Hotplug** flavor for migration, the destination VM's **Maximum CPU** and **Maximum Memory** values are set to twice the original VM's configured CPU and memory in vCenter.
|
||||||
|
* Migration of **SUSE Linux Enterprise Server (SLES)** and **SUSE Linux Enterprise Desktop (SLED)** systems using **Legacy GRUB 0.97** is not supported.
|
||||||
|
|
||||||
|
**Full Changelog**: https://github.com/platform9/vjailbreak/compare/v0.4.7...v0.4.8
|
||||||
Reference in New Issue
Block a user