Repository: stolostron/rhacm-docs
Pull request #7608: https://issues.redhat.com/browse/ACM-17665--Add Provisioning section to Edge Manager
Author: login: amolnar-gh
Labels: name: lgtm
Created: 2025-03-11T17:45:30Z | Merged: 2025-03-18T16:19:25Z



Diff:
diff --git a/edge_manager/edge_mgr_intro.adoc b/edge_manager/edge_mgr_intro.adoc
index 8e5a46f9ee..be8a9a2b2f 100644
--- a/edge_manager/edge_mgr_intro.adoc
+++ b/edge_manager/edge_mgr_intro.adoc
@@ -10,7 +10,7 @@ By using the {rhem} on {acm}, you can manage non-Kubernetes workloads and your o
 See the following topics to learn more about using {rhem} on {acm-short}. All features are in *Technology Preview* status:
 
 * xref:../edge_manager/edge_mgr_arch.adoc#rhem-architecture[{rhem} architecture]
-* xref:../edge_manager/edge_mgr_enable.adoc#rhem-enable[Enabling the {rhem}]
-//* xref:../edge_manager/edge_mgr_provisioning_intro#provisioning-devices-intro[Provisioning devices]
+* xref:../edge_manager/edge_mgr_enable.adoc#edge-enable[Enabling the {rhem}]
+* xref:../edge_manager/edge_mgr_provisioning_intro#provisioning-devices-intro[Provisioning devices]
 * xref:../edge_manager/edge_mgr_manage_devices_intro.adoc#manage-devices-intro[Managing devices]
 * xref:../edge_manager/edge_mgr_fleets.adoc#device_fleets[Device fleets]
