Provisioning Fedora/CentOS bootc on vSphere
Prerequisites
- 
You will need the govc tool. 
- 
A Linux host with kernel 6.x or newer 
No cloud-init or hypervisor-specific metadata tools included by default
| Unlike Fedora Cloud or Fedora CoreOS (or in general many pre-generated disk images) the default base image does not include a tool such as cloud-init or afterburn to fetch SSH keys or execute scripts from the hypervisor. | 
For more on this, see Cloud Agents.
Generating a container image that includes agents
This example container build injects both open-vm-tools and cloud-init,
so that SSH credentials can be injected per virtual machine instantiation.
FROM <base image>
RUN dnf install -y open-vm-tools cloud-init && dnf clean all && rm -rf /var/cache /var/log/dnf && \
    systemctl enable vmtoolsd.serviceInclude the additional software or tooling you want in your image as well; see Building containers.
Generating a VMDK with bootc-image-builder
This uses bootc-image-builder:
$ podman run --rm -it --privileged -v /var/lib/containers/storage:/var/lib/containers/storage -v .:/output --security-opt label=type:unconfined_t \
  --pull newer quay.io/centos-bootc/bootc-image-builder:latest --local --rootfs xfs --type vmdk The generated VMDK file will be present in vmdk/disk.vmdk.
Uploading the VMDK
govc import.vmdk \
    -dc="${DATACENTER}" \
    -ds="${DATASTORE}" \
    -pool="${DATACENTER_POOL}" \
    vmdk/disk.vmdk \
    ${DESTINATION_FOLDER}Creating a new virtual machine from the VMDK
govc vm.create \
    -dc="${DATACENTER}" \
    -ds="${DATASTORE}" \
    -pool="{DATACENTER_POOL}" \
    -net="${NETWORK}" \
    -disk.controller=pvscsi \
    -on=false \
    -c=${CPUS} \
    -m=${MEMORY} \
    -g="rhel9_64Guest" \
    -firmware="${FIRMWARE}" \
    "${VM_NAME}"Attach the VMDK to the VM
govc vm.disk.attach \
    -dc="${DATACENTER}" \
    -ds="${DATASTORE}" \
    -vm="${VM_NAME}" \
    -link=false \
    -disk="${DESTINATION_FOLDER}/disk.vmdk"Want to help? Learn how to contribute to Fedora Docs ›