git: 227e7a205edf - stable/14 - release: add basic cloudinit images

From: Baptiste Daroussin <bapt_at_FreeBSD.org>
Date: Thu, 11 Apr 2024 12:05:32 UTC
The branch stable/14 has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=227e7a205edf782129cba606f2d06b40e4728d98

commit 227e7a205edf782129cba606f2d06b40e4728d98
Author:     Baptiste Daroussin <bapt@FreeBSD.org>
AuthorDate: 2024-03-15 08:43:20 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2024-04-11 12:05:10 +0000

    release: add basic cloudinit images
    
    Provide both zfs and ufs images which a 1MB partition reserved for the
    config drive wearing a GPT Label "config-drive" to allow consumer to
    know where they should push the config drive on the provided image.
    
    This has been tested on OVHCloud baremetal via "bring your own image"
    Also tested on openstack
    
    Reviewed by:            emaste
    Sponsored by:           OVHCloud
    Differential Revision:          https://reviews.freebsd.org/D44369
    
    (cherry picked from commit 78b6117dac99c80fe618979fef4ef322b97415fa)
    (cherry picked from commit a977444652a59332c53b652b912c38a1d1802b58)
---
 release/Makefile.vm                |  4 ++++
 release/tools/basic-cloudinit.conf | 36 ++++++++++++++++++++++++++++++++++++
 release/tools/vmimage.subr         |  5 +++++
 3 files changed, 45 insertions(+)

diff --git a/release/Makefile.vm b/release/Makefile.vm
index 3a3b3bcd5f9d..a936e6cb98ca 100644
--- a/release/Makefile.vm
+++ b/release/Makefile.vm
@@ -19,6 +19,7 @@ RAW_DESC=	Unformatted raw disk image
 
 CLOUDWARE_TYPES?= AZURE \
 		BASIC-CI \
+		BASIC-CLOUDINIT \
 		EC2 \
 		GCE \
 		OCI \
@@ -29,6 +30,9 @@ AZURE_DESC=	Microsoft Azure platform image
 BASIC-CI_FORMAT=	raw
 BASIC-CI_FSLIST=	ufs
 BASIC-CI_DESC=		Image for CI
+BASIC-CLOUDINIT_FORMAT=	raw
+BASIC-CLOUDINIT_FSLIST?=	ufs zfs
+BASIC-CLOUDINIT_DESC?=	Images for VM with cloudinit disk config support
 EC2_FORMAT=	raw
 EC2_FSLIST=	ufs zfs
 EC2_FLAVOURS=	BASE CLOUD-INIT
diff --git a/release/tools/basic-cloudinit.conf b/release/tools/basic-cloudinit.conf
new file mode 100644
index 000000000000..da4bed5ea5b5
--- /dev/null
+++ b/release/tools/basic-cloudinit.conf
@@ -0,0 +1,36 @@
+#!/bin/sh
+#
+#
+
+# Should be enough for base image, image can be resized in needed
+export VMSIZE=5g
+
+# 1M config drive should be enough in most cases
+export CONFIG_DRIVE=YES
+export CONFIG_DRIVE_SIZE=1M
+
+# Set to a list of third-party software to enable in rc.conf(5).
+export VM_RC_LIST="sshd growfs nuageinit"
+
+vm_extra_pre_umount() {
+	cat << EOF >> ${DESTDIR}/etc/rc.conf
+dumpdev="AUTO"
+ifconfig_DEFAULT="DHCP"
+sshd_enable="YES"
+EOF
+
+	cat << EOF >> ${DESTDIR}/boot/loader.conf
+autoboot_delay="-1"
+beastie_disable="YES"
+loader_logo="none"
+console="comconsole,vidconsole"
+EOF
+    cat <<EOF >> ${DESTDIR}/etc/ssh/sshd_config
+PasswordAuthentication yes
+UsePAM no
+EOF
+
+	touch ${DESTDIR}/firstboot
+
+	return 0
+}
diff --git a/release/tools/vmimage.subr b/release/tools/vmimage.subr
index 6eaf17b07948..eda22e061c6d 100644
--- a/release/tools/vmimage.subr
+++ b/release/tools/vmimage.subr
@@ -242,6 +242,10 @@ vm_create_disk() {
 		BOOTPARTSOFFSET=":${VM_BOOTPARTSOFFSET}"
 	fi
 
+	if [ -n "${CONFIG_DRIVE}" ]; then
+		CONFIG_DRIVE="-p freebsd/config-drive::${CONFIG_DRIVE_SIZE}"
+	fi
+
 	case "${VMFS}" in
 	ufs)
 		FSPARTTYPE=freebsd-ufs
@@ -315,6 +319,7 @@ vm_create_disk() {
 	mkimg -s ${PARTSCHEME} -f ${VMFORMAT} \
 		${BOOTPARTS} \
 		${SWAPOPT} \
+		${CONFIG_DRIVE} \
 		${ROOTFSPART} \
 		-o ${VMIMAGE}