\ No newline at end of file
diff --git a/edge_manager/edge_mgr_provisioning_intro.adoc b/edge_manager/edge_mgr_provisioning_intro.adoc
new file mode 100644
index 0000000000..07db0ed8c1
--- /dev/null
+++ b/edge_manager/edge_mgr_provisioning_intro.adoc
@@ -0,0 +1,12 @@
+[#provisioning-devices-intro]
+= Provisioning devices
+
+You can provision devices with the {rhem} in different environments.
+Use the operating system image or disk image that you built for use with the {rhem} and depending on your target environment, provision a physical or virtual device.
+
+*Required access:* Cluster administrator
+
+See the following documentation:
+
+* xref:../edge_manager/edge_mgr_provisioning_physical.adoc#edge-mgr-provisioning-physical[Provisioning physical devices]
+* xref:../edge_manager/edge_mgr_provisioning_virt.adoc#edge-mgr-provisioning-openshift-virt[Provisioning devices on {ocp-virt-short}]
\ No newline at end of file
diff --git a/edge_manager/edge_mgr_provisioning_physical.adoc b/edge_manager/edge_mgr_provisioning_physical.adoc
new file mode 100644
index 0000000000..8ee2fe30ac
--- /dev/null
+++ b/edge_manager/edge_mgr_provisioning_physical.adoc
@@ -0,0 +1,8 @@
+[#edge-mgr-provisioning-physical]
+= Provisioning physical devices
+
+When you build an ISO disk image from an operating system image by using the `bootc-image-builder` tool, the image is similar to the RHEL ISOs available for download. However, your operating system image content is embedded in the ISO disk image.
+
+To install the ISO disk image to a bare metal system without having access to the network, see link:https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/using_image_mode_for_rhel_to_build_deploy_and_manage_operating_systems/deploying-the-rhel-bootc-images_using-image-mode-for-rhel-to-build-deploy-and-manage-operating-systems#deploying-an-custom-iso-container-image_deploying-the-rhel-bootc-images[Deploying a custom ISO container image].
+
+For information about installing the ISO through the network, see link:https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/using_image_mode_for_rhel_to_build_deploy_and_manage_operating_systems/deploying-the-rhel-bootc-images_using-image-mode-for-rhel-to-build-deploy-and-manage-operating-systems#deploying-an-iso-bootc-container-over-pxe-boot_deploying-the-rhel-bootc-images[Deploying an ISO _bootc_ image over PXE boot].
\ No newline at end of file
diff --git a/edge_manager/edge_mgr_provisioning_virt.adoc b/edge_manager/edge_mgr_provisioning_virt.adoc
new file mode 100644
index 0000000000..2be34f8c39
--- /dev/null
+++ b/edge_manager/edge_mgr_provisioning_virt.adoc
@@ -0,0 +1,107 @@
+[#edge-mgr-provisioning-openshift-virt]
+= Provisioning devices on {ocp-virt-short}
+
+You can provision a virtual machine on {ocp-virt-short} by using a QCoW2 container disk image that is hosted on an OCI container registry.
+
+If your operating system image does not already contain the {rhem} agent enrollment configuration, you can inject the configuration through the `cloud-init` user data at provisioning.
+
+For more information, see the _Additional resources_ section.
+
+[#provisioning-virt-prereq]
+== Prerequisites
+
+* You installed the `flightctl` CLI and logged in to your {rhem} service instance.
+* You installed the `oc` CLI, used it to log in to your OpenShift cluster instance, and changed to the project in which you want to create your virtual machine.
+
+[#provisioning-virt-cloudinit-config]
+== Creating the _cloud-init_ configuration
+
+To create the `cloud-init` configuration, complete the following steps:
+
+. Request a new {rhem} agent enrollment configuration and store it in a file called `config.yaml`. Run the following command:
+
++
+[source,bash]
+----
+flightctl certificate request --signer=enrollment --expiration=365d --output=embedded > config.yaml
+----
+
+. Create a cloud configuration user data file called `cloud-config.yaml` that places the agent configuration in the correct location on the first boot. Run the following command:
+
++
+[source,bash]
+----
+cat <<EOF > cloud-config.yaml
+#cloud-config
+write_files:
+- path: /etc/flightctl/config.yaml
+  content: $(cat config.yaml | base64 -w0)
+  encoding: b64
+EOF
+----
+
+. Create a Kubernetes `Secret` that contains the cloud configuration user data file:
+
++
+[source,bash]
+----
+oc create secret generic enrollment-secret --from-file=userdata=cloud-config.yaml
+----
+
+[#provisioning-virt-create-vm]
+== Creating the virtual machine
+
+Create a virtual machine that has its primary disk populated from your QCoW2 container disk image and a `cloud-init` configuration drive that is populated from your enrollment secret.
+Complete the following steps:
+
+. Create a file that contains a the `VirtualMachine` resource manifest by running the following command:
+
++
+[source,bash]
+----
+cat <<EOF > my-bootc-vm.yaml
+apiVersion: kubevirt.io/v1
+kind: VirtualMachine
+metadata:
+  name: my-bootc-vm
+spec:
+  runStrategy: RerunOnFailure
+  template:
+    spec:
+      domain:
+        cpu:
+          cores: 1
+        memory:
+          guest: 1024M
+        devices:
+          disks:
+            - name: containerdisk
+              disk:
+                bus: virtio
+            - name: cloudinitdisk
+              disk:
+                bus: virtio
+      volumes:
+        - name: containerdisk
+          containerDisk:
+            image: ${OCI_DISK_IMAGE_REPO}:${OCI_IMAGE_TAG}
+        - name: cloudinitdisk
+          cloudInitConfigDrive:
+            secretRef:
+              name: enrollment-secret
+EOF
+----
+
+. Apply the resource manifest to your cluster by running the following command:
+
++
+[source,bash]
+----
+oc apply -f my-bootc-vm.yaml
+----
+
+[#additional-resources-provisioning-virt]
+== Additional resources
+
+* For more information about how to inject the configuration through the `cloud-init` user data, see link:https://cloudinit.readthedocs.io/en/latest/[Cloud-init documentation].
+* See xref:../edge_manager/edge_mgr_build_images_platform_requirements.adoc#rhem-virt[Image building for {ocp-virt}].
\ No newline at end of file
diff --git a/edge_manager/main.adoc b/edge_manager/main.adoc
index 6e14337500..406d4463b7 100644
--- a/edge_manager/main.adoc
+++ b/edge_manager/main.adoc
@@ -11,6 +11,8 @@ include::edge_mgr_images.adoc[leveloffset=+2]
 include::edge_mgr_images_consider.adoc[leveloffset=+3]
 include::edge_mgr_build_images.adoc[leveloffset=+3]
 include::edge_mgr_build_images_platform_requirements.adoc[leveloffset=+4]
+include::edge_mgr_provisioning_intro.adoc[leveloffset=+2]
+include::edge_mgr_provisioning_virt.adoc[leveloffset=+3]
 include::edge_mgr_manage_devices_intro.adoc[leveloffset=+2]
 include::edge_mgr_enroll_devices.adoc[leveloffset=+3]
 include::edge_mgr_view_devices.adoc[leveloffset=+3]


Reviews:
user: login: fzdarsky
state: COMMENTED
author_association: NONE
submitted_at: 2025-03-11T20:37:12Z
user: login: amolnar-gh
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-12T09:07:15Z
user: login: fzdarsky
state: COMMENTED
author_association: NONE
submitted_at: 2025-03-12T20:01:55Z
user: login: amolnar-gh
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-13T09:59:35Z
user: login: amolnar-gh
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-13T10:04:20Z
user: login: amolnar-gh
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-13T10:08:21Z
user: login: fzdarsky
state: COMMENTED
author_association: NONE
submitted_at: 2025-03-13T16:09:37Z
user: login: swopebe
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-03-18T16:18:34Z

Review comments:
diff_hunk: @@ -0,0 +1,250 @@
+[#edge-provisioning]
+= Provisioning devices with the {rhem}
+
+Use the operating system image or disk image that you built for using with the {rhem} and depending on your target environment, provision a physical or virtual device.
+
+Learn more from the following sections:
+
+* <<edge-provisioning-physical,Provisioning physical devices>>
+* <<edge-provisioning-openshift-virt,Provisioning on {ocp-virt-short}>>
+* <<edge-provisioning-vmware-vsphere,Provisioning on VMware vSphere>>
+
+[#edge-provisioning-physical]
+== Provisioning physical devices
+
+When you build an ISO disk image from an operating system image by using the `bootc-image-builder` tool, the image is similar to the RHEL ISOs available for download, however, your operating system image content is embedded in the ISO disk image.
+
+[#edge-provisioning-physical-prereq]
+=== Prerequisites
+
+* You created an ISO disk image that is embedded with your `bootc` image.
path: edge_manager/edge_mgr_provisioning.adoc
user: login: fzdarsky
body: ```suggestion
* You created an ISO disk image with your `bootc` image embedded.
```
I think. The bootc image is embedded in the ISO.
created_at: 2025-03-11T20:08:42Z
author_association: NONE
diff_hunk: @@ -0,0 +1,250 @@
+[#edge-provisioning]
+= Provisioning devices with the {rhem}
+
+Use the operating system image or disk image that you built for using with the {rhem} and depending on your target environment, provision a physical or virtual device.
+
+Learn more from the following sections:
+
+* <<edge-provisioning-physical,Provisioning physical devices>>
+* <<edge-provisioning-openshift-virt,Provisioning on {ocp-virt-short}>>
+* <<edge-provisioning-vmware-vsphere,Provisioning on VMware vSphere>>
+
+[#edge-provisioning-physical]
+== Provisioning physical devices
+
+When you build an ISO disk image from an operating system image by using the `bootc-image-builder` tool, the image is similar to the RHEL ISOs available for download, however, your operating system image content is embedded in the ISO disk image.
+
+[#edge-provisioning-physical-prereq]
+=== Prerequisites
+
+* You created an ISO disk image that is embedded with your `bootc` image.
+//TODO link See xref:../edge_manager/edge_mgr_build_images.adoc#edge-mgr-build)[Building a _bootc_ operating system image for use with the {rhem}].
+
+[#edge-provisioning-physical-proc]
+=== Provisioning physical devices
+
+You do not need to have access to the network during provisioning.
+You can install the ISO disk image to a bare metal system. 
+
+To provision a physical device from the ISO disk image, complete the following steps:
+
+. Copy your ISO disk image to a USB flash drive.
+
+. Install your physical device from the USB flash drive.
+
+[#edge-provisioning-openshift-virt]
+== Provisioning on {ocp-virt-short}
+
+You can provision a virtual machine on {ocp-virt-short} by using a QCoW2 disk image that is hosted on an OCI container registry.
+
+If your operating system image does not already contain the {rhem} agent enrollment configuration, you can inject the configuration through the `cloud-init` user data at provisioning.
+
+[#edge-provisioning-virt-prereq]
+=== Prerequisites
+
+* You installed the `flightctl` CLI and logged in to your {rhem} service instance.
+* You installed the `oc` CLI, used it to log in to your OpenShift cluster instance, and changed to the project in which you want to create your virtual machine.
+
+[#edge-provisioning-virt-proc]
+=== Provisioning on {ocp-virt-short}
+
+To create the `cloud-init` configuration, complete the following steps:
+
+. Request a new {rhem} agent enrollment configuration and store it in a file called `config.yaml`. Run the following command:
+
++
+[source,bash]
+----
+flightctl certificate request --signer=enrollment --expiration=365d --output=embedded > config.yaml
+----
+
+. Create cloud configuration user data file called `cloud-config.yaml` that places the agent configuration in the correct location on the first boot. Run the following command:
path: edge_manager/edge_mgr_provisioning.adoc
user: login: fzdarsky
body: ```suggestion
. Create a cloud configuration user data file called `cloud-config.yaml` that places the agent configuration in the correct location on the first boot. Run the following command:
```
created_at: 2025-03-11T20:10:43Z
author_association: NONE
diff_hunk: @@ -0,0 +1,250 @@
+[#edge-provisioning]
+= Provisioning devices with the {rhem}
+
+Use the operating system image or disk image that you built for using with the {rhem} and depending on your target environment, provision a physical or virtual device.
+
+Learn more from the following sections:
+
+* <<edge-provisioning-physical,Provisioning physical devices>>
+* <<edge-provisioning-openshift-virt,Provisioning on {ocp-virt-short}>>
+* <<edge-provisioning-vmware-vsphere,Provisioning on VMware vSphere>>
+
+[#edge-provisioning-physical]
+== Provisioning physical devices
+
+When you build an ISO disk image from an operating system image by using the `bootc-image-builder` tool, the image is similar to the RHEL ISOs available for download, however, your operating system image content is embedded in the ISO disk image.
+
+[#edge-provisioning-physical-prereq]
+=== Prerequisites
+
+* You created an ISO disk image that is embedded with your `bootc` image.
+//TODO link See xref:../edge_manager/edge_mgr_build_images.adoc#edge-mgr-build)[Building a _bootc_ operating system image for use with the {rhem}].
+
+[#edge-provisioning-physical-proc]
+=== Provisioning physical devices
+
+You do not need to have access to the network during provisioning.
+You can install the ISO disk image to a bare metal system. 
+
+To provision a physical device from the ISO disk image, complete the following steps:
+
+. Copy your ISO disk image to a USB flash drive.
+
+. Install your physical device from the USB flash drive.
+
+[#edge-provisioning-openshift-virt]
+== Provisioning on {ocp-virt-short}
+
+You can provision a virtual machine on {ocp-virt-short} by using a QCoW2 disk image that is hosted on an OCI container registry.
+
+If your operating system image does not already contain the {rhem} agent enrollment configuration, you can inject the configuration through the `cloud-init` user data at provisioning.
+
+[#edge-provisioning-virt-prereq]
+=== Prerequisites
+
+* You installed the `flightctl` CLI and logged in to your {rhem} service instance.
+* You installed the `oc` CLI, used it to log in to your OpenShift cluster instance, and changed to the project in which you want to create your virtual machine.
+
+[#edge-provisioning-virt-proc]
+=== Provisioning on {ocp-virt-short}
+
+To create the `cloud-init` configuration, complete the following steps:
+
+. Request a new {rhem} agent enrollment configuration and store it in a file called `config.yaml`. Run the following command:
+
++
+[source,bash]
+----
+flightctl certificate request --signer=enrollment --expiration=365d --output=embedded > config.yaml
+----
+
+. Create cloud configuration user data file called `cloud-config.yaml` that places the agent configuration in the correct location on the first boot. Run the following command:
+
++
+[source,bash]
+----
+cat << END > cloud-config.yaml
+#cloud-config
+write_files:
+- path: /etc/flightctl/config_test.yaml
path: edge_manager/edge_mgr_provisioning.adoc
user: login: fzdarsky
body: ```suggestion
- path: /etc/flightctl/config.yaml
```
Left-over from testing, sorry. Updated the upstream docs.
created_at: 2025-03-11T20:11:25Z
author_association: NONE
diff_hunk: @@ -0,0 +1,250 @@
+[#edge-provisioning]
+= Provisioning devices with the {rhem}
+
+Use the operating system image or disk image that you built for using with the {rhem} and depending on your target environment, provision a physical or virtual device.
+
+Learn more from the following sections:
+
+* <<edge-provisioning-physical,Provisioning physical devices>>
+* <<edge-provisioning-openshift-virt,Provisioning on {ocp-virt-short}>>
+* <<edge-provisioning-vmware-vsphere,Provisioning on VMware vSphere>>
+
+[#edge-provisioning-physical]
+== Provisioning physical devices
+
+When you build an ISO disk image from an operating system image by using the `bootc-image-builder` tool, the image is similar to the RHEL ISOs available for download, however, your operating system image content is embedded in the ISO disk image.
+
+[#edge-provisioning-physical-prereq]
+=== Prerequisites
+
+* You created an ISO disk image that is embedded with your `bootc` image.
+//TODO link See xref:../edge_manager/edge_mgr_build_images.adoc#edge-mgr-build)[Building a _bootc_ operating system image for use with the {rhem}].
+
+[#edge-provisioning-physical-proc]
+=== Provisioning physical devices
+
+You do not need to have access to the network during provisioning.
+You can install the ISO disk image to a bare metal system. 
+
+To provision a physical device from the ISO disk image, complete the following steps:
+
+. Copy your ISO disk image to a USB flash drive.
+
+. Install your physical device from the USB flash drive.
+
+[#edge-provisioning-openshift-virt]
+== Provisioning on {ocp-virt-short}
+
+You can provision a virtual machine on {ocp-virt-short} by using a QCoW2 disk image that is hosted on an OCI container registry.
+
+If your operating system image does not already contain the {rhem} agent enrollment configuration, you can inject the configuration through the `cloud-init` user data at provisioning.
+
+[#edge-provisioning-virt-prereq]
+=== Prerequisites
+
+* You installed the `flightctl` CLI and logged in to your {rhem} service instance.
+* You installed the `oc` CLI, used it to log in to your OpenShift cluster instance, and changed to the project in which you want to create your virtual machine.
+
+[#edge-provisioning-virt-proc]
+=== Provisioning on {ocp-virt-short}
+
+To create the `cloud-init` configuration, complete the following steps:
+
+. Request a new {rhem} agent enrollment configuration and store it in a file called `config.yaml`. Run the following command:
+
++
+[source,bash]
+----
+flightctl certificate request --signer=enrollment --expiration=365d --output=embedded > config.yaml
+----
+
+. Create cloud configuration user data file called `cloud-config.yaml` that places the agent configuration in the correct location on the first boot. Run the following command:
+
++
+[source,bash]
+----
+cat << END > cloud-config.yaml
+#cloud-config
+write_files:
+- path: /etc/flightctl/config_test.yaml
+  content: $(cat config.yaml | base64 -w0)
+  encoding: b64
+END
+----
+
+. Create a Kubernetes `Secret` that contains the cloud configuration user data file:
+
++
+[source,bash]
+----
+oc create secret generic enrollment-secret --from-file=userdata=cloud-config.yaml
+----
+
+. *Optional:* To create a virtual machine that has its primary disk populated from your QCoW2 container disk image and a `cloud-init` configuration drive that is populated from your enrollment secret, complete the following steps:
path: edge_manager/edge_mgr_provisioning.adoc
user: login: fzdarsky
body: This part is mandatory. Ok, at least if a user wants to provision completely on the CLI. An alternative would be to use the UI for the rest of the provisioning.
created_at: 2025-03-11T20:14:44Z
author_association: NONE
diff_hunk: @@ -0,0 +1,250 @@
+[#edge-provisioning]
+= Provisioning devices with the {rhem}
+
+Use the operating system image or disk image that you built for using with the {rhem} and depending on your target environment, provision a physical or virtual device.
+
+Learn more from the following sections:
+
+* <<edge-provisioning-physical,Provisioning physical devices>>
+* <<edge-provisioning-openshift-virt,Provisioning on {ocp-virt-short}>>
+* <<edge-provisioning-vmware-vsphere,Provisioning on VMware vSphere>>
+
+[#edge-provisioning-physical]
+== Provisioning physical devices
+
+When you build an ISO disk image from an operating system image by using the `bootc-image-builder` tool, the image is similar to the RHEL ISOs available for download, however, your operating system image content is embedded in the ISO disk image.
+
+[#edge-provisioning-physical-prereq]
+=== Prerequisites
+
+* You created an ISO disk image that is embedded with your `bootc` image.
+//TODO link See xref:../edge_manager/edge_mgr_build_images.adoc#edge-mgr-build)[Building a _bootc_ operating system image for use with the {rhem}].
+
+[#edge-provisioning-physical-proc]
+=== Provisioning physical devices
+
+You do not need to have access to the network during provisioning.
+You can install the ISO disk image to a bare metal system. 
+
+To provision a physical device from the ISO disk image, complete the following steps:
+
+. Copy your ISO disk image to a USB flash drive.
+
+. Install your physical device from the USB flash drive.
+
+[#edge-provisioning-openshift-virt]
+== Provisioning on {ocp-virt-short}
+
+You can provision a virtual machine on {ocp-virt-short} by using a QCoW2 disk image that is hosted on an OCI container registry.
+
+If your operating system image does not already contain the {rhem} agent enrollment configuration, you can inject the configuration through the `cloud-init` user data at provisioning.
+
+[#edge-provisioning-virt-prereq]
+=== Prerequisites
+
+* You installed the `flightctl` CLI and logged in to your {rhem} service instance.
+* You installed the `oc` CLI, used it to log in to your OpenShift cluster instance, and changed to the project in which you want to create your virtual machine.
+
+[#edge-provisioning-virt-proc]
+=== Provisioning on {ocp-virt-short}
+
+To create the `cloud-init` configuration, complete the following steps:
+
+. Request a new {rhem} agent enrollment configuration and store it in a file called `config.yaml`. Run the following command:
+
++
+[source,bash]
+----
+flightctl certificate request --signer=enrollment --expiration=365d --output=embedded > config.yaml
+----
+
+. Create cloud configuration user data file called `cloud-config.yaml` that places the agent configuration in the correct location on the first boot. Run the following command:
+
++
+[source,bash]
+----
+cat << END > cloud-config.yaml
+#cloud-config
+write_files:
+- path: /etc/flightctl/config_test.yaml
+  content: $(cat config.yaml | base64 -w0)
+  encoding: b64
+END
+----
+
+. Create a Kubernetes `Secret` that contains the cloud configuration user data file:
+
++
+[source,bash]
+----
+oc create secret generic enrollment-secret --from-file=userdata=cloud-config.yaml
+----
+
+. *Optional:* To create a virtual machine that has its primary disk populated from your QCoW2 container disk image and a `cloud-init` configuration drive that is populated from your enrollment secret, complete the following steps:
+
+.. Create a file that contains a the `VirtualMachine` resource manifest by running the following command:
+
++
+[source,bash]
+----
+cat << END > my-bootc-vm.yaml
+apiVersion: kubevirt.io/v1
+kind: VirtualMachine
+metadata:
+  name: my-bootc-vm
+spec:
+  runStrategy: RerunOnFailure
+  template:
+    spec:
+      domain:
+        cpu:
+          cores: 1
+        memory:
+          guest: 1024M
+        devices:
+          disks:
+            - name: containerdisk
+              disk:
+                bus: virtio
+            - name: cloudinitdisk
+              disk:
+                bus: virtio
+      volumes:
+        - name: containerdisk
+          containerDisk:
+            image: quay.io/fzdarsky/install/rhel-bootc-qcow2:v1
path: edge_manager/edge_mgr_provisioning.adoc
user: login: fzdarsky
body: ```suggestion
            image: <your_container_disk_repo_and_tag>
```
Left-over from testing, sorry. Updated the upstream docs.
Alternative to the <your_...> format would be to use `${OCI_DISK_IMAGE_REPO}:${OCI_IMAGE_TAG}` (as in the updated "building for openshift virt" section in my PR).
created_at: 2025-03-11T20:16:42Z
author_association: NONE
diff_hunk: @@ -0,0 +1,250 @@
+[#edge-provisioning]
+= Provisioning devices with the {rhem}
+
+Use the operating system image or disk image that you built for using with the {rhem} and depending on your target environment, provision a physical or virtual device.
+
+Learn more from the following sections:
+
+* <<edge-provisioning-physical,Provisioning physical devices>>
+* <<edge-provisioning-openshift-virt,Provisioning on {ocp-virt-short}>>
+* <<edge-provisioning-vmware-vsphere,Provisioning on VMware vSphere>>
+
+[#edge-provisioning-physical]
+== Provisioning physical devices
+
+When you build an ISO disk image from an operating system image by using the `bootc-image-builder` tool, the image is similar to the RHEL ISOs available for download, however, your operating system image content is embedded in the ISO disk image.
+
+[#edge-provisioning-physical-prereq]
+=== Prerequisites
+
+* You created an ISO disk image that is embedded with your `bootc` image.
+//TODO link See xref:../edge_manager/edge_mgr_build_images.adoc#edge-mgr-build)[Building a _bootc_ operating system image for use with the {rhem}].
+
+[#edge-provisioning-physical-proc]
+=== Provisioning physical devices
+
+You do not need to have access to the network during provisioning.
+You can install the ISO disk image to a bare metal system. 
+
+To provision a physical device from the ISO disk image, complete the following steps:
+
+. Copy your ISO disk image to a USB flash drive.
+
+. Install your physical device from the USB flash drive.
+
+[#edge-provisioning-openshift-virt]
+== Provisioning on {ocp-virt-short}
+
+You can provision a virtual machine on {ocp-virt-short} by using a QCoW2 disk image that is hosted on an OCI container registry.
+
+If your operating system image does not already contain the {rhem} agent enrollment configuration, you can inject the configuration through the `cloud-init` user data at provisioning.
+
+[#edge-provisioning-virt-prereq]
+=== Prerequisites
+
+* You installed the `flightctl` CLI and logged in to your {rhem} service instance.
+* You installed the `oc` CLI, used it to log in to your OpenShift cluster instance, and changed to the project in which you want to create your virtual machine.
+
+[#edge-provisioning-virt-proc]
+=== Provisioning on {ocp-virt-short}
+
+To create the `cloud-init` configuration, complete the following steps:
+
+. Request a new {rhem} agent enrollment configuration and store it in a file called `config.yaml`. Run the following command:
+
++
+[source,bash]
+----
+flightctl certificate request --signer=enrollment --expiration=365d --output=embedded > config.yaml
+----
+
+. Create cloud configuration user data file called `cloud-config.yaml` that places the agent configuration in the correct location on the first boot. Run the following command:
+
++
+[source,bash]
+----
+cat << END > cloud-config.yaml
+#cloud-config
+write_files:
+- path: /etc/flightctl/config_test.yaml
+  content: $(cat config.yaml | base64 -w0)
+  encoding: b64
+END
+----
+
+. Create a Kubernetes `Secret` that contains the cloud configuration user data file:
+
++
+[source,bash]
+----
+oc create secret generic enrollment-secret --from-file=userdata=cloud-config.yaml
+----
+
+. *Optional:* To create a virtual machine that has its primary disk populated from your QCoW2 container disk image and a `cloud-init` configuration drive that is populated from your enrollment secret, complete the following steps:
+
+.. Create a file that contains a the `VirtualMachine` resource manifest by running the following command:
+
++
+[source,bash]
+----
+cat << END > my-bootc-vm.yaml
+apiVersion: kubevirt.io/v1
+kind: VirtualMachine
+metadata:
+  name: my-bootc-vm
+spec:
+  runStrategy: RerunOnFailure
+  template:
+    spec:
+      domain:
+        cpu:
+          cores: 1
+        memory:
+          guest: 1024M
+        devices:
+          disks:
+            - name: containerdisk
+              disk:
+                bus: virtio
+            - name: cloudinitdisk
+              disk:
+                bus: virtio
+      volumes:
+        - name: containerdisk
+          containerDisk:
+            image: quay.io/fzdarsky/install/rhel-bootc-qcow2:v1
+        - name: cloudinitdisk
+          cloudInitConfigDrive:
+            secretRef:
+              name: enrollment-secret
+END
+----
+
+.. Apply the resource manifest to your cluster by running the following command:
+
++
+[source,bash]
+----
+oc apply -f my-bootc-vm.yaml
+----
+
+[#edge-provisioning-vmware-vsphere]
+== Provisioning on VMware vSphere
+
+You can provision a virtual machine on VMware vSphere from a VMDK disk image (see [Image Building for VMware vSphere](building-images.md#red-hat-openshift-virtualization)).
+
+If your operating system image does not already contain the agent enrollment configuration, you can inject this configuration through [`cloud-init`](https://cloudinit.readthedocs.io/en/latest/) user data at provisioning-time (late binding).
+
+[#edge-provisioning-vmware-vsphere-prereq]
+=== Prerequisites
+
+* You installed the `flightctl` CLI and logged in to your {rhem} service instance.
+* You installed the VMware `govc` CLI and logged in to your remote vSphere environment.
+* You built a VMDK disk image called `disk.vmdk` and the image is available on the machine running the commands.
+
+[#edge-provisioning-vmware-vsphere-proc]
+=== Provisioning on VMware vSphere
+
+To create the `cloud-init` configuration, complete the following steps:
+
+. Request a new {rhem} agent enrollment configuration and store it in a file called `config.yaml`. Run the following command:
+
++
+[source,bash]
+----
+flightctl certificate request --signer=enrollment --expiration=365d --output=embedded > config.yaml
+----
+
+. Create cloud configuration user data file called `cloud-config.yaml` that places the agent configuration in the correct location on the first boot. Run the following command:
+
++
+[source,bash]
+----
+cat << END > cloud-config.yaml
+#cloud-config
+write_files:
+- path: /etc/flightctl/config_test.yaml
+  content: $(cat config.yaml | base64 -w0)
+  encoding: b64
+END
+----
+
+. Upload the `disk.vmdk` file to the desired directory in vSphere by running the following command:
+
++
+[source,bash]
+----
+govc import.vmdk \
+  -dc="${DATACENTER}" -ds="${DATASTORE}" -pool="${DATACENTER_POOL}" \
+  disk.vmdk ${DESTINATION_FOLDER}
+----
+
+. Confirm that the file was uploaded by listing files within the `datastore` directory by running the following command:
+
++
+[source,bash]
+----
+govc datastore.ls \
+  -dc="${DATACENTER}" -ds="${DATASTORE}" \
+  ${DESTINATION_FOLDER}
+----
+
++
+If the uploading the file was successful, you can see the `disk.vmdk` and `disk-flat.vmdk` files.
+
+. Create the virtual machine by running the following command:
+
++
+[source,bash]
+----
+govc vm.create \
+  -dc="${DATACENTER}" -ds="${DATASTORE}" -pool="${DATACENTER_POOL}" \
+  -net="${NETWORK}" -disk.controller=pvscsi
+  -on=false \
+  -c=1 -m=1024 \
+  -g="rhel9_64Guest" \
+  -firmware="${FIRMWARE}" \
+  my-bootc-vm
+----
+
+. Attach the VMDK disk image to the virtual machine by running the following command:
path: edge_manager/edge_mgr_provisioning.adoc
user: login: fzdarsky
body: ```suggestion
. Attach the uploaded VMDK disk image to the virtual machine by running the following command:
```
created_at: 2025-03-11T20:27:58Z
author_association: NONE
diff_hunk: @@ -0,0 +1,250 @@
+[#edge-provisioning]
+= Provisioning devices with the {rhem}
+
+Use the operating system image or disk image that you built for using with the {rhem} and depending on your target environment, provision a physical or virtual device.
+
+Learn more from the following sections:
+
+* <<edge-provisioning-physical,Provisioning physical devices>>
+* <<edge-provisioning-openshift-virt,Provisioning on {ocp-virt-short}>>
+* <<edge-provisioning-vmware-vsphere,Provisioning on VMware vSphere>>
+
+[#edge-provisioning-physical]
+== Provisioning physical devices
+
+When you build an ISO disk image from an operating system image by using the `bootc-image-builder` tool, the image is similar to the RHEL ISOs available for download, however, your operating system image content is embedded in the ISO disk image.
+
+[#edge-provisioning-physical-prereq]
+=== Prerequisites
+
+* You created an ISO disk image that is embedded with your `bootc` image.
+//TODO link See xref:../edge_manager/edge_mgr_build_images.adoc#edge-mgr-build)[Building a _bootc_ operating system image for use with the {rhem}].
+
+[#edge-provisioning-physical-proc]
+=== Provisioning physical devices
+
+You do not need to have access to the network during provisioning.
+You can install the ISO disk image to a bare metal system. 
+
+To provision a physical device from the ISO disk image, complete the following steps:
+
+. Copy your ISO disk image to a USB flash drive.
+
+. Install your physical device from the USB flash drive.
+
+[#edge-provisioning-openshift-virt]
+== Provisioning on {ocp-virt-short}
+
+You can provision a virtual machine on {ocp-virt-short} by using a QCoW2 disk image that is hosted on an OCI container registry.
+
+If your operating system image does not already contain the {rhem} agent enrollment configuration, you can inject the configuration through the `cloud-init` user data at provisioning.
+
+[#edge-provisioning-virt-prereq]
+=== Prerequisites
+
+* You installed the `flightctl` CLI and logged in to your {rhem} service instance.
+* You installed the `oc` CLI, used it to log in to your OpenShift cluster instance, and changed to the project in which you want to create your virtual machine.
+
+[#edge-provisioning-virt-proc]
+=== Provisioning on {ocp-virt-short}
+
+To create the `cloud-init` configuration, complete the following steps:
+
+. Request a new {rhem} agent enrollment configuration and store it in a file called `config.yaml`. Run the following command:
+
++
+[source,bash]
+----
+flightctl certificate request --signer=enrollment --expiration=365d --output=embedded > config.yaml
+----
+
+. Create cloud configuration user data file called `cloud-config.yaml` that places the agent configuration in the correct location on the first boot. Run the following command:
+
++
+[source,bash]
+----
+cat << END > cloud-config.yaml
+#cloud-config
+write_files:
+- path: /etc/flightctl/config_test.yaml
+  content: $(cat config.yaml | base64 -w0)
+  encoding: b64
+END
+----
+
+. Create a Kubernetes `Secret` that contains the cloud configuration user data file:
+
++
+[source,bash]
+----
+oc create secret generic enrollment-secret --from-file=userdata=cloud-config.yaml
+----
+
+. *Optional:* To create a virtual machine that has its primary disk populated from your QCoW2 container disk image and a `cloud-init` configuration drive that is populated from your enrollment secret, complete the following steps:
+
+.. Create a file that contains a the `VirtualMachine` resource manifest by running the following command:
+
++
+[source,bash]
+----
+cat << END > my-bootc-vm.yaml
+apiVersion: kubevirt.io/v1
+kind: VirtualMachine
+metadata:
+  name: my-bootc-vm
+spec:
+  runStrategy: RerunOnFailure
+  template:
+    spec:
+      domain:
+        cpu:
+          cores: 1
+        memory:
+          guest: 1024M
+        devices:
+          disks:
+            - name: containerdisk
+              disk:
+                bus: virtio
+            - name: cloudinitdisk
+              disk:
+                bus: virtio
+      volumes:
+        - name: containerdisk
+          containerDisk:
+            image: quay.io/fzdarsky/install/rhel-bootc-qcow2:v1
+        - name: cloudinitdisk
+          cloudInitConfigDrive:
+            secretRef:
+              name: enrollment-secret
+END
+----
+
+.. Apply the resource manifest to your cluster by running the following command:
+
++
+[source,bash]
+----
+oc apply -f my-bootc-vm.yaml
+----
+
+[#edge-provisioning-vmware-vsphere]
+== Provisioning on VMware vSphere
+
+You can provision a virtual machine on VMware vSphere from a VMDK disk image (see [Image Building for VMware vSphere](building-images.md#red-hat-openshift-virtualization)).
+
+If your operating system image does not already contain the agent enrollment configuration, you can inject this configuration through [`cloud-init`](https://cloudinit.readthedocs.io/en/latest/) user data at provisioning-time (late binding).
+
+[#edge-provisioning-vmware-vsphere-prereq]
+=== Prerequisites
+
+* You installed the `flightctl` CLI and logged in to your {rhem} service instance.
+* You installed the VMware `govc` CLI and logged in to your remote vSphere environment.
+* You built a VMDK disk image called `disk.vmdk` and the image is available on the machine running the commands.
+
+[#edge-provisioning-vmware-vsphere-proc]
+=== Provisioning on VMware vSphere
+
+To create the `cloud-init` configuration, complete the following steps:
+
+. Request a new {rhem} agent enrollment configuration and store it in a file called `config.yaml`. Run the following command:
+
++
+[source,bash]
+----
+flightctl certificate request --signer=enrollment --expiration=365d --output=embedded > config.yaml
+----
+
+. Create cloud configuration user data file called `cloud-config.yaml` that places the agent configuration in the correct location on the first boot. Run the following command:
+
++
+[source,bash]
+----
+cat << END > cloud-config.yaml
+#cloud-config
+write_files:
+- path: /etc/flightctl/config_test.yaml
+  content: $(cat config.yaml | base64 -w0)
+  encoding: b64
+END
+----
+
+. Upload the `disk.vmdk` file to the desired directory in vSphere by running the following command:
+
++
+[source,bash]
+----
+govc import.vmdk \
+  -dc="${DATACENTER}" -ds="${DATASTORE}" -pool="${DATACENTER_POOL}" \
+  disk.vmdk ${DESTINATION_FOLDER}
+----
+
+. Confirm that the file was uploaded by listing files within the `datastore` directory by running the following command:
+
++
+[source,bash]
+----
+govc datastore.ls \
+  -dc="${DATACENTER}" -ds="${DATASTORE}" \
+  ${DESTINATION_FOLDER}
+----
+
++
+If the uploading the file was successful, you can see the `disk.vmdk` and `disk-flat.vmdk` files.
+
+. Create the virtual machine by running the following command:
+
++
+[source,bash]
+----
+govc vm.create \
+  -dc="${DATACENTER}" -ds="${DATASTORE}" -pool="${DATACENTER_POOL}" \
+  -net="${NETWORK}" -disk.controller=pvscsi
+  -on=false \
+  -c=1 -m=1024 \
+  -g="rhel9_64Guest" \
+  -firmware="${FIRMWARE}" \
+  my-bootc-vm
+----
+
+. Attach the VMDK disk image to the virtual machine by running the following command:
+
++
+[source,bash]
+----
+govc vm.disk.attach \
+  -dc="${DATACENTER}" -ds="${DATASTORE}" \
+  -link=false \
+  -vm="my-bootc-vm" \
+  -disk="${DESTINATION_FOLDER}/disk.vmdk"
+----
+
+. Attach the `cloud-init` user data to the virtual machine by running the following command:
+
++
+[source,bash]
+----
+govc vm.change \
+  -dc="${DATACENTER}" \
+  -vm="my-bootc-vm" \
+  -e guestinfo.userdata="$(gzip -c9 <cloud-config.yaml | { base64 -w0 2>/dev/null || base64; })" \
+  -e guestinfo.userdata.encoding="gzip+base64"
+----
path: edge_manager/edge_mgr_provisioning.adoc
user: login: fzdarsky
body: This is the part Ken Osborn is still trying to figure out.
created_at: 2025-03-11T20:28:51Z
author_association: NONE
diff_hunk: @@ -0,0 +1,250 @@
+[#edge-provisioning]
+= Provisioning devices with the {rhem}
+
+Use the operating system image or disk image that you built for using with the {rhem} and depending on your target environment, provision a physical or virtual device.
+
+Learn more from the following sections:
+
+* <<edge-provisioning-physical,Provisioning physical devices>>
+* <<edge-provisioning-openshift-virt,Provisioning on {ocp-virt-short}>>
+* <<edge-provisioning-vmware-vsphere,Provisioning on VMware vSphere>>
+
+[#edge-provisioning-physical]
+== Provisioning physical devices
+
+When you build an ISO disk image from an operating system image by using the `bootc-image-builder` tool, the image is similar to the RHEL ISOs available for download, however, your operating system image content is embedded in the ISO disk image.
+
+[#edge-provisioning-physical-prereq]
+=== Prerequisites
+
+* You created an ISO disk image that is embedded with your `bootc` image.
+//TODO link See xref:../edge_manager/edge_mgr_build_images.adoc#edge-mgr-build)[Building a _bootc_ operating system image for use with the {rhem}].
+
+[#edge-provisioning-physical-proc]
+=== Provisioning physical devices
+
+You do not need to have access to the network during provisioning.
+You can install the ISO disk image to a bare metal system. 
+
+To provision a physical device from the ISO disk image, complete the following steps:
+
+. Copy your ISO disk image to a USB flash drive.
+
+. Install your physical device from the USB flash drive.
+
+[#edge-provisioning-openshift-virt]
+== Provisioning on {ocp-virt-short}
+
+You can provision a virtual machine on {ocp-virt-short} by using a QCoW2 disk image that is hosted on an OCI container registry.
+
+If your operating system image does not already contain the {rhem} agent enrollment configuration, you can inject the configuration through the `cloud-init` user data at provisioning.
+
+[#edge-provisioning-virt-prereq]
+=== Prerequisites
+
+* You installed the `flightctl` CLI and logged in to your {rhem} service instance.
+* You installed the `oc` CLI, used it to log in to your OpenShift cluster instance, and changed to the project in which you want to create your virtual machine.
+
+[#edge-provisioning-virt-proc]
+=== Provisioning on {ocp-virt-short}
+
+To create the `cloud-init` configuration, complete the following steps:
+
+. Request a new {rhem} agent enrollment configuration and store it in a file called `config.yaml`. Run the following command:
+
++
+[source,bash]
+----
+flightctl certificate request --signer=enrollment --expiration=365d --output=embedded > config.yaml
+----
+
+. Create cloud configuration user data file called `cloud-config.yaml` that places the agent configuration in the correct location on the first boot. Run the following command:
+
++
+[source,bash]
+----
+cat << END > cloud-config.yaml
+#cloud-config
+write_files:
+- path: /etc/flightctl/config_test.yaml
+  content: $(cat config.yaml | base64 -w0)
+  encoding: b64
+END
+----
+
+. Create a Kubernetes `Secret` that contains the cloud configuration user data file:
+
++
+[source,bash]
+----
+oc create secret generic enrollment-secret --from-file=userdata=cloud-config.yaml
+----
+
+. *Optional:* To create a virtual machine that has its primary disk populated from your QCoW2 container disk image and a `cloud-init` configuration drive that is populated from your enrollment secret, complete the following steps:
+
+.. Create a file that contains a the `VirtualMachine` resource manifest by running the following command:
+
++
+[source,bash]
+----
+cat << END > my-bootc-vm.yaml
+apiVersion: kubevirt.io/v1
+kind: VirtualMachine
+metadata:
+  name: my-bootc-vm
+spec:
+  runStrategy: RerunOnFailure
+  template:
+    spec:
+      domain:
+        cpu:
+          cores: 1
+        memory:
+          guest: 1024M
+        devices:
+          disks:
+            - name: containerdisk
+              disk:
+                bus: virtio
+            - name: cloudinitdisk
+              disk:
+                bus: virtio
+      volumes:
+        - name: containerdisk
+          containerDisk:
+            image: quay.io/fzdarsky/install/rhel-bootc-qcow2:v1
+        - name: cloudinitdisk
+          cloudInitConfigDrive:
+            secretRef:
+              name: enrollment-secret
+END
+----
+
+.. Apply the resource manifest to your cluster by running the following command:
+
++
+[source,bash]
+----
+oc apply -f my-bootc-vm.yaml
+----
+
+[#edge-provisioning-vmware-vsphere]
+== Provisioning on VMware vSphere
+
+You can provision a virtual machine on VMware vSphere from a VMDK disk image (see [Image Building for VMware vSphere](building-images.md#red-hat-openshift-virtualization)).
+
+If your operating system image does not already contain the agent enrollment configuration, you can inject this configuration through [`cloud-init`](https://cloudinit.readthedocs.io/en/latest/) user data at provisioning-time (late binding).
+
+[#edge-provisioning-vmware-vsphere-prereq]
+=== Prerequisites
+
+* You installed the `flightctl` CLI and logged in to your {rhem} service instance.
+* You installed the VMware `govc` CLI and logged in to your remote vSphere environment.
+* You built a VMDK disk image called `disk.vmdk` and the image is available on the machine running the commands.
+
+[#edge-provisioning-vmware-vsphere-proc]
+=== Provisioning on VMware vSphere
+
+To create the `cloud-init` configuration, complete the following steps:
+
+. Request a new {rhem} agent enrollment configuration and store it in a file called `config.yaml`. Run the following command:
+
++
+[source,bash]
+----
+flightctl certificate request --signer=enrollment --expiration=365d --output=embedded > config.yaml
+----
+
+. Create cloud configuration user data file called `cloud-config.yaml` that places the agent configuration in the correct location on the first boot. Run the following command:
+
++
+[source,bash]
+----
+cat << END > cloud-config.yaml
+#cloud-config
+write_files:
+- path: /etc/flightctl/config_test.yaml
+  content: $(cat config.yaml | base64 -w0)
+  encoding: b64
+END
+----
+
+. Upload the `disk.vmdk` file to the desired directory in vSphere by running the following command:
+
++
+[source,bash]
+----
+govc import.vmdk \
+  -dc="${DATACENTER}" -ds="${DATASTORE}" -pool="${DATACENTER_POOL}" \
+  disk.vmdk ${DESTINATION_FOLDER}
+----
+
+. Confirm that the file was uploaded by listing files within the `datastore` directory by running the following command:
+
++
+[source,bash]
+----
+govc datastore.ls \
+  -dc="${DATACENTER}" -ds="${DATASTORE}" \
+  ${DESTINATION_FOLDER}
+----
+
++
+If the uploading the file was successful, you can see the `disk.vmdk` and `disk-flat.vmdk` files.
+
+. Create the virtual machine by running the following command:
+
++
+[source,bash]
+----
+govc vm.create \
+  -dc="${DATACENTER}" -ds="${DATASTORE}" -pool="${DATACENTER_POOL}" \
+  -net="${NETWORK}" -disk.controller=pvscsi
+  -on=false \
+  -c=1 -m=1024 \
+  -g="rhel9_64Guest" \
+  -firmware="${FIRMWARE}" \
+  my-bootc-vm
+----
+
+. Attach the VMDK disk image to the virtual machine by running the following command:
+
++
+[source,bash]
+----
+govc vm.disk.attach \
+  -dc="${DATACENTER}" -ds="${DATASTORE}" \
+  -link=false \
+  -vm="my-bootc-vm" \
+  -disk="${DESTINATION_FOLDER}/disk.vmdk"
+----
+
+. Attach the `cloud-init` user data to the virtual machine by running the following command:
+
++
+[source,bash]
+----
+govc vm.change \
+  -dc="${DATACENTER}" \
+  -vm="my-bootc-vm" \
+  -e guestinfo.userdata="$(gzip -c9 <cloud-config.yaml | { base64 -w0 2>/dev/null || base64; })" \
+  -e guestinfo.userdata.encoding="gzip+base64"
+----
+
+. Power on the virtual machine by running the following command:
+
++
+[source,bash]
+----
+govc vm.power -dc="${DATACENTER}" -on=true my-bootc-vm
+----
+
+[#additional-resources-provisioning]
+== Additional resources
+
+* For more information about installing the ISO through the network, see link:https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/using_image_mode_for_rhel_to_build_deploy_and_manage_operating_systems/deploying-the-rhel-bootc-images_using-image-mode-for-rhel-to-build-deploy-and-manage-operating-systems#deploying-an-iso-bootc-container-over-pxe-boot_deploying-the-rhel-bootc-images[Deploying an ISO bootc image over PXE boot].
+* For more information about how to inject the configuration through the `cloud-init` user data, see link:https://cloudinit.readthedocs.io/en/latest/[Cloud-init documentation].
+
+// Can't include this, it's a GH repo: * See You installed the VMware `govc` CLI and logged in to your remote vSphere environment (see the [installation guide](https://github.com/vmware/govmomi/blob/main/govc/README.md)).
path: edge_manager/edge_mgr_provisioning.adoc
user: login: fzdarsky
body: Hm, darn. IBM's docs team doesn't seem to have this restriction (see, for example, https://cloud.ibm.com/docs/vmwaresolutions?topic=vmwaresolutions-openshift-runbook-runbook-prereq-intro#openshift-runbook-runbook-prereq-govc)
created_at: 2025-03-11T20:31:52Z
author_association: NONE
diff_hunk: @@ -0,0 +1,250 @@
+[#edge-provisioning]
+= Provisioning devices with the {rhem}
+
+Use the operating system image or disk image that you built for using with the {rhem} and depending on your target environment, provision a physical or virtual device.
+
+Learn more from the following sections:
+
+* <<edge-provisioning-physical,Provisioning physical devices>>
+* <<edge-provisioning-openshift-virt,Provisioning on {ocp-virt-short}>>
+* <<edge-provisioning-vmware-vsphere,Provisioning on VMware vSphere>>
+
+[#edge-provisioning-physical]
+== Provisioning physical devices
+
+When you build an ISO disk image from an operating system image by using the `bootc-image-builder` tool, the image is similar to the RHEL ISOs available for download, however, your operating system image content is embedded in the ISO disk image.
+
+[#edge-provisioning-physical-prereq]
+=== Prerequisites
+
+* You created an ISO disk image that is embedded with your `bootc` image.
+//TODO link See xref:../edge_manager/edge_mgr_build_images.adoc#edge-mgr-build)[Building a _bootc_ operating system image for use with the {rhem}].
+
+[#edge-provisioning-physical-proc]
+=== Provisioning physical devices
+
+You do not need to have access to the network during provisioning.
+You can install the ISO disk image to a bare metal system. 
+
+To provision a physical device from the ISO disk image, complete the following steps:
+
+. Copy your ISO disk image to a USB flash drive.
+
+. Install your physical device from the USB flash drive.
+
+[#edge-provisioning-openshift-virt]
+== Provisioning on {ocp-virt-short}
+
+You can provision a virtual machine on {ocp-virt-short} by using a QCoW2 disk image that is hosted on an OCI container registry.
+
+If your operating system image does not already contain the {rhem} agent enrollment configuration, you can inject the configuration through the `cloud-init` user data at provisioning.
+
+[#edge-provisioning-virt-prereq]
+=== Prerequisites
+
+* You installed the `flightctl` CLI and logged in to your {rhem} service instance.
+* You installed the `oc` CLI, used it to log in to your OpenShift cluster instance, and changed to the project in which you want to create your virtual machine.
+
+[#edge-provisioning-virt-proc]
+=== Provisioning on {ocp-virt-short}
+
+To create the `cloud-init` configuration, complete the following steps:
+
+. Request a new {rhem} agent enrollment configuration and store it in a file called `config.yaml`. Run the following command:
+
++
+[source,bash]
+----
+flightctl certificate request --signer=enrollment --expiration=365d --output=embedded > config.yaml
+----
+
+. Create cloud configuration user data file called `cloud-config.yaml` that places the agent configuration in the correct location on the first boot. Run the following command:
+
++
+[source,bash]
+----
+cat << END > cloud-config.yaml
+#cloud-config
+write_files:
+- path: /etc/flightctl/config_test.yaml
+  content: $(cat config.yaml | base64 -w0)
+  encoding: b64
+END
+----
+
+. Create a Kubernetes `Secret` that contains the cloud configuration user data file:
+
++
+[source,bash]
+----
+oc create secret generic enrollment-secret --from-file=userdata=cloud-config.yaml
+----
+
+. *Optional:* To create a virtual machine that has its primary disk populated from your QCoW2 container disk image and a `cloud-init` configuration drive that is populated from your enrollment secret, complete the following steps:
+
+.. Create a file that contains a the `VirtualMachine` resource manifest by running the following command:
+
++
+[source,bash]
+----
+cat << END > my-bootc-vm.yaml
+apiVersion: kubevirt.io/v1
+kind: VirtualMachine
+metadata:
+  name: my-bootc-vm
+spec:
+  runStrategy: RerunOnFailure
+  template:
+    spec:
+      domain:
+        cpu:
+          cores: 1
+        memory:
+          guest: 1024M
+        devices:
+          disks:
+            - name: containerdisk
+              disk:
+                bus: virtio
+            - name: cloudinitdisk
+              disk:
+                bus: virtio
+      volumes:
+        - name: containerdisk
+          containerDisk:
+            image: quay.io/fzdarsky/install/rhel-bootc-qcow2:v1
+        - name: cloudinitdisk
+          cloudInitConfigDrive:
+            secretRef:
+              name: enrollment-secret
+END
+----
+
+.. Apply the resource manifest to your cluster by running the following command:
+
++
+[source,bash]
+----
+oc apply -f my-bootc-vm.yaml
+----
+
+[#edge-provisioning-vmware-vsphere]
+== Provisioning on VMware vSphere
+
+You can provision a virtual machine on VMware vSphere from a VMDK disk image (see [Image Building for VMware vSphere](building-images.md#red-hat-openshift-virtualization)).
+
+If your operating system image does not already contain the agent enrollment configuration, you can inject this configuration through [`cloud-init`](https://cloudinit.readthedocs.io/en/latest/) user data at provisioning-time (late binding).
+
+[#edge-provisioning-vmware-vsphere-prereq]
+=== Prerequisites
+
+* You installed the `flightctl` CLI and logged in to your {rhem} service instance.
+* You installed the VMware `govc` CLI and logged in to your remote vSphere environment.
+* You built a VMDK disk image called `disk.vmdk` and the image is available on the machine running the commands.
+
+[#edge-provisioning-vmware-vsphere-proc]
+=== Provisioning on VMware vSphere
+
+To create the `cloud-init` configuration, complete the following steps:
+
+. Request a new {rhem} agent enrollment configuration and store it in a file called `config.yaml`. Run the following command:
+
++
+[source,bash]
+----
+flightctl certificate request --signer=enrollment --expiration=365d --output=embedded > config.yaml
+----
+
+. Create cloud configuration user data file called `cloud-config.yaml` that places the agent configuration in the correct location on the first boot. Run the following command:
+
++
+[source,bash]
+----
+cat << END > cloud-config.yaml
+#cloud-config
+write_files:
+- path: /etc/flightctl/config_test.yaml
+  content: $(cat config.yaml | base64 -w0)
+  encoding: b64
+END
+----
+
+. Upload the `disk.vmdk` file to the desired directory in vSphere by running the following command:
+
++
+[source,bash]
+----
+govc import.vmdk \
+  -dc="${DATACENTER}" -ds="${DATASTORE}" -pool="${DATACENTER_POOL}" \
+  disk.vmdk ${DESTINATION_FOLDER}
+----
+
+. Confirm that the file was uploaded by listing files within the `datastore` directory by running the following command:
+
++
+[source,bash]
+----
+govc datastore.ls \
+  -dc="${DATACENTER}" -ds="${DATASTORE}" \
+  ${DESTINATION_FOLDER}
+----
+
++
+If the uploading the file was successful, you can see the `disk.vmdk` and `disk-flat.vmdk` files.
+
+. Create the virtual machine by running the following command:
+
++
+[source,bash]
+----
+govc vm.create \
+  -dc="${DATACENTER}" -ds="${DATASTORE}" -pool="${DATACENTER_POOL}" \
+  -net="${NETWORK}" -disk.controller=pvscsi
+  -on=false \
+  -c=1 -m=1024 \
+  -g="rhel9_64Guest" \
+  -firmware="${FIRMWARE}" \
+  my-bootc-vm
+----
+
+. Attach the VMDK disk image to the virtual machine by running the following command:
+
++
+[source,bash]
+----
+govc vm.disk.attach \
+  -dc="${DATACENTER}" -ds="${DATASTORE}" \
+  -link=false \
+  -vm="my-bootc-vm" \
+  -disk="${DESTINATION_FOLDER}/disk.vmdk"
+----
+
+. Attach the `cloud-init` user data to the virtual machine by running the following command:
+
++
+[source,bash]
+----
+govc vm.change \
+  -dc="${DATACENTER}" \
+  -vm="my-bootc-vm" \
+  -e guestinfo.userdata="$(gzip -c9 <cloud-config.yaml | { base64 -w0 2>/dev/null || base64; })" \
+  -e guestinfo.userdata.encoding="gzip+base64"
+----
+
+. Power on the virtual machine by running the following command:
+
++
+[source,bash]
+----
+govc vm.power -dc="${DATACENTER}" -on=true my-bootc-vm
+----
+
+[#additional-resources-provisioning]
+== Additional resources
+
+* For more information about installing the ISO through the network, see link:https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/using_image_mode_for_rhel_to_build_deploy_and_manage_operating_systems/deploying-the-rhel-bootc-images_using-image-mode-for-rhel-to-build-deploy-and-manage-operating-systems#deploying-an-iso-bootc-container-over-pxe-boot_deploying-the-rhel-bootc-images[Deploying an ISO bootc image over PXE boot].
+* For more information about how to inject the configuration through the `cloud-init` user data, see link:https://cloudinit.readthedocs.io/en/latest/[Cloud-init documentation].
+
+// Can't include this, it's a GH repo: * See You installed the VMware `govc` CLI and logged in to your remote vSphere environment (see the [installation guide](https://github.com/vmware/govmomi/blob/main/govc/README.md)).
path: edge_manager/edge_mgr_provisioning.adoc
user: login: amolnar-gh
body: Interesting! I can't find anything about it in the IBM style guide but the RH supplementary style guide does mention it [here](https://redhat-documentation.github.io/supplementary-style-guide/#external-links).

@swopebe I know we talked about this but could it be an exception because the link is used in an IBM doc?
created_at: 2025-03-12T09:07:15Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,23 @@
+[#edge-provisioning-physical]
+= Provisioning physical devices
+
+When you build an ISO disk image from an operating system image by using the `bootc-image-builder` tool, the image is similar to the RHEL ISOs available for download/However, your operating system image content is embedded in the ISO disk image.
path: edge_manager/edge_mgr_provisioning_physical.adoc
user: login: fzdarsky
body: ```suggestion
When you build an ISO disk image from an operating system image by using the `bootc-image-builder` tool, the image is similar to the RHEL ISOs available for download. However, your operating system image content is embedded in the ISO disk image.
```
created_at: 2025-03-12T19:29:04Z
author_association: NONE
diff_hunk: @@ -0,0 +1,23 @@
+[#edge-provisioning-physical]
+= Provisioning physical devices
+
+When you build an ISO disk image from an operating system image by using the `bootc-image-builder` tool, the image is similar to the RHEL ISOs available for download/However, your operating system image content is embedded in the ISO disk image.
+
+You can install the ISO disk image to a bare metal system without having access to the network.
+
+For information about installing the ISO through the network, see link:https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/using_image_mode_for_rhel_to_build_deploy_and_manage_operating_systems/deploying-the-rhel-bootc-images_using-image-mode-for-rhel-to-build-deploy-and-manage-operating-systems#deploying-an-iso-bootc-container-over-pxe-boot_deploying-the-rhel-bootc-images[Deploying an ISO _bootc_ image over PXE boot].
+
+[#edge-provisioning-physical-prereq]
+== Prerequisites
+
+* You created an ISO disk image that with your `bootc` image embedded.
path: edge_manager/edge_mgr_provisioning_physical.adoc
user: login: fzdarsky
body: ```suggestion
* You created an ISO disk image with your `bootc` image embedded.
```
created_at: 2025-03-12T19:29:38Z
author_association: NONE
diff_hunk: @@ -0,0 +1,103 @@
+[#edge-provisioning-openshift-virt]
+= Provisioning devices on {ocp-virt-short}
+
+You can provision a virtual machine on {ocp-virt-short} by using a QCoW2 disk image that is hosted on an OCI container registry.
+
+If your operating system image does not already contain the {rhem} agent enrollment configuration, you can inject the configuration through the `cloud-init` user data at provisioning.
+
+For more information, see the _Additional resources_ section.
+
+[#edge-provisioning-virt-prereq]
+== Prerequisites
+
+* You installed the `flightctl` CLI and logged in to your {rhem} service instance.
+* You installed the `oc` CLI, used it to log in to your OpenShift cluster instance, and changed to the project in which you want to create your virtual machine.
+
+[#edge-provisioning-virt-proc]
+== Provisioning on {ocp-virt-short}
+
+To create the `cloud-init` configuration, complete the following steps:
+
+. Request a new {rhem} agent enrollment configuration and store it in a file called `config.yaml`. Run the following command:
+
++
+[source,bash]
+----
+flightctl certificate request --signer=enrollment --expiration=365d --output=embedded > config.yaml
+----
+
+. Create a cloud configuration user data file called `cloud-config.yaml` that places the agent configuration in the correct location on the first boot. Run the following command:
+
++
+[source,bash]
+----
+cat << END > cloud-config.yaml
+#cloud-config
+write_files:
+- path: /etc/flightctl/config.yaml
+  content: $(cat config.yaml | base64 -w0)
+  encoding: b64
+END
+----
+
+. Create a Kubernetes `Secret` that contains the cloud configuration user data file:
+
++
+[source,bash]
+----
+oc create secret generic enrollment-secret --from-file=userdata=cloud-config.yaml
+----
+
+. Create a virtual machine that has its primary disk populated from your QCoW2 container disk image and a `cloud-init` configuration drive that is populated from your enrollment secret.
+
+.. Create a file that contains a the `VirtualMachine` resource manifest by running the following command:
path: edge_manager/edge_mgr_provisioning_virt.adoc
user: login: fzdarsky
body: ```suggestion
Create a virtual machine that has its primary disk populated from your QCoW2 container disk image and a `cloud-init` configuration drive that is populated from your enrollment secret.

. Create a file that contains a the `VirtualMachine` resource manifest by running the following command:
```
At this point, the first procedure (creating the Secret) is over and we're starting a second procedure to create the VM. I'd therefore remove the bullet from the first line and - correspondingly - reduce the level on the following steps.

If having two procedures isn't acceptable, we may want to join line 51 into line 19. WDYT?
created_at: 2025-03-12T19:35:54Z
author_association: NONE
diff_hunk: @@ -0,0 +1,103 @@
+[#edge-provisioning-openshift-virt]
+= Provisioning devices on {ocp-virt-short}
+
+You can provision a virtual machine on {ocp-virt-short} by using a QCoW2 disk image that is hosted on an OCI container registry.
path: edge_manager/edge_mgr_provisioning_virt.adoc
user: login: fzdarsky
body: ```suggestion
You can provision a virtual machine on {ocp-virt-short} by using a QCoW2 container disk image that is hosted on an OCI container registry.
```
^ to maybe hint at that it's not the same kind of image as the "VMDK disk image" in the next section.

Do we need to make more explicit that it's san OCI container image, not an OCI artifact? Maybe once we've added the image building for OpenShift Virt section, we can say "as described in [...]".
created_at: 2025-03-12T19:38:45Z
author_association: NONE
diff_hunk: @@ -0,0 +1,130 @@
+[#edge-provisioning-vmware-vsphere]
+= Provisioning devices on VMware vSphere
+
+You can provision a virtual machine on VMware vSphere from a VMDK disk image.
+
+If your operating system image does not already contain the {rhem} agent enrollment configuration, you can inject the configuration through the `cloud-init` user data at provisioning.
+
+[#edge-provisioning-vmware-vsphere-prereq]
+== Prerequisites
+
+* You installed the `flightctl` CLI and logged in to your {rhem} service instance.
+* You installed the VMware `govc` CLI and logged in to your remote vSphere environment.
+* You built a VMDK disk image called `disk.vmdk` and the image is available on the machine running the commands.
+
+[#edge-provisioning-vmware-vsphere-proc]
+== Provisioning on VMware vSphere
+
+To create the `cloud-init` configuration, complete the following steps:
+
+. Request a new {rhem} agent enrollment configuration and store it in a file called `config.yaml`. Run the following command:
+
++
+[source,bash]
+----
+flightctl certificate request --signer=enrollment --expiration=365d --output=embedded > config.yaml
+----
+
+. Create a cloud configuration user data file called `cloud-config.yaml` that places the agent configuration in the correct location on the first boot. Run the following command:
+
++
+[source,bash]
+----
+cat << END > cloud-config.yaml
+#cloud-config
+write_files:
+- path: /etc/flightctl/config.yaml
+  content: $(cat config.yaml | base64 -w0)
+  encoding: b64
+END
path: edge_manager/edge_mgr_provisioning_vmware_vsphere.adoc
user: login: fzdarsky
body: Could you please replace `<< END` with `<<EOF` (no space) on line 33 and `END` with `EOF` on line 39? Either should work, but Ken reported only EOF worked for him.
created_at: 2025-03-12T19:45:01Z
author_association: NONE
diff_hunk: @@ -0,0 +1,130 @@
+[#edge-provisioning-vmware-vsphere]
+= Provisioning devices on VMware vSphere
+
+You can provision a virtual machine on VMware vSphere from a VMDK disk image.
+
+If your operating system image does not already contain the {rhem} agent enrollment configuration, you can inject the configuration through the `cloud-init` user data at provisioning.
+
+[#edge-provisioning-vmware-vsphere-prereq]
+== Prerequisites
+
+* You installed the `flightctl` CLI and logged in to your {rhem} service instance.
+* You installed the VMware `govc` CLI and logged in to your remote vSphere environment.
+* You built a VMDK disk image called `disk.vmdk` and the image is available on the machine running the commands.
+
+[#edge-provisioning-vmware-vsphere-proc]
+== Provisioning on VMware vSphere
+
+To create the `cloud-init` configuration, complete the following steps:
+
+. Request a new {rhem} agent enrollment configuration and store it in a file called `config.yaml`. Run the following command:
+
++
+[source,bash]
+----
+flightctl certificate request --signer=enrollment --expiration=365d --output=embedded > config.yaml
+----
+
+. Create a cloud configuration user data file called `cloud-config.yaml` that places the agent configuration in the correct location on the first boot. Run the following command:
+
++
+[source,bash]
+----
+cat << END > cloud-config.yaml
+#cloud-config
+write_files:
+- path: /etc/flightctl/config.yaml
+  content: $(cat config.yaml | base64 -w0)
+  encoding: b64
+END
+----
+
+. Upload the `disk.vmdk` file to the desired directory in vSphere. Run the following command:
+
++
+[source,bash]
+----
+govc import.vmdk \
+  -dc="${DATACENTER}" -ds="${DATASTORE}" -pool="${DATACENTER_POOL}" \
+  disk.vmdk ${DESTINATION_FOLDER}
+----
+
+. Confirm that the file was uploaded by listing files within the `datastore` directory by running the following command:
path: edge_manager/edge_mgr_provisioning_vmware_vsphere.adoc
user: login: fzdarsky
body: ```suggestion
. Confirm that the file was uploaded by listing files inside the desired folder within the desired datastore by running the following command:
```
There isn't a directory called "datastore", but the user specified a datastore, then a directory (sorry: folder) within that datastore.
created_at: 2025-03-12T19:53:18Z
author_association: NONE
diff_hunk: @@ -0,0 +1,130 @@
+[#edge-provisioning-vmware-vsphere]
+= Provisioning devices on VMware vSphere
+
+You can provision a virtual machine on VMware vSphere from a VMDK disk image.
+
+If your operating system image does not already contain the {rhem} agent enrollment configuration, you can inject the configuration through the `cloud-init` user data at provisioning.
+
+[#edge-provisioning-vmware-vsphere-prereq]
+== Prerequisites
+
+* You installed the `flightctl` CLI and logged in to your {rhem} service instance.
+* You installed the VMware `govc` CLI and logged in to your remote vSphere environment.
+* You built a VMDK disk image called `disk.vmdk` and the image is available on the machine running the commands.
+
+[#edge-provisioning-vmware-vsphere-proc]
+== Provisioning on VMware vSphere
+
+To create the `cloud-init` configuration, complete the following steps:
+
+. Request a new {rhem} agent enrollment configuration and store it in a file called `config.yaml`. Run the following command:
+
++
+[source,bash]
+----
+flightctl certificate request --signer=enrollment --expiration=365d --output=embedded > config.yaml
+----
+
+. Create a cloud configuration user data file called `cloud-config.yaml` that places the agent configuration in the correct location on the first boot. Run the following command:
+
++
+[source,bash]
+----
+cat << END > cloud-config.yaml
+#cloud-config
+write_files:
+- path: /etc/flightctl/config.yaml
+  content: $(cat config.yaml | base64 -w0)
+  encoding: b64
+END
+----
+
+. Upload the `disk.vmdk` file to the desired directory in vSphere. Run the following command:
+
++
+[source,bash]
+----
+govc import.vmdk \
+  -dc="${DATACENTER}" -ds="${DATASTORE}" -pool="${DATACENTER_POOL}" \
+  disk.vmdk ${DESTINATION_FOLDER}
+----
+
+. Confirm that the file was uploaded by listing files within the `datastore` directory by running the following command:
+
++
+[source,bash]
+----
+govc datastore.ls \
+  -dc="${DATACENTER}" -ds="${DATASTORE}" \
+  ${DESTINATION_FOLDER}
+----
+
++
+If the uploading the file was successful, you see the `disk.vmdk` and `disk-flat.vmdk` files.
path: edge_manager/edge_mgr_provisioning_vmware_vsphere.adoc
user: login: fzdarsky
body: ```suggestion
If uploading the file was successful, you see the `disk.vmdk` and `disk-flat.vmdk` files.
```
created_at: 2025-03-12T19:53:49Z
author_association: NONE
diff_hunk: @@ -0,0 +1,130 @@
+[#edge-provisioning-vmware-vsphere]
+= Provisioning devices on VMware vSphere
+
+You can provision a virtual machine on VMware vSphere from a VMDK disk image.
+
+If your operating system image does not already contain the {rhem} agent enrollment configuration, you can inject the configuration through the `cloud-init` user data at provisioning.
+
+[#edge-provisioning-vmware-vsphere-prereq]
+== Prerequisites
+
+* You installed the `flightctl` CLI and logged in to your {rhem} service instance.
+* You installed the VMware `govc` CLI and logged in to your remote vSphere environment.
+* You built a VMDK disk image called `disk.vmdk` and the image is available on the machine running the commands.
+
+[#edge-provisioning-vmware-vsphere-proc]
+== Provisioning on VMware vSphere
+
+To create the `cloud-init` configuration, complete the following steps:
+
+. Request a new {rhem} agent enrollment configuration and store it in a file called `config.yaml`. Run the following command:
+
++
+[source,bash]
+----
+flightctl certificate request --signer=enrollment --expiration=365d --output=embedded > config.yaml
+----
+
+. Create a cloud configuration user data file called `cloud-config.yaml` that places the agent configuration in the correct location on the first boot. Run the following command:
+
++
+[source,bash]
+----
+cat << END > cloud-config.yaml
+#cloud-config
+write_files:
+- path: /etc/flightctl/config.yaml
+  content: $(cat config.yaml | base64 -w0)
+  encoding: b64
+END
+----
+
+. Upload the `disk.vmdk` file to the desired directory in vSphere. Run the following command:
path: edge_manager/edge_mgr_provisioning_vmware_vsphere.adoc
user: login: fzdarsky
body: ```suggestion
. Upload the `disk.vmdk` file to the desired folder in vSphere. Run the following command:
```
Later we're using the term "folder" instead of "directory". As we're using the variablre `${DESTINATION_FOLDER}`,  I'd suggest replacing "directory" here and below.

created_at: 2025-03-12T19:58:31Z
author_association: NONE
diff_hunk: @@ -0,0 +1,103 @@
+[#edge-provisioning-openshift-virt]
+= Provisioning devices on {ocp-virt-short}
+
+You can provision a virtual machine on {ocp-virt-short} by using a QCoW2 disk image that is hosted on an OCI container registry.
+
+If your operating system image does not already contain the {rhem} agent enrollment configuration, you can inject the configuration through the `cloud-init` user data at provisioning.
+
+For more information, see the _Additional resources_ section.
+
+[#edge-provisioning-virt-prereq]
+== Prerequisites
+
+* You installed the `flightctl` CLI and logged in to your {rhem} service instance.
+* You installed the `oc` CLI, used it to log in to your OpenShift cluster instance, and changed to the project in which you want to create your virtual machine.
+
+[#edge-provisioning-virt-proc]
+== Provisioning on {ocp-virt-short}
+
+To create the `cloud-init` configuration, complete the following steps:
+
+. Request a new {rhem} agent enrollment configuration and store it in a file called `config.yaml`. Run the following command:
+
++
+[source,bash]
+----
+flightctl certificate request --signer=enrollment --expiration=365d --output=embedded > config.yaml
+----
+
+. Create a cloud configuration user data file called `cloud-config.yaml` that places the agent configuration in the correct location on the first boot. Run the following command:
+
++
+[source,bash]
+----
+cat << END > cloud-config.yaml
+#cloud-config
+write_files:
+- path: /etc/flightctl/config.yaml
+  content: $(cat config.yaml | base64 -w0)
+  encoding: b64
+END
+----
+
+. Create a Kubernetes `Secret` that contains the cloud configuration user data file:
+
++
+[source,bash]
+----
+oc create secret generic enrollment-secret --from-file=userdata=cloud-config.yaml
+----
+
+. Create a virtual machine that has its primary disk populated from your QCoW2 container disk image and a `cloud-init` configuration drive that is populated from your enrollment secret.
+
+.. Create a file that contains a the `VirtualMachine` resource manifest by running the following command:
path: edge_manager/edge_mgr_provisioning_virt.adoc
user: login: amolnar-gh
body: We can have two procedures, no problem. I misunderstood the structure here. I'm creating a section for "Creating the _cloud-init_ configuration" and "Creating the virtual machine"
created_at: 2025-03-13T09:59:35Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,130 @@
+[#edge-provisioning-vmware-vsphere]
+= Provisioning devices on VMware vSphere
+
+You can provision a virtual machine on VMware vSphere from a VMDK disk image.
+
+If your operating system image does not already contain the {rhem} agent enrollment configuration, you can inject the configuration through the `cloud-init` user data at provisioning.
+
+[#edge-provisioning-vmware-vsphere-prereq]
+== Prerequisites
+
+* You installed the `flightctl` CLI and logged in to your {rhem} service instance.
+* You installed the VMware `govc` CLI and logged in to your remote vSphere environment.
+* You built a VMDK disk image called `disk.vmdk` and the image is available on the machine running the commands.
+
+[#edge-provisioning-vmware-vsphere-proc]
+== Provisioning on VMware vSphere
+
+To create the `cloud-init` configuration, complete the following steps:
+
+. Request a new {rhem} agent enrollment configuration and store it in a file called `config.yaml`. Run the following command:
+
++
+[source,bash]
+----
+flightctl certificate request --signer=enrollment --expiration=365d --output=embedded > config.yaml
+----
+
+. Create a cloud configuration user data file called `cloud-config.yaml` that places the agent configuration in the correct location on the first boot. Run the following command:
+
++
+[source,bash]
+----
+cat << END > cloud-config.yaml
+#cloud-config
+write_files:
+- path: /etc/flightctl/config.yaml
+  content: $(cat config.yaml | base64 -w0)
+  encoding: b64
+END
path: edge_manager/edge_mgr_provisioning_vmware_vsphere.adoc
user: login: amolnar-gh
body: We have instances of `END` in the Virtualization section too. Should I update them too?
created_at: 2025-03-13T10:04:20Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,130 @@
+[#edge-provisioning-vmware-vsphere]
+= Provisioning devices on VMware vSphere
+
+You can provision a virtual machine on VMware vSphere from a VMDK disk image.
+
+If your operating system image does not already contain the {rhem} agent enrollment configuration, you can inject the configuration through the `cloud-init` user data at provisioning.
+
+[#edge-provisioning-vmware-vsphere-prereq]
+== Prerequisites
+
+* You installed the `flightctl` CLI and logged in to your {rhem} service instance.
+* You installed the VMware `govc` CLI and logged in to your remote vSphere environment.
+* You built a VMDK disk image called `disk.vmdk` and the image is available on the machine running the commands.
+
+[#edge-provisioning-vmware-vsphere-proc]
+== Provisioning on VMware vSphere
+
+To create the `cloud-init` configuration, complete the following steps:
+
+. Request a new {rhem} agent enrollment configuration and store it in a file called `config.yaml`. Run the following command:
+
++
+[source,bash]
+----
+flightctl certificate request --signer=enrollment --expiration=365d --output=embedded > config.yaml
+----
+
+. Create a cloud configuration user data file called `cloud-config.yaml` that places the agent configuration in the correct location on the first boot. Run the following command:
+
++
+[source,bash]
+----
+cat << END > cloud-config.yaml
+#cloud-config
+write_files:
+- path: /etc/flightctl/config.yaml
+  content: $(cat config.yaml | base64 -w0)
+  encoding: b64
+END
+----
+
+. Upload the `disk.vmdk` file to the desired directory in vSphere. Run the following command:
path: edge_manager/edge_mgr_provisioning_vmware_vsphere.adoc
user: login: amolnar-gh
body: Replaced all instances that refers to the `DESTINATION_FOLDER`
created_at: 2025-03-13T10:08:21Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,130 @@
+[#edge-provisioning-vmware-vsphere]
+= Provisioning devices on VMware vSphere
+
+You can provision a virtual machine on VMware vSphere from a VMDK disk image.
+
+If your operating system image does not already contain the {rhem} agent enrollment configuration, you can inject the configuration through the `cloud-init` user data at provisioning.
+
+[#edge-provisioning-vmware-vsphere-prereq]
+== Prerequisites
+
+* You installed the `flightctl` CLI and logged in to your {rhem} service instance.
+* You installed the VMware `govc` CLI and logged in to your remote vSphere environment.
+* You built a VMDK disk image called `disk.vmdk` and the image is available on the machine running the commands.
+
+[#edge-provisioning-vmware-vsphere-proc]
+== Provisioning on VMware vSphere
+
+To create the `cloud-init` configuration, complete the following steps:
+
+. Request a new {rhem} agent enrollment configuration and store it in a file called `config.yaml`. Run the following command:
+
++
+[source,bash]
+----
+flightctl certificate request --signer=enrollment --expiration=365d --output=embedded > config.yaml
+----
+
+. Create a cloud configuration user data file called `cloud-config.yaml` that places the agent configuration in the correct location on the first boot. Run the following command:
+
++
+[source,bash]
+----
+cat << END > cloud-config.yaml
+#cloud-config
+write_files:
+- path: /etc/flightctl/config.yaml
+  content: $(cat config.yaml | base64 -w0)
+  encoding: b64
+END
path: edge_manager/edge_mgr_provisioning_vmware_vsphere.adoc
user: login: fzdarsky
body: Yes, please.
created_at: 2025-03-13T16:09:36Z
author_association: NONE

PR comments:
user: login: mburman5
created_at: 2025-03-13T15:51:05Z
body: We haven't tested all the provisioning methods described, only the virtual machine provisioning. 
All other methods, shouldn't be included in the documentation for the current release(from QE side). 
Other flows will be tested at the future releases and will be communicated to the documentation team. Thank you
author_association: NONE
user: login: openshift-ci[bot]
created_at: 2025-03-18T16:18:40Z
body: [APPROVALNOTIFIER] This PR is **NOT APPROVED**

This pull-request has been approved by: *<a href="https://github.com/stolostron/rhacm-docs/pull/7608#" title="Author self-approved">amolnar-rh</a>*, *<a href="https://github.com/stolostron/rhacm-docs/pull/7608#pullrequestreview-2695252737" title="Approved">swopebe</a>*


The full list of commands accepted by this bot can be found [here](https://go.k8s.io/bot-commands?repo=stolostron%2Frhacm-docs).

<details open>
Needs approval from an approver in each of these files:

- **[OWNERS](https://github.com/stolostron/rhacm-docs/blob/2.13_stage/OWNERS)**

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":[]} -->
author_association: NONE