apiVersion: v1 kind: Namespace metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration control-plane: controller-manager name: migration-system --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.17.1 name: arraycreds.vjailbreak.k8s.pf9.io spec: group: vjailbreak.k8s.pf9.io names: kind: ArrayCreds listKind: ArrayCredsList plural: arraycreds singular: arraycreds scope: Namespaced versions: - additionalPrinterColumns: - jsonPath: .spec.vendorType name: Vendor type: string - jsonPath: .spec.openstackMapping.volumeType name: VolumeType type: string - jsonPath: .spec.openstackMapping.cinderBackendName name: Backend type: string - jsonPath: .status.phase name: Phase type: string - jsonPath: .status.arrayValidationStatus name: Status type: string name: v1alpha1 schema: openAPIV3Schema: description: |- ArrayCreds is the Schema for the storage array credentials API that defines authentication and connection details for storage arrays. It provides a secure way to store and validate storage array credentials for use in migration operations, supporting multiple vendors, but as of now We have qualified pure storage flash array. 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: ArrayCredsSpec defines the desired state of ArrayCreds properties: autoDiscovered: description: AutoDiscovered indicates if this ArrayCreds was auto-discovered from OpenStack type: boolean netAppConfig: description: |- NetAppConfig holds NetApp-specific configuration. Required when VendorType is "netapp" before a migration can run. May be left empty at creation time so the controller can surface available SVMs/FlexVols on status.backendTargets for interactive selection. properties: flexVol: description: FlexVol is the FlexVol name (within the SVM) where LUNs will be created. type: string svm: description: SVM is the Storage Virtual Machine name that owns the target FlexVol. type: string type: object openstackMapping: description: OpenStackMapping is the openstack mapping for this array properties: cinderBackendName: description: |- CinderBackendName is the Cinder backend name for this mapping This is the backend configured in cinder.conf (e.g., "pure-01") type: string cinderBackendPool: description: CinderBackendPool is the pool name within the backend (optional) type: string cinderHost: description: |- CinderHost is the full Cinder host string for manage API Format: hostname@backend or hostname@backend#pool (e.g., "pcd-ce@pure-iscsi-1#vt-pure-iscsi") type: string volumeType: description: VolumeType is the Cinder volume type associated with this mapping type: string required: - cinderBackendName - volumeType type: object secretRef: description: SecretRef is the reference to the Kubernetes secret holding storage array credentials properties: apiVersion: description: API version of the referent. type: string fieldPath: description: |- If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. type: string kind: description: |- Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string name: description: |- Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string namespace: description: |- Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ type: string resourceVersion: description: |- Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency type: string uid: description: |- UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids type: string type: object x-kubernetes-map-type: atomic vendorType: description: VendorType is the storage array vendor type (e.g., pure, ontap, hpalletra) type: string required: - vendorType type: object status: description: ArrayCredsStatus defines the observed state of ArrayCreds properties: arrayValidationMessage: description: ArrayValidationMessage is the message associated with the storage array validation type: string arrayValidationStatus: description: |- ArrayValidationStatus is the status of the storage array validation Possible values: Pending, Succeeded, Failed, AwaitingCredentials type: string backendTargets: description: |- BackendTargets is a vendor-neutral two-level tree of selectable array targets (e.g., NetApp SVMs -> FlexVols). Populated by the controller after successful credential validation for vendors that expose a selectable target hierarchy. UIs consume this to render a picker. items: description: BackendTargetGroup groups related targets (e.g., a NetApp SVM and its FlexVols). properties: children: items: description: |- BackendTarget is a single selectable target within a BackendTargetGroup (e.g., a NetApp FlexVol, a Dell pool). properties: name: type: string uuid: type: string required: - name type: object type: array name: type: string uuid: type: string required: - name type: object type: array dataStore: description: DataStore is the list of datastores associated with this array items: description: DatastoreInfo holds datastore information including backing device NAA properties: backingNAA: type: string backingUUID: type: string capacity: format: int64 type: integer freeSpace: format: int64 type: integer moID: type: string name: type: string type: type: string required: - backingNAA - backingUUID - capacity - freeSpace - moID - name - type type: object type: array phase: description: |- Phase indicates the current phase of the ArrayCreds Possible values: Discovered, Configured, Validated, Failed, NeedsBackendSelection 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 name: arraycredsmappings.vjailbreak.k8s.pf9.io spec: group: vjailbreak.k8s.pf9.io names: kind: ArrayCredsMapping listKind: ArrayCredsMappingList plural: arraycredsmappings singular: arraycredsmapping scope: Namespaced versions: - additionalPrinterColumns: - jsonPath: .status.validationStatus name: Status type: string - jsonPath: .metadata.creationTimestamp name: Age type: date name: v1alpha1 schema: openAPIV3Schema: description: |- ArrayCredsMapping is the Schema for the arraycredsmappings API that defines mappings between VMware datastores and ArrayCreds for StorageAcceleratedCopy storage migration 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: |- ArrayCredsMappingSpec defines the desired state of ArrayCredsMapping including mappings between VMware datastores and ArrayCreds for StorageAcceleratedCopy data copy properties: mappings: description: Mappings is a list of datastore to ArrayCreds mappings 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 required: - mappings type: object status: description: ArrayCredsMappingStatus defines the observed state of ArrayCredsMapping properties: validationMessage: description: |- ValidationMessage provides detailed validation information including information about available ArrayCreds and any validation errors type: string validationStatus: description: |- ValidationStatus indicates the validation status of the ArrayCreds mapping Valid states include: "Valid", "Invalid", "Pending", "ValidationFailed" 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 name: bmconfigs.vjailbreak.k8s.pf9.io spec: group: vjailbreak.k8s.pf9.io names: kind: BMConfig listKind: BMConfigList plural: bmconfigs singular: bmconfig scope: Namespaced versions: - name: v1alpha1 schema: openAPIV3Schema: description: |- BMConfig is the Schema for the bmconfigs API that defines authentication and configuration details for Bare Metal Controller (BMC) providers such as MAAS. It contains credentials, connection information, and boot source configurations needed to provision physical hosts for use during the ESXi to PCD migration process. BMConfig enables the automatic provisioning of PCD hosts as replacement infrastructure for migrated ESXi hosts. 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: BMConfigSpec defines the desired state of BMConfig properties: apiKey: description: APIKey is the API key for the BM server type: string apiUrl: description: APIUrl is the API URL for the BM server type: string bootSource: description: BootSource is the boot source for the BMC properties: release: default: jammy description: Release is the OS release version to be used (e.g., "jammy" for Ubuntu 22.04) type: string required: - release type: object insecure: default: false description: Insecure is a boolean indicating whether to use insecure connection type: boolean password: description: Password is the password for the BM server type: string providerType: default: MAAS description: ProviderType is the BMC provider type type: string userDataSecretRef: description: UserDataSecretRef is the reference to the secret containing user data for the BMC properties: name: description: name is unique within a namespace to reference a secret resource. type: string namespace: description: namespace defines the space within which the secret name must be unique. type: string type: object x-kubernetes-map-type: atomic userName: description: UserName is the username for the BM server type: string required: - apiKey - apiUrl - providerType type: object status: description: BMConfigStatus defines the observed state of BMConfig properties: validationMessage: description: ValidationMessage is the message associated with the validation type: string validationStatus: description: ValidationStatus is the status of the validation 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 name: clustermigrations.vjailbreak.k8s.pf9.io spec: group: vjailbreak.k8s.pf9.io names: kind: ClusterMigration listKind: ClusterMigrationList plural: clustermigrations singular: clustermigration scope: Namespaced versions: - additionalPrinterColumns: - jsonPath: .status.phase name: Phase type: string - jsonPath: .status.currentESXI name: Current ESXI type: string - jsonPath: .metadata.creationTimestamp name: Age type: date name: v1alpha1 schema: openAPIV3Schema: description: |- ClusterMigration is the Schema for the clustermigrations API that orchestrates the migration of an entire VMware vCenter cluster to Platform9 Distributed Cloud (PCD). It manages the ordered migration of ESXi hosts within a cluster, tracking progress and maintaining references to required credentials and migration plans. ClusterMigration resources coordinate with ESXIMigration resources to ensure hosts are migrated in the correct sequence with proper dependency management. 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: ClusterMigrationSpec defines the desired state of ClusterMigration properties: clusterName: description: ClusterName is the name of the vCenter cluster to be migrated type: string esxiMigrationSequence: description: ESXIMigrationSequence is the sequence of ESXi hosts to be migrated items: type: string type: array openstackCredsRef: description: OpenstackCredsRef is the reference to the OpenStack credentials 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 rollingMigrationPlanRef: description: RollingMigrationPlanRef is the reference to the RollingMigrationPlan 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 vmwareCredsRef: description: VMwareCredsRef is the reference to the VMware credentials 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: - clusterName - esxiMigrationSequence - openstackCredsRef - rollingMigrationPlanRef - vmwareCredsRef type: object status: description: ClusterMigrationStatus defines the observed state of ClusterMigration properties: currentESXi: description: CurrentESXi is the name of the current ESXi host being migrated type: string message: description: Message is the message associated with the current state of the migration type: string phase: description: Phase is the current phase of the migration enum: - Pending - Running - Succeeded - Failed - Paused type: string required: - currentESXi - message - phase 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 name: esximigrations.vjailbreak.k8s.pf9.io spec: group: vjailbreak.k8s.pf9.io names: kind: ESXIMigration listKind: ESXIMigrationList plural: esximigrations singular: esximigration scope: Namespaced versions: - name: v1alpha1 schema: openAPIV3Schema: description: |- ESXIMigration is the Schema for the esximigrations API that defines the process of migrating an ESXi host to PCD, including putting it in maintenance mode, migrating all VMs, and finally removing it from vCenter inventory after completion 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: |- ESXIMigrationSpec defines the desired state of ESXIMigration including the ESXi host to migrate and the references to credentials and migration plan properties: esxiName: description: ESXiName is the name of the ESXi host to be migrated type: string openstackCredsRef: description: OpenstackCredsRef is the reference to the OpenStack credentials 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 rollingMigrationPlanRef: description: RollingMigrationPlanRef is the reference to the RollingMigrationPlan 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 vmwareCredsRef: description: VMwareCredsRef is the reference to the VMware credentials 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: - esxiName - openstackCredsRef - rollingMigrationPlanRef - vmwareCredsRef type: object status: description: |- ESXIMigrationStatus defines the observed state of ESXIMigration including the list of VMs on the host, current phase, and status messages properties: message: description: Message is the message associated with the current state of the migration type: string phase: description: |- Phase is the current phase of the migration lifecycle The final phases include 'Succeeded' when the ESXi host has been successfully removed from vCenter inventory after migration is complete type: string vms: description: VMs is the list of VMs present on the ESXi host items: type: string type: array 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 name: esxisshcreds.vjailbreak.k8s.pf9.io spec: group: vjailbreak.k8s.pf9.io names: kind: ESXiSSHCreds listKind: ESXiSSHCredsList plural: esxisshcreds singular: esxisshcreds scope: Namespaced versions: - additionalPrinterColumns: - jsonPath: .status.validationStatus name: Status type: string - jsonPath: .status.successfulHosts name: Successful type: integer - jsonPath: .status.failedHosts name: Failed type: integer - jsonPath: .status.totalHosts name: Total type: integer name: v1alpha1 schema: openAPIV3Schema: description: |- ESXiSSHCreds is the Schema for the esxisshcreds API that defines SSH credentials for connecting to ESXi hosts. It validates SSH connectivity to ESXi hosts either discovered from vCenter via VMwareCreds or explicitly specified in the hosts list. The controller validates connections in parallel with throttling to avoid overwhelming the network, and reports per-host validation results in the status. 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: ESXiSSHCredsSpec defines the desired state of ESXiSSHCreds properties: forceReconcileToken: description: |- ForceReconcileToken is an opaque token that can be updated to force a reconciliation. Updating this field will increment metadata.generation and trigger the controller. type: string secretRef: description: |- SecretRef is the reference to the Kubernetes secret holding the SSH private key The secret should contain a key named "privateKey" with the SSH private key in PEM format properties: apiVersion: description: API version of the referent. type: string fieldPath: description: |- If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. type: string kind: description: |- Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string name: description: |- Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string namespace: description: |- Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ type: string resourceVersion: description: |- Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency type: string uid: description: |- UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids type: string type: object x-kubernetes-map-type: atomic username: default: root description: 'Username is the SSH username to use for connecting to ESXi hosts (default: "root")' type: string required: - secretRef type: object status: description: ESXiSSHCredsStatus defines the observed state of ESXiSSHCreds properties: failedHosts: description: FailedHosts is the number of ESXi hosts that failed validation type: integer lastValidationTime: description: LastValidationTime is the timestamp of the last validation run format: date-time type: string successfulHosts: description: SuccessfulHosts is the number of ESXi hosts that passed validation type: integer totalHosts: description: TotalHosts is the total number of ESXi hosts to validate type: integer validationMessage: description: ValidationMessage is the message associated with the overall validation type: string validationStatus: description: |- ValidationStatus is the overall status of the ESXi SSH validation Possible values: Pending, Validating, Succeeded, PartiallySucceeded, Failed 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 name: migrationplans.vjailbreak.k8s.pf9.io spec: group: vjailbreak.k8s.pf9.io names: kind: MigrationPlan listKind: MigrationPlanList plural: migrationplans singular: migrationplan scope: Namespaced versions: - additionalPrinterColumns: - jsonPath: .status.migrationStatus name: Status type: string - jsonPath: .spec.migrationTemplate name: Migration Template type: string - jsonPath: .metadata.creationTimestamp name: Age type: date name: v1alpha1 schema: openAPIV3Schema: description: |- MigrationPlan is the Schema for the migrationplans API that defines how to migrate virtual machines from VMware to OpenStack including migration strategy and scheduling. It allows administrators to configure migration parameters such as timing, health checks, and VM-specific settings for bulk VM migration operations between environments. 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: |- MigrationPlanSpec defines the desired state of MigrationPlan including the migration template, strategy, and the list of virtual machines to migrate properties: advancedOptions: description: AdvancedOptions is a list of advanced options for the migration 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: description: RemoveVMwareTools instructs the migration helper to remove VMware Tools post migration type: boolean type: object fallbackToDHCP: type: boolean firstBootScript: default: echo "Add your startup script here!" type: string migrationStrategy: description: MigrationStrategy is the strategy to be used for the migration properties: adminInitiatedCutOver: default: false type: boolean arrayOffload: default: false type: boolean dataCopyStart: format: date-time type: string 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 migrationTemplate: description: MigrationTemplate is the template to be used for the migration type: string networkOverridesPerVM: additionalProperties: items: description: NICOverride defines per-NIC overrides for IP and MAC preservation during migration properties: UserAssignedIP: type: string interfaceIndex: description: InterfaceIndex is the zero-based index of the NIC type: integer preserveIP: description: |- PreserveIP indicates whether to preserve the source VM's IP address for this NIC. When nil the migration default (preserve) is used. type: boolean preserveMAC: description: |- PreserveMAC indicates whether to preserve the source VM's MAC address for this NIC. When nil the migration default (preserve) is used. type: boolean required: - interfaceIndex type: object type: array description: |- NetworkOverridesPerVM is a map of VM names to per-NIC network overrides Only NICs with non-default settings (i.e., preserve=false) need to be listed type: object postMigrationAction: description: PostMigrationAction defines the post migration action for the virtual machine properties: folderName: type: string moveToFolder: type: boolean renameVm: type: boolean suffix: type: string type: object securityGroups: items: type: string type: array serverGroup: type: string virtualMachines: description: VirtualMachines is a list of virtual machines to be migrated items: items: type: string type: array type: array required: - migrationStrategy - migrationTemplate - virtualMachines type: object status: description: |- MigrationPlanStatus defines the observed state of MigrationPlan including the current status and progress of the migration properties: migrationMessage: description: MigrationMessage is the message associated with the migration type: string migrationStatus: description: |- MigrationStatus is the status of the migration using Kubernetes PodPhase states (Pending, Running, Succeeded, Failed, Unknown) type: string required: - migrationMessage - migrationStatus 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 name: migrations.vjailbreak.k8s.pf9.io spec: group: vjailbreak.k8s.pf9.io names: kind: Migration listKind: MigrationList plural: migrations singular: migration scope: Namespaced versions: - additionalPrinterColumns: - jsonPath: .status.phase name: Phase type: string - jsonPath: .status.agentName name: Agent Name type: string - jsonPath: .spec.migrationPlan name: MigrationPlan type: string - jsonPath: .metadata.creationTimestamp name: Age type: date name: v1alpha1 schema: openAPIV3Schema: description: |- Migration is the Schema for the migrations API that represents a single virtual machine migration job from VMware to OpenStack. It tracks the complete migration lifecycle including validation, data transfer, disk conversion, and cutover phases. Migration resources provide detailed status monitoring, error handling, and manual intervention points like cutover initiation. Each Migration is associated with a MigrationPlan and executes on a specific VjailbreakNode agent, tracking progress via status updates and condition changes. 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: Spec defines the desired state of Migration properties: disconnectSourceNetwork: description: |- DisconnectSourceNetwork specifies whether to disconnect the source VM's network interfaces after a successful migration to prevent network conflicts. Defaults to false. type: boolean imageMetadata: additionalProperties: type: string description: |- ImageMetadata is the merged map of Cinder volume_image_metadata properties resolved from the MigrationPlan's selected VolumeImageProfiles after OS-family filtering. type: object initiateCutover: description: InitiateCutover is the flag to initiate cutover type: boolean migrationPlan: description: MigrationPlan is the name of the migration plan type: string migrationType: description: MigrationType indicates whether this is a hot (live) or cold migration enum: - hot - cold - mock type: string networkOverrides: description: NetworkOverrides is the JSON-serialized per-NIC overrides for IP and MAC preservation type: string podRef: description: PodRef is the name of the pod type: string vmName: description: VMName is the name of the VM getting migrated from VMWare to Openstack type: string required: - initiateCutover - migrationPlan - podRef - vmName type: object status: description: Status defines the observed state of Migration properties: agentName: description: AgentName is the name of the agent where migration is running type: string conditions: description: Conditions is the list of conditions of the migration object pod items: description: PodCondition contains details for the current condition of this pod. properties: lastProbeTime: description: Last time we probed the condition. format: date-time type: string lastTransitionTime: description: Last time the condition transitioned from one status to another. format: date-time type: string message: description: Human-readable message indicating details about last transition. type: string observedGeneration: description: |- If set, this represents the .metadata.generation that the pod condition was set based upon. This is an alpha field. Enable PodObservedGenerationTracking to be able to use this field. format: int64 type: integer reason: description: Unique, one-word, CamelCase reason for the condition's last transition. type: string status: description: |- Status is the status of the condition. Can be True, False, Unknown. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions type: string type: description: |- Type is the type of the condition. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions type: string required: - status - type type: object type: array currentDisk: description: |- CurrentDisk tracks which disk is currently being copied (e.g., "0", "1") Extracted from migration pod events type: string phase: description: Phase is the current phase of the migration enum: - Pending - Validating - ValidationFailed - AwaitingDataCopyStart - CopyingBlocks - CopyingChangedBlocks - ConvertingDisk - AwaitingCutOverStartTime - AwaitingAdminCutOver - Succeeded - Failed - Unknown - ConnectingToESXi - CreatingInitiatorGroup - CreatingVolume - ImportingToCinder - MappingVolume - RescanningStorage - XCOPYInProgress - SnapshottingSourceVM - AttachingDisksToProxy - IdentifyingBlockDevices - HotAddTransferInProgress - HotAddCleanup type: string retryable: description: |- Retryable indicates whether this migration can be retried when it fails. Set to false for VMs with RDM (Raw Device Mapping) disks that share storage, as RDM disk migration state prevents automatic retry. type: boolean syncWarningMessage: description: |- SyncWarningMessage contains the warning message when periodic sync is in a warning state. If non-empty, indicates the sync failed but will auto-retry on next interval. type: string totalDisks: description: TotalDisks is the total number of disks to be migrated type: integer required: - phase 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 name: migrationtemplates.vjailbreak.k8s.pf9.io spec: group: vjailbreak.k8s.pf9.io names: kind: MigrationTemplate listKind: MigrationTemplateList plural: migrationtemplates singular: migrationtemplate scope: Namespaced versions: - name: v1alpha1 schema: openAPIV3Schema: description: |- MigrationTemplate is the Schema for the migrationtemplates API that defines how VMs should be migrated from VMware to OpenStack including network and storage mappings. It serves as a reusable template that can be referenced by multiple migration plans, providing configuration for source and destination environments, OS-specific settings, and network/storage mappings. Migration templates enable consistent configuration across multiple VM migrations and simplify the definition of migration plans. 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: MigrationTemplateSpec defines the desired state of MigrationTemplate including source/destination environments and mappings properties: arrayCredsMapping: description: |- ArrayCredsMapping is the reference to the ArrayCredsMapping resource that defines datastore to ArrayCreds mappings This is used for StorageAcceleratedCopy data copy method type: string destination: description: Destination is the destination details for the virtual machine properties: openstackRef: description: OpenstackRef is the reference to the OpenStack credentials to be used as the destination environment type: string required: - openstackRef type: object networkMapping: 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 enum: - 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: vmwareRef: description: VMwareRef is the reference to the VMware credentials to be used as the source environment type: string required: - vmwareRef type: object storageCopyMethod: default: normal description: |- StorageCopyMethod indicates the method to use for storage migration Valid values: "normal" (default), "StorageAcceleratedCopy", "HotAdd" enum: - normal - StorageAcceleratedCopy - HotAdd type: string storageMapping: description: |- StorageMapping is the reference to the StorageMapping resource that defines source to destination storage mappings This is used for normal data copy method type: string targetPCDClusterName: description: TargetPCDClusterName is the name of the PCD cluster where the virtual machine will be migrated type: string useFlavorless: description: UseFlavorless indicates if the migration should use flavorless VM creation for PCD. type: boolean useGPUFlavor: description: UseGPUFlavor indicates if the migration should filter and use GPU-enabled flavors. type: boolean virtioWinDriver: description: VirtioWinDriver is the driver to be used for the virtual machine type: string required: - destination - source 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 name: networkmappings.vjailbreak.k8s.pf9.io spec: group: vjailbreak.k8s.pf9.io names: kind: NetworkMapping listKind: NetworkMappingList plural: networkmappings singular: networkmapping scope: Namespaced versions: - additionalPrinterColumns: - jsonPath: .status.networkMappingValidationStatus name: Status type: string - jsonPath: .metadata.creationTimestamp name: Age type: date name: v1alpha1 schema: openAPIV3Schema: description: |- NetworkMapping is the Schema for the networkmappings API that defines mappings between VMware and OpenStack networks to be used during migration 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: |- NetworkMappingSpec defines the desired state of NetworkMapping including mappings between VMware and OpenStack networks properties: networks: description: Networks is the list of network mappings between source (VMware) and target (OpenStack) environments 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 required: - networks type: object status: description: NetworkMappingStatus defines the observed state of NetworkMapping properties: networkMappingValidationMessage: description: |- NetworkmappingValidationMessage provides detailed validation information including information about available networks and any validation errors type: string networkMappingValidationStatus: description: |- NetworkmappingValidationStatus indicates the validation status of the network mapping Valid states include: "Valid", "Invalid", "Pending", "ValidationFailed" 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 name: openstackcreds.vjailbreak.k8s.pf9.io spec: group: vjailbreak.k8s.pf9.io names: kind: OpenstackCreds listKind: OpenstackCredsList plural: openstackcreds singular: openstackcreds scope: Namespaced versions: - additionalPrinterColumns: - jsonPath: .status.openstackValidationStatus name: Status type: string - jsonPath: .spec.secretRef.name name: Secret Name type: string - jsonPath: .metadata.creationTimestamp name: Age type: date name: v1alpha1 schema: openAPIV3Schema: description: |- OpenstackCreds is the Schema for the OpenStack credentials API that defines authentication and connection details for OpenStack environments. It provides a secure way to store and validate OpenStack credentials for use in migration operations, including authentication information, available compute flavors, volume types, networks, and Platform9 Distributed Cloud host configurations. 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: OpenstackCredsSpec defines the desired state of OpenstackCreds properties: flavors: description: Flavors is the list of available flavors in openstack items: description: |- Flavor represent (virtual) hardware configurations for server resources in a region. properties: OS-FLV-EXT-DATA:ephemeral: description: Ephemeral is the amount of ephemeral disk space, measured in GB. type: integer description: description: |- Description is a free form description of the flavor. Limited to 65535 characters in length. Only printable characters are allowed. New in version 2.55 type: string disk: description: Disk is the amount of root disk, measured in GB. type: integer extra_specs: additionalProperties: type: string description: |- Properties is a dictionary of the flavor’s extra-specs key-and-value pairs. This will only be included if the user is allowed by policy to index flavor extra_specs New in version 2.61 type: object id: description: ID is the flavor's unique ID. type: string name: description: Name is the name of the flavor. type: string os-flavor-access:is_public: description: IsPublic indicates whether the flavor is public. type: boolean ram: description: RAM is the amount of memory, measured in MB. type: integer rxtx_factor: description: RxTxFactor describes bandwidth alterations of the flavor. type: number vcpus: description: VCPUs indicates how many (virtual) CPUs are available for this flavor. type: integer required: - OS-FLV-EXT-DATA:ephemeral - description - disk - extra_specs - id - name - os-flavor-access:is_public - ram - rxtx_factor - vcpus type: object type: array osAuthToken: type: string osAuthUrl: type: string osDomainName: type: string osIdentityApiVersion: type: string osInsecure: type: boolean osInterface: type: string osPassword: type: string osRegionName: type: string osTenantName: type: string osUsername: type: string pcdHostConfig: description: PCDHostConfig is the list of available clusters in openstack items: description: HostConfig defines the configuration for a Platform9 Distributed Cloud host properties: clusterName: type: string hostLivenessInterface: type: string id: type: string imagelibInterface: type: string mgmtInterface: type: string name: type: string networkLabels: additionalProperties: type: string type: object tunnelingInterface: type: string vmConsoleInterface: type: string type: object type: array projectName: description: ProjectName is the name of the project in openstack type: string secretRef: description: SecretRef is the reference to the Kubernetes secret holding OpenStack credentials properties: apiVersion: description: API version of the referent. type: string fieldPath: description: |- If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. type: string kind: description: |- Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string name: description: |- Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string namespace: description: |- Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ type: string resourceVersion: description: |- Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency type: string uid: description: |- UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids type: string type: object x-kubernetes-map-type: atomic type: object status: description: OpenstackCredsStatus defines the observed state of OpenstackCreds properties: openstack: description: Openstack is the OpenStack configuration for the openstackcreds properties: backendVolumeTypeMap: additionalProperties: type: string type: object networks: items: description: PCDNetworkInfo is struct to hold network information for PCD properties: name: type: string tags: items: type: string type: array required: - name - tags type: object type: array securityGroups: items: description: SecurityGroupInfo holds the security group name and ID properties: id: type: string name: type: string requiresIdDisplay: type: boolean required: - id - name - requiresIdDisplay type: object type: array serverGroups: items: description: ServerGroupInfo holds the server group name, ID, and policy information properties: id: type: string members: type: integer name: type: string policy: type: string required: - id - name - policy type: object type: array volumeBackends: items: type: string type: array volumeTypes: items: type: string type: array type: object openstackValidationMessage: description: OpenStackValidationMessage is the message associated with the OpenStack validation type: string openstackValidationStatus: description: OpenStackValidationStatus is the status of the OpenStack validation 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 name: pcdclusters.vjailbreak.k8s.pf9.io spec: group: vjailbreak.k8s.pf9.io names: kind: PCDCluster listKind: PCDClusterList plural: pcdclusters singular: pcdcluster scope: Namespaced versions: - name: v1alpha1 schema: openAPIV3Schema: description: |- PCDCluster is the Schema for the pcdclusters API that represents a Platform9 Distributed Cloud cluster in the migration system. It defines cluster configuration including host membership, high availability settings, and resource rebalancing policies. PCDCluster resources track both the desired state of clusters as part of migration planning and the observed state of actual PCD clusters in the target environment. They serve as destination targets for VM migrations from VMware ESXi environments. 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: PCDClusterSpec defines the desired state of PCDCluster properties: clusterName: description: ClusterName is the name of the PCD cluster type: string description: description: Description is the description of the PCD cluster type: string enableAutoResourceRebalancing: description: EnableAutoResourceRebalancing indicates if auto resource rebalancing is enabled type: boolean hosts: description: Hosts is the list of hosts in the PCD cluster items: type: string type: array rebalancingFrequencyMins: description: RebalancingFrequencyMins defines how often rebalancing occurs in minutes type: integer vmHighAvailability: description: VMHighAvailability indicates if VM high availability is enabled type: boolean type: object status: description: PCDClusterStatus defines the observed state of PCDCluster properties: aggregateID: description: AggregateID is the aggregate ID in the PCD cluster type: integer clusterID: description: ClusterID is the ID of the PCD cluster type: string createdAt: description: CreatedAt indicates when the cluster was created type: string updatedAt: description: UpdatedAt indicates when the cluster was last updated 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 name: pcdhosts.vjailbreak.k8s.pf9.io spec: group: vjailbreak.k8s.pf9.io names: kind: PCDHost listKind: PCDHostList plural: pcdhosts singular: pcdhost scope: Namespaced versions: - name: v1alpha1 schema: openAPIV3Schema: description: |- PCDHost is the Schema for the pcdhosts API that represents a physical or virtual host in a Platform9 Distributed Cloud environment. It tracks the host's configuration, network interfaces, assigned roles, and operational status. PCDHost resources are created as part of the migration process when converting ESXi hosts to PCD hosts or when provisioning new infrastructure to replace migrated VMware hosts. 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: PCDHostSpec defines the desired state of PCDHost properties: arch: type: string hostID: description: HostID is the ID of the host type: string hostName: description: HostName is the name of the host type: string hostState: description: HostState is the state of the host type: string interfaces: items: description: |- PCDHostInterface defines the network interface configuration for a Platform9 Distributed Cloud host, including IP addresses, MAC address, and interface name. It's used to configure proper network connectivity for PCD hosts created during the migration process. properties: ipAddresses: items: type: string type: array macAddress: type: string name: type: string type: object type: array osFamily: type: string osInfo: type: string rolesAssigned: description: RolesAssigned is the list of roles assigned to the host items: type: string type: array type: object status: description: PCDHostStatus defines the observed state of PCDHost properties: responding: type: boolean roleStatus: 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 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 name: rdmdisks.vjailbreak.k8s.pf9.io spec: group: vjailbreak.k8s.pf9.io names: kind: RDMDisk listKind: RDMDiskList plural: rdmdisks singular: rdmdisk scope: Namespaced versions: - name: v1alpha1 schema: openAPIV3Schema: description: RDMDisk is the Schema for the RDMDisks 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: Spec defines the desired state of RDMDisk properties: diskName: description: 'Important: Run "make" to regenerate code after modifying this file' type: string diskSize: type: integer displayName: type: string importToCinder: type: boolean openstackVolumeRef: description: OpenstackVolumeRef ... contains information about the OpenStack volume reference. properties: cinderBackendPool: type: string openstackCreds: type: string source: additionalProperties: type: string type: object volumeType: type: string type: object ownerVMs: items: type: string type: array uuid: type: string required: - diskName - diskSize - displayName - ownerVMs - uuid type: object status: description: RDMDiskStatus defines the observed state of RDMDisk. properties: cinderVolumeID: type: string conditions: items: description: Condition contains details for one aspect of the current state of this API Resource. properties: lastTransitionTime: description: |- lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: description: |- message is a human readable message indicating details about the transition. This may be an empty string. maxLength: 32768 type: string observedGeneration: description: |- observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance. format: int64 minimum: 0 type: integer reason: description: |- reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty. maxLength: 1024 minLength: 1 pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ type: string status: description: status of the condition, one of True, False, Unknown. enum: - "True" - "False" - Unknown type: string type: description: type of condition in CamelCase or in foo.example.com/CamelCase. maxLength: 316 pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: - lastTransitionTime - message - reason - status - type type: object type: array phase: enum: - Available - Managing - Managed - Error 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 name: rollingmigrationplans.vjailbreak.k8s.pf9.io spec: group: vjailbreak.k8s.pf9.io names: kind: RollingMigrationPlan listKind: RollingMigrationPlanList plural: rollingmigrationplans singular: rollingmigrationplan scope: Namespaced versions: - name: v1alpha1 schema: openAPIV3Schema: description: |- RollingMigrationPlan is the Schema for the rollingmigrationplans API that defines a coordinated migration of multiple VMware clusters and ESXi hosts to Platform9 Distributed Cloud (PCD). It supports sequenced migration of VMs across clusters with configurable batch sizes, cluster-to-cluster mapping, and tracking of migration progress across the entire datacenter migration. 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: RollingMigrationPlanSpec defines the desired state of RollingMigrationPlan properties: advancedOptions: description: AdvancedOptions is a list of advanced options for the migration 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: description: RemoveVMwareTools instructs the migration helper to remove VMware Tools post migration type: boolean type: object bmConfigRef: description: BMConfigRef is the reference to the BMC credentials 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 cloudInitConfigRef: description: CloudInitConfigRef is the reference to the cloud-init configuration properties: name: description: name is unique within a namespace to reference a secret resource. type: string namespace: description: namespace defines the space within which the secret name must be unique. type: string type: object x-kubernetes-map-type: atomic clusterMapping: description: ClusterMapping is the mapping of vCenter clusters to PCD clusters items: description: |- ClusterMapping defines the relationship between a VMware vCenter cluster and its corresponding Platform9 Distributed Cloud (PCD) cluster for migration operations. This mapping ensures that virtual machines are properly migrated to the appropriate target infrastructure. properties: pcdClusterName: description: PCDClusterName is the name of the PCD cluster type: string vmwareClusterName: description: VMwareClusterName is the name of the vCenter cluster type: string required: - pcdClusterName - vmwareClusterName type: object type: array clusterSequence: description: ClusterSequence is the sequence of vCenter clusters to be migrated items: description: |- ClusterMigrationInfo defines information about a VMware vCenter cluster migration, including the cluster name and the sequence of virtual machines to be migrated. This structure allows for coordinated migration of multiple related VMs within a cluster. properties: clusterName: description: ClusterName is the name of the vCenter cluster to be migrated type: string vmMigrationBatchSize: default: 10 description: |- VMMigrationBatchSize is the number of VMs in one batch for migration batches will be processed sequentially, but all VMs in a batch will be migrated in parallel. Default is 10 minimum: 1 type: integer vmSequence: description: VMSequence is the sequence of virtual machines to be migrated items: description: |- VMSequenceInfo defines information about a virtual machine in the migration sequence, including its name and the ESXi host where it is located. This information is used to establish the proper order and grouping of VMs during the migration process. properties: esxiName: description: ESXiName is the name of the ESXi host where the virtual machine is located type: string vmName: description: VMName is the name of the virtual machine to be migrated type: string required: - vmName type: object type: array required: - clusterName - vmSequence type: object type: array firstBootScript: default: echo "Add your startup script here!" type: string migrationStrategy: description: MigrationStrategy is the strategy to be used for the migration properties: adminInitiatedCutOver: default: false type: boolean arrayOffload: default: false type: boolean dataCopyStart: format: date-time type: string 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 migrationTemplate: description: MigrationTemplate is the template to be used for the migration type: string postMigrationAction: description: PostMigrationAction defines the post migration action for the virtual machine properties: folderName: type: string moveToFolder: type: boolean renameVm: type: boolean suffix: type: string type: object vmMigrationPlans: description: VMMigrationPlans is the reference to the VM migration plan items: type: string type: array required: - bmConfigRef - clusterSequence - migrationStrategy - migrationTemplate type: object status: description: RollingMigrationPlanStatus defines the observed state of RollingMigrationPlan properties: currentCluster: description: CurrentCluster is the name of the current vCenter cluster being migrated type: string currentESXi: description: CurrentESXi is the name of the current ESXi host being migrated type: string currentVM: description: CurrentVM is the name of the current virtual machine being migrated type: string failedClusters: description: FailedClusters is the list of vCenter clusters that have failed to migrate items: type: string type: array failedESXi: description: FailedESXi is the list of ESXi hosts that have failed to migrate items: type: string type: array failedVMs: description: FailedVMs is the list of virtual machines that have failed to migrate items: type: string type: array message: description: Message is the message associated with the current state of the migration type: string migratedClusters: description: MigratedClusters is the list of vCenter clusters that have been migrated items: type: string type: array migratedESXi: description: MigratedESXi is the list of ESXi hosts that have been migrated items: type: string type: array migratedVMs: description: MigratedVMs is the list of virtual machines that have been migrated items: type: string type: array phase: description: Phase is the current phase of the migration type: string vmMigrationPhase: description: VMMigrationsPhase is the list of VM migration plans 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 name: storagemappings.vjailbreak.k8s.pf9.io spec: group: vjailbreak.k8s.pf9.io names: kind: StorageMapping listKind: StorageMappingList plural: storagemappings singular: storagemapping scope: Namespaced versions: - additionalPrinterColumns: - jsonPath: .status.storageMappingValidationStatus name: Status type: string - jsonPath: .metadata.creationTimestamp name: Age type: date name: v1alpha1 schema: openAPIV3Schema: description: |- StorageMapping is the Schema for the storagemappings API that defines mappings between VMware and OpenStack storage types to be used during migration 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: |- StorageMappingSpec defines the desired state of StorageMapping including mappings between VMware and OpenStack storage types properties: storages: description: Storages is a list of storage mappings between source (VMware) and target (OpenStack) environments 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 required: - storages type: object status: description: StorageMappingStatus defines the observed state of StorageMapping properties: storageMappingValidationMessage: description: |- StoragemappingValidationMessage provides detailed validation information including information about available storage types and any validation errors type: string storageMappingValidationStatus: description: |- StoragemappingValidationStatus indicates the validation status of the storage mapping Valid states include: "Valid", "Invalid", "Pending", "ValidationFailed" 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 name: vjailbreaknodes.vjailbreak.k8s.pf9.io spec: group: vjailbreak.k8s.pf9.io names: kind: VjailbreakNode listKind: VjailbreakNodeList plural: vjailbreaknodes singular: vjailbreaknode scope: Namespaced versions: - additionalPrinterColumns: - jsonPath: .status.phase name: Phase type: string - jsonPath: .status.vmIP name: VMIP type: string name: v1alpha1 schema: openAPIV3Schema: description: |- VjailbreakNode is the Schema for the vjailbreaknodes API that represents a node in the migration infrastructure with configuration, resource limits, and statistics for monitoring migration progress 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: Spec defines the desired state of VjailbreakNode properties: nodeRole: description: NodeRole is the role assigned to the node (e.g., "worker", "controller") type: string openstackCreds: description: |- OpenstackCreds is the reference to the credentials for the OpenStack environment where the node will be provisioned properties: apiVersion: description: API version of the referent. type: string fieldPath: description: |- If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. type: string kind: description: |- Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string name: description: |- Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string namespace: description: |- Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ type: string resourceVersion: description: |- Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency type: string uid: description: |- UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids type: string type: object x-kubernetes-map-type: atomic openstackFlavorID: description: OpenstackFlavorID is the flavor of the VM type: string openstackImageID: description: OpenstackImageID is the image of the VM type: string openstackSecurityGroups: description: |- OpenstackSecurityGroups is the list of security groups for the VM If empty, the security groups will be determined from the master node items: type: string type: array openstackVolumeType: description: |- OpenstackVolumeType is the volume type for the root disk of the VM If empty, the volume type will be determined from the master node type: string required: - nodeRole - openstackCreds - openstackFlavorID - openstackImageID type: object status: description: Status defines the observed state of VjailbreakNode properties: activeMigrations: description: |- ActiveMigrations is the list of active migrations currently being processed on this node, containing references to MigrationPlan resources items: type: string type: array openstackUUID: description: OpenstackUUID is the UUID of the VM in OpenStack type: string phase: description: |- Phase is the current lifecycle phase of the node (e.g., Provisioning, Ready, Error, Decommissioning) type: string vmIP: description: VMIP is the IP address of the VM type: string required: - vmIP 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 name: vmwareclusters.vjailbreak.k8s.pf9.io spec: group: vjailbreak.k8s.pf9.io names: kind: VMwareCluster listKind: VMwareClusterList plural: vmwareclusters singular: vmwarecluster scope: Namespaced versions: - name: v1alpha1 schema: openAPIV3Schema: description: |- VMwareCluster is the Schema for the vmwareclusters API that represents a VMware vSphere cluster in the source environment. It tracks cluster configuration, member hosts, and migration status as part of the VMware to Platform9 Distributed Cloud migration process. VMwareCluster resources serve as source components that are migrated to corresponding PCDCluster resources in the target environment. 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: VMwareClusterSpec defines the desired state of VMwareCluster properties: hosts: description: Hosts is the list of hosts in the VMware cluster items: type: string type: array name: description: Name is the name of the VMware cluster type: string type: object status: description: VMwareClusterStatus defines the observed state of VMwareCluster properties: phase: description: Phase is the current phase of the VMwareCluster 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 name: vmwarecreds.vjailbreak.k8s.pf9.io spec: group: vjailbreak.k8s.pf9.io names: kind: VMwareCreds listKind: VMwareCredsList plural: vmwarecreds singular: vmwarecreds scope: Namespaced versions: - additionalPrinterColumns: - jsonPath: .status.vmwareValidationStatus name: Status type: string - jsonPath: .spec.secretRef.name name: Secret Name type: string - jsonPath: .metadata.creationTimestamp name: Age type: date name: v1alpha1 schema: openAPIV3Schema: description: |- VMwareCreds is the Schema for the vmwarecreds API that defines authentication and connection details for VMware vSphere environments. It provides a secure way to store and validate vCenter credentials for use in migration operations, including connection parameters, authentication information, and datacenter configuration. 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: VMwareCredsSpec defines the desired state of VMwareCreds properties: datacenter: description: DataCenter is the datacenter for the virtual machine type: string secretRef: description: SecretRef is the reference to the Kubernetes secret holding VMware credentials properties: apiVersion: description: API version of the referent. type: string fieldPath: description: |- If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. type: string kind: description: |- Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string name: description: |- Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string namespace: description: |- Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ type: string resourceVersion: description: |- Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency type: string uid: description: |- UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids type: string type: object x-kubernetes-map-type: atomic vcenterHost: description: VcenterHost is the vCenter host type: string type: object status: description: VMwareCredsStatus defines the observed state of VMwareCreds properties: vmwareValidationMessage: description: VMwareValidationMessage is the message associated with the VMware validation type: string vmwareValidationStatus: description: VMwareValidationStatus is the status of the VMware validation 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 name: vmwarehosts.vjailbreak.k8s.pf9.io spec: group: vjailbreak.k8s.pf9.io names: kind: VMwareHost listKind: VMwareHostList plural: vmwarehosts singular: vmwarehost scope: Namespaced versions: - name: v1alpha1 schema: openAPIV3Schema: description: |- VMwareHost is the Schema for the vmwarehosts API that represents a VMware ESXi host in the source environment. It tracks host configuration, hardware identification, and cluster membership as part of the VMware to Platform9 Distributed Cloud migration process. VMwareHost resources are source components that are migrated to PCDHost resources in the target environment and are automatically removed from vCenter inventory after all VMs have been migrated off and the host is in maintenance mode. 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: VMwareHostSpec defines the desired state of VMwareHost properties: clusterName: description: Cluster name of the host type: string hardwareUuid: description: Hardware UUID of the host type: string hostConfigId: description: Host config ID of the host type: string name: description: Name of the host type: string state: description: State is the connection state of the host type: string vmCount: description: VMCount is the number of VMs on the host type: integer type: object status: description: VMwareHostStatus defines the observed state of VMwareHost properties: esxiVersion: description: ESXiVersion is the ESXi version retrieved via SSH if connection succeeded type: string sshLastChecked: description: SSHLastChecked is the timestamp of the last SSH validation attempt format: date-time type: string sshMessage: description: SSHMessage contains details about the SSH validation result or error type: string sshStatus: description: SSHStatus is the SSH validation status for this host (Succeeded, Failed, Pending) 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 name: vmwaremachines.vjailbreak.k8s.pf9.io spec: group: vjailbreak.k8s.pf9.io names: kind: VMwareMachine listKind: VMwareMachineList plural: vmwaremachines singular: vmwaremachine scope: Namespaced versions: - additionalPrinterColumns: - jsonPath: .status.powerState name: PowerState type: string - jsonPath: .spec.migrated name: Migrated type: boolean - jsonPath: .metadata.creationTimestamp name: Age type: date name: v1alpha1 schema: openAPIV3Schema: description: |- VMwareMachine is the Schema for the vmwaremachines API that represents a virtual machine in the VMware source environment targeted for migration. It tracks VM configuration, resource allocation, migration status, and target environment specifications. VMwareMachine resources are the primary workloads migrated from VMware to OpenStack as part of the migration process and contain all necessary information to recreate equivalent virtual machines in the target environment. 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: VMwareMachineSpec defines the desired state of VMwareMachine properties: targetFlavorId: description: TargetFlavorId is the flavor to be used to create the target VM on openstack type: string vms: description: VMInfo is the info of the VMs in the VMwareMachine properties: assignedIp: description: AssignedIp is the IP address assigned to the VM type: string clusterName: description: ClusterName is the name of the cluster type: string cpu: description: CPU is the number of CPUs in the virtual machine type: integer datastores: description: Datastores is the list of datastores for the virtual machine items: type: string type: array disks: description: Disks is the list of disks for the virtual machine items: description: Disk represents a virtual disk attached to a virtual machine properties: capacityGB: type: integer datastore: type: string datastoreId: type: string name: type: string type: object type: array esxiName: description: ESXiName is the name of the ESXi host type: string gpu: description: GPU contains information about GPU devices attached to the VM properties: passthroughCount: description: PassthroughCount is the number of PCI passthrough GPU devices type: integer vgpuCount: description: VGPUCount is the number of vGPU (shared GPU) devices type: integer type: object guestNetworks: description: GuestNetworks is the list of network interfaces for the virtual machine as reported by the guest items: description: GuestNetwork represents a network interface as reported by the guest. properties: device: type: string dns: items: type: string type: array ip: type: string mac: type: string origin: type: string prefixLength: format: int32 type: integer type: object type: array ipAddress: description: IPAddress is the IP address of the virtual machine type: string memory: description: Memory is the amount of memory in the virtual machine type: integer name: description: Name is the name of the virtual machine type: string networkInterfaces: description: NetworkInterfaces is the list of network interfaces for the virtual machine expect the lo device items: description: NIC represents a Virtual ethernet card in the virtual machine. properties: ipAddress: items: type: string type: array mac: type: string network: type: string networkType: type: string order: type: integer type: object type: array networks: description: Networks is the list of networks for the virtual machine items: type: string type: array osFamily: description: OSFamily is the OS family of the virtual machine type: string rdmDisks: description: RDMDisks is the list of RDM disks for the virtual machine items: type: string type: array vmState: description: VMState is the state of the virtual machine type: string vmid: description: VMID is the vCenter Managed Object ID (MOID) of the virtual machine type: string required: - name type: object type: object status: description: VMwareMachineStatus defines the observed state of VMwareMachine properties: migrated: default: false description: Migrated flag to indicate if the VMs have been migrated type: boolean powerState: description: PowerState is the state of the VMs in the VMware type: string required: - migrated 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 name: volumeimageprofiles.vjailbreak.k8s.pf9.io spec: group: vjailbreak.k8s.pf9.io names: kind: VolumeImageProfile listKind: VolumeImageProfileList plural: volumeimageprofiles singular: volumeimageprofile scope: Namespaced versions: - additionalPrinterColumns: - jsonPath: .spec.osFamily name: OSFamily type: string - jsonPath: .metadata.creationTimestamp name: Age type: date name: v1alpha1 schema: openAPIV3Schema: description: |- VolumeImageProfile defines a reusable set of Cinder volume_image_metadata properties that can be applied to VM volumes during migration. 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: VolumeImageProfileSpec defines the desired state of VolumeImageProfile properties: description: description: Description will indicate the usage context of this profile type: string osFamily: description: OSFamily scopes this profile to a specific VMware guest family. enum: - windowsGuest - linuxGuest - any type: string properties: additionalProperties: type: string description: Properties is the map of Cinder volume image metadata key-value pairs type: object required: - osFamily - properties type: object type: object served: true storage: true subresources: {} --- apiVersion: v1 kind: ServiceAccount metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-controller-manager namespace: migration-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-leader-election-role namespace: migration-system rules: - apiGroups: - "" resources: - configmaps verbs: - get - list - watch - create - update - patch - delete - apiGroups: - coordination.k8s.io resources: - leases verbs: - get - list - watch - create - update - patch - delete - apiGroups: - "" resources: - events verbs: - create - patch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-bmconfig-editor-role rules: - apiGroups: - vjailbreak.k8s.pf9.io resources: - bmconfigs verbs: - create - delete - get - list - patch - update - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - bmconfigs/status verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-bmconfig-viewer-role rules: - apiGroups: - vjailbreak.k8s.pf9.io resources: - bmconfigs verbs: - get - list - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - bmconfigs/status verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-clustermigration-editor-role rules: - apiGroups: - vjailbreak.k8s.pf9.io resources: - clustermigrations verbs: - create - delete - get - list - patch - update - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - clustermigrations/status verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-clustermigration-viewer-role rules: - apiGroups: - vjailbreak.k8s.pf9.io resources: - clustermigrations verbs: - get - list - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - clustermigrations/status verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-esximigration-editor-role rules: - apiGroups: - vjailbreak.k8s.pf9.io resources: - esximigrations verbs: - create - delete - get - list - patch - update - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - esximigrations/status verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-esximigration-viewer-role rules: - apiGroups: - vjailbreak.k8s.pf9.io resources: - esximigrations verbs: - get - list - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - esximigrations/status verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: migration-manager-role rules: - apiGroups: - "" resources: - configmaps - namespaces - pods - secrets - serviceaccounts - services verbs: - create - delete - get - list - patch - update - watch - apiGroups: - "" resources: - configmaps/status - pods/status verbs: - get - patch - update - apiGroups: - "" resources: - events verbs: - get - list - watch - apiGroups: - "" resources: - nodes verbs: - delete - get - list - watch - apiGroups: - "" resources: - pods/log verbs: - get - list - apiGroups: - apiextensions.k8s.io resources: - customresourcedefinitions verbs: - create - delete - get - list - patch - update - watch - apiGroups: - apps resources: - deployments verbs: - create - delete - get - list - patch - update - watch - apiGroups: - batch resources: - jobs verbs: - create - delete - get - list - patch - update - watch - apiGroups: - networking.k8s.io resources: - ingresses verbs: - create - delete - get - list - patch - update - watch - apiGroups: - rbac.authorization.k8s.io resources: - clusterrolebindings - clusterroles - rolebindings - roles verbs: - create - delete - get - list - patch - update - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - arraycreds - bmconfigs - clustermigrations - esximigrations - esxisshcreds - migrationplans - migrations - migrationtemplates - networkmappings - openstackcreds - pcdclusters - pcdhosts - proxyvms - rdmdisks - rollingmigrationplans - storagemappings - vjailbreaknodes - vmwareclusters - vmwarecreds - vmwarehosts - vmwaremachines verbs: - create - delete - get - list - patch - update - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - arraycreds/finalizers - bmconfigs/finalizers - clustermigrations/finalizers - esximigrations/finalizers - esxisshcreds/finalizers - migrationplans/finalizers - migrationtemplates/finalizers - networkmappings/finalizers - openstackcreds/finalizers - pcdclusters/finalizers - pcdhosts/finalizers - proxyvms/finalizers - rdmdisks/finalizers - rollingmigrationplans/finalizers - storagemappings/finalizers - vjailbreaknodes/finalizers - vmwarecreds/finalizers verbs: - update - apiGroups: - vjailbreak.k8s.pf9.io resources: - arraycreds/status - bmconfigs/status - clustermigrations/status - esximigrations/status - esxisshcreds/status - migrationplans/status - migrations/status - migrationtemplates/status - networkmappings/status - openstackcreds/status - pcdclusters/status - pcdhosts/status - proxyvms/status - rdmdisks/status - rollingmigrationplans/status - storagemappings/status - vjailbreaknodes/status - vmwarecreds/status - vmwarehosts/status - vmwaremachines/status verbs: - get - patch - update --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-migration-editor-role rules: - apiGroups: - vjailbreak.k8s.pf9.io resources: - migrations verbs: - create - delete - get - list - patch - update - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - migrations/status verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-migration-viewer-role rules: - apiGroups: - vjailbreak.k8s.pf9.io resources: - migrations verbs: - get - list - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - migrations/status verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-migrationplan-editor-role rules: - apiGroups: - vjailbreak.k8s.pf9.io resources: - migrationplans verbs: - create - delete - get - list - patch - update - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - migrationplans/status verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-migrationplan-viewer-role rules: - apiGroups: - vjailbreak.k8s.pf9.io resources: - migrationplans verbs: - get - list - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - migrationplans/status verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-migrationtemplate-editor-role rules: - apiGroups: - vjailbreak.k8s.pf9.io resources: - migrationtemplates verbs: - create - delete - get - list - patch - update - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - migrationtemplates/status verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-migrationtemplate-viewer-role rules: - apiGroups: - vjailbreak.k8s.pf9.io resources: - migrationtemplates verbs: - get - list - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - migrationtemplates/status verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-networkmapping-editor-role rules: - apiGroups: - vjailbreak.k8s.pf9.io resources: - networkmappings verbs: - create - delete - get - list - patch - update - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - networkmappings/status verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-networkmapping-viewer-role rules: - apiGroups: - vjailbreak.k8s.pf9.io resources: - networkmappings verbs: - get - list - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - networkmappings/status verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-openstackcreds-editor-role rules: - apiGroups: - vjailbreak.k8s.pf9.io resources: - openstackcreds verbs: - create - delete - get - list - patch - update - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - openstackcreds/status verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-openstackcreds-viewer-role rules: - apiGroups: - vjailbreak.k8s.pf9.io resources: - openstackcreds verbs: - get - list - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - openstackcreds/status verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-pcdcluster-editor-role rules: - apiGroups: - vjailbreak.k8s.pf9.io resources: - pcdclusters verbs: - create - delete - get - list - patch - update - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - pcdclusters/status verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-pcdcluster-viewer-role rules: - apiGroups: - vjailbreak.k8s.pf9.io resources: - pcdclusters verbs: - get - list - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - pcdclusters/status verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-pcdhost-editor-role rules: - apiGroups: - vjailbreak.k8s.pf9.io resources: - pcdhosts verbs: - create - delete - get - list - patch - update - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - pcdhosts/status verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-pcdhost-viewer-role rules: - apiGroups: - vjailbreak.k8s.pf9.io resources: - pcdhosts verbs: - get - list - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - pcdhosts/status verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-rdmdisk-admin-role rules: - apiGroups: - vjailbreak.k8s.pf9.io resources: - rdmdisks verbs: - '*' - apiGroups: - vjailbreak.k8s.pf9.io resources: - rdmdisks/status verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-rdmdisk-editor-role rules: - apiGroups: - vjailbreak.k8s.pf9.io resources: - rdmdisks verbs: - create - delete - get - list - patch - update - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - rdmdisks/status verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-rdmdisk-viewer-role rules: - apiGroups: - vjailbreak.k8s.pf9.io resources: - rdmdisks verbs: - get - list - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - rdmdisks/status verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-rollingmigrationplan-editor-role rules: - apiGroups: - vjailbreak.k8s.pf9.io resources: - rollingmigrationplans verbs: - create - delete - get - list - patch - update - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - rollingmigrationplans/status verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-rollingmigrationplan-viewer-role rules: - apiGroups: - vjailbreak.k8s.pf9.io resources: - rollingmigrationplans verbs: - get - list - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - rollingmigrationplans/status verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-storagemapping-editor-role rules: - apiGroups: - vjailbreak.k8s.pf9.io resources: - storagemappings verbs: - create - delete - get - list - patch - update - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - storagemappings/status verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-storagemapping-viewer-role rules: - apiGroups: - vjailbreak.k8s.pf9.io resources: - storagemappings verbs: - get - list - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - storagemappings/status verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-vjailbreaknode-editor-role rules: - apiGroups: - vjailbreak.k8s.pf9.io resources: - vjailbreaknodes verbs: - create - delete - get - list - patch - update - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - vjailbreaknodes/status verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-vjailbreaknode-viewer-role rules: - apiGroups: - vjailbreak.k8s.pf9.io resources: - vjailbreaknodes verbs: - get - list - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - vjailbreaknodes/status verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-vmwarecluster-editor-role rules: - apiGroups: - vjailbreak.k8s.pf9.io resources: - vmwareclusters verbs: - create - delete - get - list - patch - update - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - vmwareclusters/status verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-vmwarecluster-viewer-role rules: - apiGroups: - vjailbreak.k8s.pf9.io resources: - vmwareclusters verbs: - get - list - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - vmwareclusters/status verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-vmwarecreds-editor-role rules: - apiGroups: - vjailbreak.k8s.pf9.io resources: - vmwarecreds verbs: - create - delete - get - list - patch - update - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - vmwarecreds/status verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-vmwarecreds-viewer-role rules: - apiGroups: - vjailbreak.k8s.pf9.io resources: - vmwarecreds verbs: - get - list - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - vmwarecreds/status verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-vmwarehost-editor-role rules: - apiGroups: - vjailbreak.k8s.pf9.io resources: - vmwarehosts verbs: - create - delete - get - list - patch - update - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - vmwarehosts/status verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-vmwarehost-viewer-role rules: - apiGroups: - vjailbreak.k8s.pf9.io resources: - vmwarehosts verbs: - get - list - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - vmwarehosts/status verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-vmwaremachine-editor-role rules: - apiGroups: - vjailbreak.k8s.pf9.io resources: - vmwaremachines verbs: - create - delete - get - list - patch - update - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - vmwaremachines/status verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-vmwaremachine-viewer-role rules: - apiGroups: - vjailbreak.k8s.pf9.io resources: - vmwaremachines verbs: - get - list - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - vmwaremachines/status verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-leader-election-rolebinding namespace: migration-system roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: migration-leader-election-role subjects: - kind: ServiceAccount name: migration-controller-manager namespace: migration-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-manager-rolebinding roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: migration-manager-role subjects: - kind: ServiceAccount name: migration-controller-manager namespace: migration-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: labels: app.kubernetes.io/component: rbac app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: migration-migration-controller-manager-admin roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: migration-controller-manager namespace: migration-system --- apiVersion: v1 kind: Service metadata: name: migration-vpwned-service namespace: migration-system spec: ports: - port: 80 protocol: TCP targetPort: 3001 selector: app: vpwned-sdk type: ClusterIP --- apiVersion: apps/v1 kind: Deployment metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration control-plane: controller-manager name: migration-controller-manager namespace: migration-system spec: replicas: 1 selector: matchLabels: control-plane: controller-manager strategy: type: Recreate template: metadata: annotations: kubectl.kubernetes.io/default-container: manager labels: control-plane: controller-manager spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: node-role.kubernetes.io/control-plane operator: Exists containers: - args: - --leader-elect=false - --health-probe-bind-address=:8081 command: - /manager env: - name: MAX_CONCURRENT_RECONCILES value: "5" envFrom: - configMapRef: name: pf9-env image: quay.io/platform9/vjailbreak-controller:v0.4.6 imagePullPolicy: IfNotPresent lifecycle: preStop: exec: command: - /bin/sh - -c - sleep 5 livenessProbe: httpGet: path: /healthz port: 8081 initialDelaySeconds: 15 periodSeconds: 20 name: manager readinessProbe: httpGet: path: /readyz port: 8081 initialDelaySeconds: 5 periodSeconds: 10 resources: requests: cpu: 200m memory: 256Mi volumeMounts: - mountPath: /etc/pf9/k3s name: master-token - mountPath: /home/ubuntu name: vddk - mountPath: /etc/hosts name: hosts-file readOnly: true - mountPath: /host/dmi/product_uuid name: dmi-product-uuid readOnly: true dnsConfig: options: - name: ndots value: "1" dnsPolicy: ClusterFirstWithHostNet hostNetwork: true securityContext: runAsGroup: 0 runAsUser: 0 serviceAccountName: migration-controller-manager terminationGracePeriodSeconds: 30 volumes: - hostPath: path: /var/lib/rancher/k3s/server type: Directory name: master-token - hostPath: path: /home/ubuntu type: Directory name: vddk - hostPath: path: /etc/hosts type: File name: hosts-file - hostPath: path: /sys/class/dmi/id/product_uuid type: File name: dmi-product-uuid --- apiVersion: apps/v1 kind: Deployment metadata: labels: app: vpwned-sdk name: migration-vpwned-sdk namespace: migration-system spec: progressDeadlineSeconds: 600 replicas: 1 revisionHistoryLimit: 10 selector: matchLabels: app: vpwned-sdk strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 25% type: RollingUpdate template: metadata: labels: app: vpwned-sdk spec: containers: - envFrom: - configMapRef: name: pf9-env image: quay.io/platform9/vjailbreak-vpwned:v0.4.6 imagePullPolicy: IfNotPresent name: vpwned ports: - containerPort: 3001 protocol: TCP resources: {} terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: - mountPath: /etc/hosts name: hosts-file readOnly: true - mountPath: /home/ubuntu name: vddk-storage dnsConfig: options: - name: ndots value: "1" dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler securityContext: {} serviceAccountName: migration-controller-manager terminationGracePeriodSeconds: 30 volumes: - hostPath: path: /etc/hosts type: File name: hosts-file - hostPath: path: /home/ubuntu type: DirectoryOrCreate name: vddk-storage --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/backend-protocol: HTTP nginx.ingress.kubernetes.io/proxy-body-size: 500m nginx.ingress.kubernetes.io/proxy-buffering: "off" nginx.ingress.kubernetes.io/proxy-connect-timeout: "600" nginx.ingress.kubernetes.io/proxy-read-timeout: "600" nginx.ingress.kubernetes.io/proxy-request-buffering: "off" nginx.ingress.kubernetes.io/proxy-send-timeout: "600" nginx.ingress.kubernetes.io/rewrite-target: /$1 nginx.ingress.kubernetes.io/use-regex: "true" name: migration-vpwned-ingress namespace: migration-system spec: ingressClassName: nginx rules: - http: paths: - backend: service: name: migration-vpwned-service port: number: 80 path: /dev-api/sdk/(.*) pathType: ImplementationSpecific --- apiVersion: apps/v1 kind: Deployment metadata: name: vjailbreak-ui namespace: migration-system spec: replicas: 1 selector: matchLabels: app: vjailbreak-ui template: metadata: labels: app: vjailbreak-ui spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: node-role.kubernetes.io/control-plane operator: Exists serviceAccountName: ui-manager-sa containers: - name: vjailbreak-ui-container image: quay.io/platform9/vjailbreak-ui:v0.4.6 imagePullPolicy: IfNotPresent ports: - containerPort: 80 volumeMounts: - name: nginx-shadow-htpasswd mountPath: /etc/nginx/shadow - name: pf9-logs mountPath: /var/log/pf9 readOnly: true volumes: - name: nginx-shadow-htpasswd hostPath: path: /etc/htpasswd type: FileOrCreate - name: pf9-logs hostPath: path: /var/log/pf9 type: DirectoryOrCreate --- apiVersion: v1 kind: Service metadata: name: vjailbreak-ui-service namespace: migration-system spec: selector: app: vjailbreak-ui type: ClusterIP ports: - protocol: TCP port: 80 targetPort: 80 --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: vjailbreak-ui-ingress namespace: migration-system annotations: nginx.ingress.kubernetes.io/backend-protocol: "HTTP" nginx.ingress.kubernetes.io/force-ssl-redirect: "true" nginx.ingress.kubernetes.io/ssl-redirect: "true" spec: ingressClassName: nginx rules: - http: paths: - path: / pathType: Prefix backend: service: name: vjailbreak-ui-service port: number: 80 --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: vjailbreak-api-ingress namespace: default annotations: nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" nginx.ingress.kubernetes.io/rewrite-target: /$1 nginx.ingress.kubernetes.io/use-regex: "true" nginx.ingress.kubernetes.io/force-ssl-redirect: "true" nginx.ingress.kubernetes.io/ssl-redirect: "true" spec: ingressClassName: nginx rules: - http: paths: - path: /(apis.*) pathType: ImplementationSpecific backend: service: name: kubernetes port: number: 443 - path: /(api.*) pathType: ImplementationSpecific backend: service: name: kubernetes port: number: 443 --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: grafana-api-ingress namespace: monitoring annotations: nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" spec: ingressClassName: nginx rules: - http: paths: - path: /grafana pathType: Prefix backend: service: name: grafana port: number: 3000 --- apiVersion: v1 kind: ServiceAccount metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: ui-manager-sa namespace: migration-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: ui-manager-role rules: - apiGroups: - "" resources: - configmaps verbs: - create - delete - get - list - patch - update - watch - apiGroups: - "" resources: - configmaps/status verbs: - get - apiGroups: - "" resources: - events verbs: - get - list - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - arraycreds - arraycredsmappings - bmconfigs - esxisshcreds - clustermigrations - esximigrations - migrationplans - migrations - migrationtemplates - networkmappings - openstackcreds - pcdclusters - pcdhosts - proxyvms - rdmdisks - rollingmigrationplans - storagemappings - vjailbreaknodes - vmwareclusters - vmwarecreds - vmwarehosts - vmwaremachines - volumeimageprofiles verbs: - create - delete - get - list - patch - update - watch - apiGroups: - vjailbreak.k8s.pf9.io resources: - arraycreds/finalizers - arraycredsmappings/finalizers - bmconfigs/finalizers - esxisshcreds/finalizers - clustermigrations/finalizers - esximigrations/finalizers - migrationplans/finalizers - migrationtemplates/finalizers - networkmappings/finalizers - openstackcreds/finalizers - pcdclusters/finalizers - pcdhosts/finalizers - proxyvms/finalizers - rdmdisks/finalizers - rollingmigrationplans/finalizers - storagemappings/finalizers - vjailbreaknodes/finalizers - vmwarecreds/finalizers verbs: - update - apiGroups: - vjailbreak.k8s.pf9.io resources: - arraycreds/status - arraycredsmappings/status - bmconfigs/status - esxisshcreds/status - clustermigrations/status - esximigrations/status - migrationplans/status - migrations/status - migrationtemplates/status - networkmappings/status - openstackcreds/status - pcdclusters/status - pcdhosts/status - rdmdisks/status - rollingmigrationplans/status - storagemappings/status - vjailbreaknodes/status - vmwarecreds/status - vmwaremachines/status verbs: - get - patch - update --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: labels: app.kubernetes.io/managed-by: kustomize app.kubernetes.io/name: migration name: ui-manager-rolebinding roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: ui-manager-role subjects: - kind: ServiceAccount name: ui-manager-sa namespace: migration-system