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.service
Include 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 ›