diff --git a/assets/migrationform1.png b/assets/migrationform1.png
new file mode 100644
index 0000000..b99a567
Binary files /dev/null and b/assets/migrationform1.png differ
diff --git a/assets/migrationform2.png b/assets/migrationform2.png
new file mode 100644
index 0000000..f9ea5c4
Binary files /dev/null and b/assets/migrationform2.png differ
diff --git a/assets/migrationprogress1.png b/assets/migrationprogress1.png
new file mode 100644
index 0000000..04fe2e5
Binary files /dev/null and b/assets/migrationprogress1.png differ
diff --git a/assets/migrationprogress2.png b/assets/migrationprogress2.png
new file mode 100644
index 0000000..a4a8ce1
Binary files /dev/null and b/assets/migrationprogress2.png differ
diff --git a/assets/rpms/virt-v2v-2.7.13-1.fc42.aarch64.rpm b/assets/rpms/virt-v2v-2.7.13-1.fc42.aarch64.rpm
new file mode 100644
index 0000000..2717c9d
Binary files /dev/null and b/assets/rpms/virt-v2v-2.7.13-1.fc42.aarch64.rpm differ
diff --git a/assets/rpms/virt-v2v-2.7.13-1.fc42.src.rpm b/assets/rpms/virt-v2v-2.7.13-1.fc42.src.rpm
new file mode 100644
index 0000000..dc4ffa3
Binary files /dev/null and b/assets/rpms/virt-v2v-2.7.13-1.fc42.src.rpm differ
diff --git a/assets/rpms/virt-v2v-2.7.13-1.fc42.x86_64.rpm b/assets/rpms/virt-v2v-2.7.13-1.fc42.x86_64.rpm
new file mode 100644
index 0000000..35fa29d
Binary files /dev/null and b/assets/rpms/virt-v2v-2.7.13-1.fc42.x86_64.rpm differ
diff --git a/assets/scaledown.png b/assets/scaledown.png
new file mode 100644
index 0000000..368e56b
Binary files /dev/null and b/assets/scaledown.png differ
diff --git a/assets/scaleup.png b/assets/scaleup.png
new file mode 100644
index 0000000..e875521
Binary files /dev/null and b/assets/scaleup.png differ
diff --git a/assets/scaleupagents.png b/assets/scaleupagents.png
new file mode 100644
index 0000000..7321ac6
Binary files /dev/null and b/assets/scaleupagents.png differ
diff --git a/deploy/00crds.yaml b/deploy/00crds.yaml
new file mode 100644
index 0000000..5e037a3
--- /dev/null
+++ b/deploy/00crds.yaml
@@ -0,0 +1,3398 @@
+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: 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: 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
+ 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:
+ 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
+ type: object
+ 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
+ dataCopyStart:
+ format: date-time
+ type: string
+ healthCheckPort:
+ default: "443"
+ type: string
+ performHealthChecks:
+ default: false
+ type: boolean
+ type:
+ enum:
+ - hot
+ - cold
+ 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
+ retry:
+ description: Retry the migration if it fails
+ type: boolean
+ 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: .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:
+ initiateCutover:
+ description: InitiateCutover is the flag to initiate cutover
+ type: boolean
+ migrationPlan:
+ description: MigrationPlan is the name of the migration plan
+ 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
+ phase:
+ description: Phase is the current phase of the migration
+ enum:
+ - Pending
+ - Validating
+ - AwaitingDataCopyStart
+ - CopyingBlocks
+ - CopyingChangedBlocks
+ - ConvertingDisk
+ - AwaitingCutOverStartTime
+ - AwaitingAdminCutOver
+ - Succeeded
+ - Failed
+ - Unknown
+ type: string
+ 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:
+ 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
+ type: string
+ osFamily:
+ description: OSFamily is the OS type of the virtual machine
+ enum:
+ - windows
+ - linux
+ type: string
+ 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
+ storageMapping:
+ description: StorageMapping is the reference to the StorageMapping
+ resource that defines source to destination storage mappings
+ type: string
+ targetPCDClusterName:
+ description: TargetPCDClusterName is the name of the PCD cluster where
+ the virtual machine will be migrated
+ type: string
+ virtioWinDriver:
+ description: VirtioWinDriver is the driver to be used for the virtual
+ machine
+ type: string
+ required:
+ - destination
+ - networkMapping
+ - source
+ - storageMapping
+ 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
+ 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
+ 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
+ - id
+ - name
+ - os-flavor-access:is_public
+ - ram
+ - rxtx_factor
+ - vcpus
+ type: object
+ type: array
+ 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
+ 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:
+ networks:
+ 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: 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:
+ 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
+ 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
+ dataCopyStart:
+ format: date-time
+ type: string
+ healthCheckPort:
+ default: "443"
+ type: string
+ performHealthChecks:
+ default: false
+ type: boolean
+ type:
+ enum:
+ - hot
+ - cold
+ 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
+ retry:
+ description: Retry the migration if it fails
+ type: boolean
+ 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., "migration-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
+ 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
+ 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
+ required:
+ - datacenter
+ 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
+ type: object
+ status:
+ description: VMwareHostStatus defines the observed state of VMwareHost
+ 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:
+ - 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:
+ type: string
+ type: array
+ esxiName:
+ description: ESXiName is the name of the ESXi host
+ type: string
+ 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
+ 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
+ vmState:
+ description: VMState is the state 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: 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
+ - pods
+ - secrets
+ verbs:
+ - create
+ - delete
+ - get
+ - list
+ - patch
+ - update
+ - watch
+- apiGroups:
+ - ""
+ resources:
+ - events
+ verbs:
+ - get
+ - list
+ - watch
+- apiGroups:
+ - ""
+ resources:
+ - nodes
+ verbs:
+ - delete
+ - get
+ - list
+ - watch
+- apiGroups:
+ - ""
+ resources:
+ - pods/status
+ verbs:
+ - get
+ - patch
+ - update
+- apiGroups:
+ - batch
+ resources:
+ - jobs
+ verbs:
+ - create
+ - delete
+ - get
+ - list
+ - patch
+ - update
+ - watch
+- apiGroups:
+ - vjailbreak.k8s.pf9.io
+ resources:
+ - bmconfigs
+ - clustermigrations
+ - esximigrations
+ - migrationplans
+ - migrations
+ - migrationtemplates
+ - networkmappings
+ - openstackcreds
+ - pcdclusters
+ - pcdhosts
+ - rollingmigrationplans
+ - storagemappings
+ - vjailbreaknodes
+ - vmwareclusters
+ - vmwarecreds
+ - vmwarehosts
+ - vmwaremachines
+ verbs:
+ - create
+ - delete
+ - get
+ - list
+ - patch
+ - update
+ - watch
+- apiGroups:
+ - vjailbreak.k8s.pf9.io
+ resources:
+ - bmconfigs/finalizers
+ - clustermigrations/finalizers
+ - esximigrations/finalizers
+ - migrationplans/finalizers
+ - migrationtemplates/finalizers
+ - networkmappings/finalizers
+ - openstackcreds/finalizers
+ - pcdclusters/finalizers
+ - pcdhosts/finalizers
+ - rollingmigrationplans/finalizers
+ - storagemappings/finalizers
+ - vjailbreaknodes/finalizers
+ - vmwarecreds/finalizers
+ verbs:
+ - update
+- apiGroups:
+ - vjailbreak.k8s.pf9.io
+ resources:
+ - bmconfigs/status
+ - clustermigrations/status
+ - esximigrations/status
+ - migrationplans/status
+ - migrations/status
+ - migrationtemplates/status
+ - networkmappings/status
+ - openstackcreds/status
+ - pcdclusters/status
+ - pcdhosts/status
+ - rollingmigrationplans/status
+ - storagemappings/status
+ - vjailbreaknodes/status
+ - vmwarecreds/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-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: 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
+ 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
+ image: platform9/vjailbreak-controller:v0.1.13
+ 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
+ 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
+---
+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:
+ - image: platform9/vjailbreak-vpwned:v0.1.13
+ imagePullPolicy: IfNotPresent
+ name: vpwned
+ ports:
+ - containerPort: 3001
+ protocol: TCP
+ resources: {}
+ terminationMessagePath: /dev/termination-log
+ terminationMessagePolicy: File
+ dnsPolicy: ClusterFirst
+ restartPolicy: Always
+ schedulerName: default-scheduler
+ securityContext: {}
+ terminationGracePeriodSeconds: 30
+---
+apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+ annotations:
+ nginx.ingress.kubernetes.io/backend-protocol: HTTP
+ 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
diff --git a/deploy/01openstackcreds.yaml b/deploy/01openstackcreds.yaml
new file mode 100644
index 0000000..85ba829
--- /dev/null
+++ b/deploy/01openstackcreds.yaml
@@ -0,0 +1,12 @@
+apiVersion: vjailbreak.k8s.pf9.io/v1alpha1
+kind: OpenstackCreds
+metadata:
+ name: openstackcreds
+ namespace: migration-system
+spec:
+ OS_AUTH_URL:
+ OS_DOMAIN_NAME:
+ OS_USERNAME:
+ OS_PASSWORD:
+ OS_REGION_NAME:
+ OS_TENANT_NAME:
\ No newline at end of file
diff --git a/deploy/01vmwarecreds.yaml b/deploy/01vmwarecreds.yaml
new file mode 100644
index 0000000..e499315
--- /dev/null
+++ b/deploy/01vmwarecreds.yaml
@@ -0,0 +1,10 @@
+apiVersion: vjailbreak.k8s.pf9.io/v1alpha1
+kind: VMwareCreds
+metadata:
+ name: vmwarecreds
+ namespace: migration-system
+spec:
+ VCENTER_HOST:
+ VCENTER_INSECURE: true
+ VCENTER_PASSWORD:
+ VCENTER_USERNAME:
\ No newline at end of file
diff --git a/deploy/02networkmapping.yaml b/deploy/02networkmapping.yaml
new file mode 100644
index 0000000..d7441b5
--- /dev/null
+++ b/deploy/02networkmapping.yaml
@@ -0,0 +1,11 @@
+apiVersion: vjailbreak.k8s.pf9.io/v1alpha1
+kind: NetworkMapping
+metadata:
+ name: networkmapping
+ namespace: migration-system
+spec:
+ networks:
+ - source: VM Network
+ target: vlan1
+ - source: VM Network 2
+ target: vlan2
diff --git a/deploy/02storagemapping.yaml b/deploy/02storagemapping.yaml
new file mode 100644
index 0000000..52b5133
--- /dev/null
+++ b/deploy/02storagemapping.yaml
@@ -0,0 +1,9 @@
+apiVersion: vjailbreak.k8s.pf9.io/v1alpha1
+kind: StorageMapping
+metadata:
+ name: storagemapping
+ namespace: migration-system
+spec:
+ storages:
+ - source: vcenter-datastore-1
+ target: lvm
\ No newline at end of file
diff --git a/deploy/03migrationtemplate.yaml b/deploy/03migrationtemplate.yaml
new file mode 100644
index 0000000..bfb2763
--- /dev/null
+++ b/deploy/03migrationtemplate.yaml
@@ -0,0 +1,14 @@
+apiVersion: vjailbreak.k8s.pf9.io/v1alpha1
+kind: MigrationTemplate
+metadata:
+ name: migrationtemplate-windows
+ namespace: migration-system
+spec:
+ networkMapping: networkmapping
+ storageMapping: storagemapping
+ osType: windows
+ source:
+ datacenter: Datacenter Name
+ vmwareRef: vmwarecreds
+ destination:
+ openstackRef: openstackcreds
\ No newline at end of file
diff --git a/deploy/04migrationplan.yaml b/deploy/04migrationplan.yaml
new file mode 100644
index 0000000..8f086b5
--- /dev/null
+++ b/deploy/04migrationplan.yaml
@@ -0,0 +1,18 @@
+apiVersion: vjailbreak.k8s.pf9.io/v1alpha1
+kind: MigrationPlan
+metadata:
+ name: vm-migration-windows-app
+ namespace: migration-system
+spec:
+ migrationTemplate: migrationtemplate-windows
+ retry: true
+ migrationStrategy:
+ type: hot
+ dataCopyStart: 2024-08-2717:30:25.230Z
+ vmCutoverStart: 2024-08-27T17:30:25.230Z
+ vmCutoverEnd: 2024-08-28T17:30:25.230Z
+ virtualmachines:
+ - - winserver2k12
+ - winserver2k26
+ - - winserver2k16
+ - winserver2k19
\ No newline at end of file
diff --git a/deploy/04ui.yaml b/deploy/04ui.yaml
new file mode 100644
index 0000000..54fc65d
--- /dev/null
+++ b/deploy/04ui.yaml
@@ -0,0 +1,85 @@
+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:
+ serviceAccountName: migration-controller-manager
+ containers:
+ - name: vjailbreak-ui-container
+ image: platform9/vjailbreak-ui:v0.1
+ imagePullPolicy: IfNotPresent
+ ports:
+ - containerPort: 80
+---
+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"
+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"
+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
\ No newline at end of file
diff --git a/docs/.gitignore b/docs/.gitignore
new file mode 100644
index 0000000..6240da8
--- /dev/null
+++ b/docs/.gitignore
@@ -0,0 +1,21 @@
+# build output
+dist/
+# generated types
+.astro/
+
+# dependencies
+node_modules/
+
+# logs
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+
+
+# environment variables
+.env
+.env.production
+
+# macOS-specific files
+.DS_Store
diff --git a/docs/.nojekyll b/docs/.nojekyll
new file mode 100644
index 0000000..e69de29
diff --git a/docs/404.html b/docs/404.html
new file mode 100644
index 0000000..f1aceb0
--- /dev/null
+++ b/docs/404.html
@@ -0,0 +1,107 @@
+
404 | vJailbreak
+ Skip to content 404
Page not found. Check the URL or try using the search bar.
\ No newline at end of file
diff --git a/docs/README.md b/docs/README.md
new file mode 100644
index 0000000..f9f6d31
--- /dev/null
+++ b/docs/README.md
@@ -0,0 +1,54 @@
+# Starlight Starter Kit: Basics
+
+[](https://starlight.astro.build)
+
+```
+npm create astro@latest -- --template starlight
+```
+
+[](https://stackblitz.com/github/withastro/starlight/tree/main/examples/basics)
+[](https://codesandbox.io/p/sandbox/github/withastro/starlight/tree/main/examples/basics)
+[](https://app.netlify.com/start/deploy?repository=https://github.com/withastro/starlight&create_from_path=examples/basics)
+[](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fwithastro%2Fstarlight%2Ftree%2Fmain%2Fexamples%2Fbasics&project-name=my-starlight-docs&repository-name=my-starlight-docs)
+
+> 🧑🚀 **Seasoned astronaut?** Delete this file. Have fun!
+
+## 🚀 Project Structure
+
+Inside of your Astro + Starlight project, you'll see the following folders and files:
+
+```
+.
+├── public/
+├── src/
+│ ├── assets/
+│ ├── content/
+│ │ ├── docs/
+│ └── content.config.ts
+├── astro.config.mjs
+├── package.json
+└── tsconfig.json
+```
+
+Starlight looks for `.md` or `.mdx` files in the `src/content/docs/` directory. Each file is exposed as a route based on its file name.
+
+Images can be added to `src/assets/` and embedded in Markdown with a relative link.
+
+Static assets, like favicons, can be placed in the `public/` directory.
+
+## 🧞 Commands
+
+All commands are run from the root of the project, from a terminal:
+
+| Command | Action |
+| :------------------------ | :----------------------------------------------- |
+| `npm install` | Installs dependencies |
+| `npm run dev` | Starts local dev server at `localhost:4321` |
+| `npm run build` | Build your production site to `./dist/` |
+| `npm run preview` | Preview your build locally, before deploying |
+| `npm run astro ...` | Run CLI commands like `astro add`, `astro check` |
+| `npm run astro -- --help` | Get help using the Astro CLI |
+
+## 👀 Want to learn more?
+
+Check out [Starlight’s docs](https://starlight.astro.build/), read [the Astro documentation](https://docs.astro.build), or jump into the [Astro Discord server](https://astro.build/chat).
diff --git a/docs/_astro/MobileTableOfContents.astro_astro_type_script_index_0_lang.C181hMzK.js b/docs/_astro/MobileTableOfContents.astro_astro_type_script_index_0_lang.C181hMzK.js
new file mode 100644
index 0000000..c628d52
--- /dev/null
+++ b/docs/_astro/MobileTableOfContents.astro_astro_type_script_index_0_lang.C181hMzK.js
@@ -0,0 +1 @@
+import{S as r}from"./TableOfContents.astro_astro_type_script_index_0_lang.CKWWgpjV.js";class c extends r{set current(e){super.current=e;const t=this.querySelector(".display-current");t&&(t.textContent=e.textContent)}constructor(){super();const e=this.querySelector("details");if(!e)return;const t=()=>{e.open=!1};e.querySelectorAll("a").forEach(s=>{s.addEventListener("click",t)}),window.addEventListener("click",s=>{e.contains(s.target)||t()}),window.addEventListener("keydown",s=>{if(s.key==="Escape"&&e.open){const o=e.contains(document.activeElement);if(t(),o){const n=e.querySelector("summary");n&&n.focus()}}})}}customElements.define("mobile-starlight-toc",c);
diff --git a/docs/_astro/Search.astro_astro_type_script_index_0_lang.18-vQxR-.js b/docs/_astro/Search.astro_astro_type_script_index_0_lang.18-vQxR-.js
new file mode 100644
index 0000000..9377cdb
--- /dev/null
+++ b/docs/_astro/Search.astro_astro_type_script_index_0_lang.18-vQxR-.js
@@ -0,0 +1 @@
+const y="modulepreload",w=function(h){return"/"+h},g={},S=function(u,i,c){let m=Promise.resolve();if(i&&i.length>0){document.getElementsByTagName("link");const r=document.querySelector("meta[property=csp-nonce]"),t=r?.nonce||r?.getAttribute("nonce");m=Promise.allSettled(i.map(n=>{if(n=w(n),n in g)return;g[n]=!0;const d=n.endsWith(".css"),f=d?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${n}"]${f}`))return;const o=document.createElement("link");if(o.rel=d?"stylesheet":y,d||(o.as="script"),o.crossOrigin="",o.href=n,t&&o.setAttribute("nonce",t),document.head.appendChild(o),d)return new Promise((e,s)=>{o.addEventListener("load",e),o.addEventListener("error",()=>s(new Error(`Unable to preload CSS for ${n}`)))})}))}function l(r){const t=new Event("vite:preloadError",{cancelable:!0});if(t.payload=r,window.dispatchEvent(t),!t.defaultPrevented)throw r}return m.then(r=>{for(const t of r||[])t.status==="rejected"&&l(t.reason);return u().catch(l)})},E={ranking:{pageLength:.1,termFrequency:.1,termSaturation:2,termSimilarity:9}};class v extends HTMLElement{constructor(){super();const u=this.querySelector("button[data-open-modal]"),i=this.querySelector("button[data-close-modal]"),c=this.querySelector("dialog"),m=this.querySelector(".dialog-frame"),l=e=>{("href"in(e.target||{})||document.body.contains(e.target)&&!m.contains(e.target))&&t()},r=e=>{c.showModal(),document.body.toggleAttribute("data-search-modal-open",!0),this.querySelector("input")?.focus(),e?.stopPropagation(),window.addEventListener("click",l)},t=()=>c.close();u.addEventListener("click",r),u.disabled=!1,i.addEventListener("click",t),c.addEventListener("close",()=>{document.body.toggleAttribute("data-search-modal-open",!1),window.removeEventListener("click",l)}),window.addEventListener("keydown",e=>{(e.metaKey===!0||e.ctrlKey===!0)&&e.key==="k"&&(c.open?t():r(),e.preventDefault())});let n={};try{n=JSON.parse(this.dataset.translations||"{}")}catch{}const o=this.dataset.stripTrailingSlash!==void 0?e=>e.replace(/(.)\/(#.*)?$/,"$1$2"):e=>e;window.addEventListener("DOMContentLoaded",()=>{(window.requestIdleCallback||(s=>setTimeout(s,1)))(async()=>{const{PagefindUI:s}=await S(async()=>{const{PagefindUI:a}=await import("./ui-core.DklwHuoF.js");return{PagefindUI:a}},[]);new s({...E,element:"#starlight__search",baseUrl:"/",bundlePath:"/".replace(/\/$/,"")+"/pagefind/",showImages:!1,translations:n,showSubResults:!0,processResult:a=>{a.url=o(a.url),a.sub_results=a.sub_results.map(p=>(p.url=o(p.url),p))}})})})}}customElements.define("site-search",v);export{S as _};
diff --git a/docs/_astro/TableOfContents.astro_astro_type_script_index_0_lang.CKWWgpjV.js b/docs/_astro/TableOfContents.astro_astro_type_script_index_0_lang.CKWWgpjV.js
new file mode 100644
index 0000000..1a8ac41
--- /dev/null
+++ b/docs/_astro/TableOfContents.astro_astro_type_script_index_0_lang.CKWWgpjV.js
@@ -0,0 +1 @@
+const g="_top";class f extends HTMLElement{constructor(){super(),this._current=this.querySelector('a[aria-current="true"]'),this.minH=parseInt(this.dataset.minH||"2",10),this.maxH=parseInt(this.dataset.maxH||"3",10),this.onIdle=e=>(window.requestIdleCallback||(o=>setTimeout(o,1)))(e),this.init=()=>{const e=[...this.querySelectorAll("a")],o=t=>{if(t instanceof HTMLHeadingElement){if(t.id===g)return!0;const s=t.tagName[1];if(s){const n=parseInt(s,10);if(n>=this.minH&&n<=this.maxH)return!0}}return!1},i=t=>{if(!t)return null;const s=t;for(;t;){if(o(t))return t;for(t=t.previousElementSibling;t?.lastElementChild;)t=t.lastElementChild;const n=i(t);if(n)return n}return i(s.parentElement)},c=t=>{for(const{isIntersecting:s,target:n}of t){if(!s)continue;const l=i(n);if(!l)continue;const m=e.find(d=>d.hash==="#"+encodeURIComponent(l.id));if(m){this.current=m;break}}},a=document.querySelectorAll("main [id], main [id] ~ *, main .content > *");let r;const u=()=>{r||(r=new IntersectionObserver(c,{rootMargin:this.getRootMargin()}),a.forEach(t=>r.observe(t)))};u();let h;window.addEventListener("resize",()=>{r&&(r.disconnect(),r=void 0),clearTimeout(h),h=setTimeout(()=>this.onIdle(u),200)})},this.onIdle(()=>this.init())}set current(e){e!==this._current&&(this._current&&this._current.removeAttribute("aria-current"),e.setAttribute("aria-current","true"),this._current=e)}getRootMargin(){const e=document.querySelector("header")?.getBoundingClientRect().height||0,o=this.querySelector("summary")?.getBoundingClientRect().height||0,i=e+o+32,c=i+53,a=document.documentElement.clientHeight;return`-${i}px 0% ${c-a}px`}}customElements.define("starlight-toc",f);export{f as S};
diff --git a/docs/_astro/collections/docs.schema.json b/docs/_astro/collections/docs.schema.json
new file mode 100644
index 0000000..3a38d06
--- /dev/null
+++ b/docs/_astro/collections/docs.schema.json
@@ -0,0 +1,636 @@
+{
+ "$ref": "#/definitions/docs",
+ "definitions": {
+ "docs": {
+ "type": "object",
+ "properties": {
+ "title": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "editUrl": {
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "uri"
+ },
+ {
+ "type": "boolean"
+ }
+ ],
+ "default": true
+ },
+ "head": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "tag": {
+ "type": "string",
+ "enum": [
+ "title",
+ "base",
+ "link",
+ "style",
+ "meta",
+ "script",
+ "noscript",
+ "template"
+ ]
+ },
+ "attrs": {
+ "type": "object",
+ "additionalProperties": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "boolean"
+ },
+ {
+ "not": {}
+ }
+ ]
+ },
+ "default": {}
+ },
+ "content": {
+ "type": "string",
+ "default": ""
+ }
+ },
+ "required": [
+ "tag"
+ ],
+ "additionalProperties": false
+ },
+ "default": []
+ },
+ "tableOfContents": {
+ "anyOf": [
+ {
+ "type": "object",
+ "properties": {
+ "minHeadingLevel": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 6,
+ "default": 2
+ },
+ "maxHeadingLevel": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 6,
+ "default": 3
+ }
+ },
+ "additionalProperties": false
+ },
+ {
+ "type": "boolean"
+ }
+ ],
+ "default": {
+ "minHeadingLevel": 2,
+ "maxHeadingLevel": 3
+ }
+ },
+ "template": {
+ "type": "string",
+ "enum": [
+ "doc",
+ "splash"
+ ],
+ "default": "doc"
+ },
+ "hero": {
+ "type": "object",
+ "properties": {
+ "title": {
+ "type": "string"
+ },
+ "tagline": {
+ "type": "string"
+ },
+ "image": {
+ "anyOf": [
+ {
+ "type": "object",
+ "properties": {
+ "alt": {
+ "type": "string",
+ "default": ""
+ },
+ "file": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "file"
+ ],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "alt": {
+ "type": "string",
+ "default": ""
+ },
+ "dark": {
+ "type": "string"
+ },
+ "light": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "dark",
+ "light"
+ ],
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "html": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "html"
+ ],
+ "additionalProperties": false
+ }
+ ]
+ },
+ "actions": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "text": {
+ "type": "string"
+ },
+ "link": {
+ "type": "string"
+ },
+ "variant": {
+ "type": "string",
+ "enum": [
+ "primary",
+ "secondary",
+ "minimal"
+ ],
+ "default": "primary"
+ },
+ "icon": {
+ "anyOf": [
+ {
+ "type": "string",
+ "enum": [
+ "up-caret",
+ "down-caret",
+ "right-caret",
+ "left-caret",
+ "up-arrow",
+ "down-arrow",
+ "right-arrow",
+ "left-arrow",
+ "bars",
+ "translate",
+ "pencil",
+ "pen",
+ "document",
+ "add-document",
+ "setting",
+ "external",
+ "download",
+ "cloud-download",
+ "moon",
+ "sun",
+ "laptop",
+ "open-book",
+ "information",
+ "magnifier",
+ "forward-slash",
+ "close",
+ "error",
+ "warning",
+ "approve-check-circle",
+ "approve-check",
+ "rocket",
+ "star",
+ "puzzle",
+ "list-format",
+ "random",
+ "comment",
+ "comment-alt",
+ "heart",
+ "github",
+ "gitlab",
+ "bitbucket",
+ "codePen",
+ "farcaster",
+ "discord",
+ "gitter",
+ "twitter",
+ "x.com",
+ "mastodon",
+ "codeberg",
+ "youtube",
+ "threads",
+ "linkedin",
+ "twitch",
+ "azureDevOps",
+ "microsoftTeams",
+ "instagram",
+ "stackOverflow",
+ "telegram",
+ "rss",
+ "facebook",
+ "email",
+ "phone",
+ "reddit",
+ "patreon",
+ "signal",
+ "slack",
+ "matrix",
+ "hackerOne",
+ "openCollective",
+ "blueSky",
+ "discourse",
+ "zulip",
+ "pinterest",
+ "tiktok",
+ "astro",
+ "alpine",
+ "pnpm",
+ "biome",
+ "bun",
+ "mdx",
+ "apple",
+ "linux",
+ "homebrew",
+ "nix",
+ "starlight",
+ "pkl",
+ "node",
+ "cloudflare",
+ "vercel",
+ "netlify",
+ "deno",
+ "jsr",
+ "nostr",
+ "backstage",
+ "confluence",
+ "jira",
+ "storybook",
+ "seti:folder",
+ "seti:bsl",
+ "seti:mdo",
+ "seti:salesforce",
+ "seti:asm",
+ "seti:bicep",
+ "seti:bazel",
+ "seti:c",
+ "seti:c-sharp",
+ "seti:html",
+ "seti:cpp",
+ "seti:clojure",
+ "seti:coldfusion",
+ "seti:config",
+ "seti:crystal",
+ "seti:crystal_embedded",
+ "seti:json",
+ "seti:css",
+ "seti:csv",
+ "seti:xls",
+ "seti:cu",
+ "seti:cake",
+ "seti:cake_php",
+ "seti:d",
+ "seti:word",
+ "seti:elixir",
+ "seti:elixir_script",
+ "seti:hex",
+ "seti:elm",
+ "seti:favicon",
+ "seti:f-sharp",
+ "seti:git",
+ "seti:go",
+ "seti:godot",
+ "seti:gradle",
+ "seti:grails",
+ "seti:graphql",
+ "seti:hacklang",
+ "seti:haml",
+ "seti:mustache",
+ "seti:haskell",
+ "seti:haxe",
+ "seti:jade",
+ "seti:java",
+ "seti:javascript",
+ "seti:jinja",
+ "seti:julia",
+ "seti:karma",
+ "seti:kotlin",
+ "seti:dart",
+ "seti:liquid",
+ "seti:livescript",
+ "seti:lua",
+ "seti:markdown",
+ "seti:argdown",
+ "seti:info",
+ "seti:clock",
+ "seti:maven",
+ "seti:nim",
+ "seti:github",
+ "seti:notebook",
+ "seti:nunjucks",
+ "seti:npm",
+ "seti:ocaml",
+ "seti:odata",
+ "seti:perl",
+ "seti:php",
+ "seti:pipeline",
+ "seti:pddl",
+ "seti:plan",
+ "seti:happenings",
+ "seti:powershell",
+ "seti:prisma",
+ "seti:pug",
+ "seti:puppet",
+ "seti:purescript",
+ "seti:python",
+ "seti:react",
+ "seti:rescript",
+ "seti:R",
+ "seti:ruby",
+ "seti:rust",
+ "seti:sass",
+ "seti:spring",
+ "seti:slim",
+ "seti:smarty",
+ "seti:sbt",
+ "seti:scala",
+ "seti:ethereum",
+ "seti:stylus",
+ "seti:svelte",
+ "seti:swift",
+ "seti:db",
+ "seti:terraform",
+ "seti:tex",
+ "seti:default",
+ "seti:twig",
+ "seti:typescript",
+ "seti:tsconfig",
+ "seti:vala",
+ "seti:vite",
+ "seti:vue",
+ "seti:wasm",
+ "seti:wat",
+ "seti:xml",
+ "seti:yml",
+ "seti:prolog",
+ "seti:zig",
+ "seti:zip",
+ "seti:wgt",
+ "seti:illustrator",
+ "seti:photoshop",
+ "seti:pdf",
+ "seti:font",
+ "seti:image",
+ "seti:svg",
+ "seti:sublime",
+ "seti:code-search",
+ "seti:shell",
+ "seti:video",
+ "seti:audio",
+ "seti:windows",
+ "seti:jenkins",
+ "seti:babel",
+ "seti:bower",
+ "seti:docker",
+ "seti:code-climate",
+ "seti:eslint",
+ "seti:firebase",
+ "seti:firefox",
+ "seti:gitlab",
+ "seti:grunt",
+ "seti:gulp",
+ "seti:ionic",
+ "seti:platformio",
+ "seti:rollup",
+ "seti:stylelint",
+ "seti:yarn",
+ "seti:webpack",
+ "seti:lock",
+ "seti:license",
+ "seti:makefile",
+ "seti:heroku",
+ "seti:todo",
+ "seti:ignored"
+ ]
+ },
+ {
+ "type": "string",
+ "pattern": "^\\