diff --git a/release/Makefile.oracle b/release/Makefile.oracle new file mode 100644 index 000000000000..b4f3bbdf86f2 --- /dev/null +++ b/release/Makefile.oracle @@ -0,0 +1,101 @@ +#D48382 +# Makefile for preparing & uploading Oracle Cloud images from existing +# .raw files created by cloudware-release. +# +# Overview: +# +# The base image is already created by cloudware-release. +# +# Construct the custom OCI metadata, derived from exported official OCI images. +# It is architecture-specific but appears mostly stable over time. +# Compress the raw image and place it in the same directory as the metadata. +# Make a GNU format tarball of these files. +# Upload the tarball to Oracle Cloud via a pre-approved curl URI, into +# the FreeBSD Foundation's Oracle Cloud account. +# +# These images go into the "re" bucket in us-ashburn-1 region, which +# is mounted into the FreeBSD Foundation Oracle Marketplace account. +# Once uploaded, a manual step is needed to import the images as local +# custom images. These can then be tested within the us-ashburn-1 region. +# Once tested, follow the manual Oracle Marketplace import process to +# create a new FreeBSD version, attach the images, and initiate validation +# by Oracle. This can take up to 5 working days. Once complete, a final +# manual step is needed to mark the currently private images, public. +# Syncing to all sites should take 2-3 hours after this final step. + +ORACLE_BASENAME= ${OSRELEASE}-${BUILDDATE}${GITREV:C/^(.+)/-\1/} +ORACLE_PORTS_LIST= ftp/curl emulators/qemu@tools +CLEANFILES+= cw-oracle-portinstall + +cw-oracle-portinstall: .PHONY +.if !exists(/usr/local/bin/curl) || !exists(/usr/local/bin/qemu-img) +. if !exists(${PORTSDIR}/Makefile) +. if !exists(/usr/local/sbin/pkg-static) + env ASSUME_ALWAYS_YES=yes pkg bootstrap -yf +. endif + env ASSUME_ALWAYS_YES=yes pkg install -y ${ORACLE_PORTS_LIST} +. else + env UNAME_r=${UNAME_r} make -C \ + ${PORTSDIR}/ftp/curl \ + BATCH=1 WRKDIRPREFIX=/tmp/ports DISTDIR=/tmp/distfiles \ + all install clean + env UNAME_r=${UNAME_r} FLAVOR=tools make -C \ + ${PORTSDIR}/emulators/qemu \ + BATCH=1 WRKDIRPREFIX=/tmp/ports DISTDIR=/tmp/distfiles \ + all install clean +. endif +.endif + +.for _FS in ${ORACLE_FSLIST} +ORACLE_OCI_LIST+= cw-oracle-${_FS}.oci +ORACLE_UPLOAD_LIST+= cw-oracle-upload-${_FS} +CLEANFILES+= cw-oracle-${_FS}.oci +ORACLE_TMP_${_FS}= cw-oracle-${_FS}.oci.tmpdir +CLEANDIRS+= ${ORACLE_TMP_${_FS}} +ORACLE_METADATA= ${.CURDIR}/scripts/oracle +ORACLE_CAPABILITY= ${.CURDIR}/scripts/oracle/image_capability_data.json +ORACLE_TEMPLATE= ${.CURDIR}/scripts/oracle/image_metadata.json +ORACLE_OUTPUT_${_FS}= ${ORACLE_TMP_${_FS}}/image_metadata.json +.if ${TARGET} == "arm64" +ORACLE_SHAPES= ${ORACLE_METADATA}/arm64_shape_compatibilities.json +.else +ORACLE_SHAPES= ${ORACLE_METADATA}/default_shape_compatibilities.json +.endif + +cw-oracle-${_FS}.oci: cw-oracle-portinstall cw-oracle-${_FS}-raw + mkdir -p ${ORACLE_TMP_${_FS}} + # create architecture-specific JSON metadata + env TYPE="${TYPE}" \ + OSRELEASE="${OSRELEASE}" \ + ORACLE_CAPABILITY="${ORACLE_CAPABILITY}" \ + ORACLE_SHAPES="${ORACLE_SHAPES}" \ + ORACLE_TEMPLATE="${ORACLE_TEMPLATE}" \ + ORACLE_OUTPUT="${ORACLE_OUTPUT_${_FS}}" \ + ${ORACLE_METADATA}/generate_metadata.lua + + # convert raw to native qcow2 for zstd compression, saves ~ 8GiB + qemu-img convert -S 512b -p -O qcow2 -c -o compression_type=zstd \ + ${.OBJDIR}/${ORACLE${_FS:tu}RAWIMAGE} \ + ${ORACLE_TMP_${_FS}}/output.QCOW2 + + # Create GNU-compatible tarball using BSD tar + tar --format=gnutar -cf ${.TARGET} -C ${ORACLE_TMP_${_FS}} \ + image_metadata.json output.QCOW2 + + echo "Oracle image ${.TARGET} is ready for upload." + +cw-oracle-upload-${_FS}: cw-oracle-${_FS}.oci +.if !defined(ORACLE_PAR_URL) || empty(ORACLE_PAR_URL) + @echo "--------------------------------------------------------------" + @echo ">>> ORACLE_PAR_URL must be set for Oracle image upload" + @echo ">>> for testing, use a file:/// URL to a local directory" + @echo "--------------------------------------------------------------" + @false +.endif + echo "Please wait ... uploading cw-oracle-${_FS}.oci to ${ORACLE_BASENAME}-${_FS}.oci" + curl -s ${ORACLE_PAR_URL}/${ORACLE_BASENAME}-${_FS}.oci --upload-file cw-oracle-${_FS}.oci + echo "Uploaded cw-oracle-${_FS}.oci as ${ORACLE_BASENAME}-${_FS}.oci" + touch ${.TARGET} +.endfor + +cw-oracle-upload: cw-oracle-portinstall ${ORACLE_UPLOAD_LIST} diff --git a/release/Makefile.vm b/release/Makefile.vm index 5aa506ff6787..ec3e734285ce 100644 --- a/release/Makefile.vm +++ b/release/Makefile.vm @@ -1,278 +1,279 @@ # # # # Makefile for building virtual machine and cloud provider disk images. # VMTARGETS= vm-image VMFORMATS?= vhd vmdk qcow2 raw .if ${TARGET_ARCH} == riscv64 VMSIZE?= 6144m .else VMSIZE?= 5120m .endif VMFS?= ufs VMFSLIST?= ufs zfs SWAPSIZE?= 1g VMBASE?= vm VHD_DESC= Azure, VirtualPC, Hyper-V, Xen disk image VMDK_DESC= VMWare, VirtualBox disk image QCOW2_DESC= Qemu, KVM disk image RAW_DESC= Unformatted raw disk image CLOUDWARE_TYPES?= AZURE \ BASIC-CI \ BASIC-CLOUDINIT \ EC2 \ GCE \ ORACLE \ VAGRANT AZURE_FORMAT= vhdf AZURE_FSLIST?= ufs zfs AZURE_DESC= Microsoft Azure platform image BASIC-CI_FORMAT= raw BASIC-CI_FSLIST?= ufs BASIC-CI_DESC= Image for CI BASIC-CLOUDINIT_FORMAT= raw qcow2 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 SMALL EC2-BASE_DESC= Amazon EC2 image EC2-CLOUD-INIT_DESC= Amazon EC2 Cloud-Init image EC2-SMALL_DESC= Amazon EC2 small image GCE_FORMAT= raw GCE_FSLIST?= ufs zfs GCE_DESC= Google Compute Engine image ORACLE_FORMAT= raw ORACLE_FSLIST?= ufs zfs ORACLE_DESC= Oracle Cloud Infrastructure image OPENSTACK_FORMAT=qcow2 OPENSTACK_FSLIST?= ufs OPENSTACK_DESC= OpenStack platform image VAGRANT_FORMAT= vmdk VAGRANT_FSLIST?= ufs VAGRANT_FLAVOURS?= VIRTUALBOX VMWARE VAGRANT-VIRTUALBOX_DESC= Vagrant Image for VirtualBox VAGRANT-VMWARE_DESC= Vagrant Image for VMWare .for _CWT in ${CLOUDWARE_TYPES} . if defined(${_CWT}_FLAVOURS) . for _CWF in ${${_CWT}_FLAVOURS} CLOUDWARE_GEN+= ${_CWT}-${_CWF} ${_CWT}-${_CWF}_FORMAT?= ${${_CWT}_FORMAT} ${_CWT}-${_CWF}_FSLIST?= ${${_CWT}_FSLIST} ${_CWT}-${_CWF}_DESC?= ${${_CWT}_DESC} . endfor . else CLOUDWARE_GEN+= ${_CWT} . endif .endfor CLOUDWARE?= ${CLOUDWARE_GEN} .for _V in TYPE BRANCH REVISION . if !defined(${_V}) || empty(${_V}) ${_V}!= eval $$(awk '/^${_V}=/{print}' ${.CURDIR}/../sys/conf/newvers.sh); echo $$${_V} . endif .endfor emulator-portinstall: .if !exists(/usr/local/bin/qemu-${TARGET_ARCH}-static) .if exists(${PORTSDIR}/emulators/qemu-user-static/Makefile) env - UNAME_r=${UNAME_r} PATH=$$PATH \ make -C ${PORTSDIR}/emulators/qemu-user-static \ BATCH=1 WRKDIRPREFIX=/tmp/ports DISTDIR=/tmp/distfiles \ all install clean .else .if !exists(/usr/local/sbin/pkg-static) env ASSUME_ALWAYS_YES=yes pkg bootstrap -y .endif env ASSUME_ALWAYS_YES=yes pkg install -y emulators/qemu-user-static .endif .endif touch ${.TARGET} .if ${TARGET_ARCH} != ${MACHINE_ARCH} .if ( ${TARGET_ARCH} != "i386" ) || ( ${MACHINE_ARCH} != "amd64" ) QEMUSTATIC=/usr/local/bin/qemu-${TARGET_ARCH}-static QEMUTGT=emulator-portinstall .endif .endif QEMUTGT?= .if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE) . for _CW in ${CLOUDWARE} . if exists(${.CURDIR}/tools/${_CW:tl}.conf) && !defined(${_CW:tu}CONF) ${_CW:tu}CONF?= ${.CURDIR}/tools/${_CW:tl}.conf . endif . for _FS in ${${_CW:tu}_FSLIST} . for _FMT in ${${_CW:tu}_FORMAT} CLOUDTARGETS+= cw-${_CW:tl}-${_FS}-${_FMT} CLEANDIRS+= cw-${_CW:tl}-${_FS}-${_FMT} CLEANFILES+= ${_CW:tl}.${_FS}.${_FMT}.img \ ${_CW:tl}.${_FS}.${_FMT} \ ${_CW:tl}.${_FS}.${_FMT}.raw ${_CW:tu}${_FS:tu}${_FMT:tu}IMAGE= ${_CW:tl}.${_FS}.${_FMT} cw-${_CW:tl}-${_FS}-${_FMT}: ${QEMUTGT} mkdir -p ${.OBJDIR}/${.TARGET} env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} SWAPSIZE=${SWAPSIZE} \ QEMUSTATIC=${QEMUSTATIC} \ ${.CURDIR}/scripts/mk-vmimage.sh \ -C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} -F ${_FS} \ -i ${.OBJDIR}/${_CW:tl}.${_FS}.${_FMT}.img -s ${VMSIZE} -f ${_FMT} \ -S ${WORLDDIR} -o ${.OBJDIR}/${${_CW:tu}${_FS:tu}${_FMT:tu}IMAGE} -c ${${_CW:tu}CONF} touch ${.TARGET} . endfor . endfor # Hardlinks from "foo.${FMT}" to "foo-${VMFS}.${FMT}". These can go away once # all of the cloudware code knows how to handle multiple filesystem images (or # at least knows the name of the UFS image). . for _FMT in ${${_CW:tu}_FORMAT} CLOUDTARGETS+= cw-${_CW:tl}-${_FMT} CLEANFILES+= ${_CW:tl}.${_FMT} ${_CW:tu}${_FMT:tu}IMAGE= ${_CW:tl}.${_FMT} cw-${_CW:tl}-${_FMT}: cw-${_CW:tl}-${VMFS}-${_FMT} ln -f ${${_CW:tu}${VMFS:tu}${_FMT:tu}IMAGE} ${${_CW:tu}${_FMT:tu}IMAGE} . endfor # Targets without a disk format listed are the first disk format on the list . for _FS in ${${_CW:tu}_FSLIST} ${_CW:tu}${_FS:tu}IMAGE= ${_CW:tl}.${_FS}.${${_CW:tu}_FORMAT:[1]} cw-${_CW:tl}-${_FS}: cw-${_CW:tl}-${_FS}-${${_CW:tu}_FORMAT:[1]} . endfor ${_CW:tu}IMAGE= ${_CW:tl}.${${_CW:tu}_FORMAT:[1]} cw-${_CW:tl}: cw-${_CW:tl}-${${_CW:tu}_FORMAT:[1]} . endfor .endif .if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) CLEANFILES+= vm-image . for FORMAT in ${VMFORMATS} . for FS in ${VMFSLIST} CLEANDIRS+= vm-image-${FORMAT}-${FS} CLEANFILES+= ${FORMAT}.${FS}.img CLEANFILES+= ${VMBASE}.${FS}.${FORMAT} . endfor . endfor .endif vm-base: vm-image vm-image: ${QEMUTGT} .if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) . for FORMAT in ${VMFORMATS} . for FS in ${VMFSLIST} mkdir -p ${.OBJDIR}/${.TARGET}-${FORMAT}-${FS} env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} SWAPSIZE=${SWAPSIZE} \ QEMUSTATIC=${QEMUSTATIC} \ ${.CURDIR}/scripts/mk-vmimage.sh \ -C ${.CURDIR}/tools/vmimage.subr \ -d ${.OBJDIR}/${.TARGET}-${FORMAT}-${FS} -F ${FS} \ -i ${.OBJDIR}/${FORMAT}.${FS}.img -s ${VMSIZE} -f ${FORMAT} \ -S ${WORLDDIR} -o ${.OBJDIR}/${VMBASE}.${FS}.${FORMAT} . endfor . endfor .endif touch ${.TARGET} vm-cloudware: ${CLOUDTARGETS} list-vmtargets: list-cloudware @${ECHO} @${ECHO} "Supported virtual machine disk image formats:" .for FORMAT in ${VMFORMATS:tu} @${ECHO} " ${FORMAT:tl}: ${${FORMAT}_DESC}" .endfor list-cloudware: .if !empty(CLOUDWARE) @${ECHO} @${ECHO} "Supported cloud hosting provider images:" . for _CW in ${CLOUDWARE} @${ECHO} " ${_CW:tu}: ${${_CW:tu}_DESC}" . endfor .endif vm-install: .if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) mkdir -p ${DESTDIR}/vmimages . for FORMAT in ${VMFORMATS} . for FS in ${VMFSLIST} cp -p ${VMBASE}.${FS}.${FORMAT} \ ${DESTDIR}/vmimages/${OSRELEASE}-${FS}.${FORMAT} . endfor . endfor . if defined(WITH_COMPRESSED_VMIMAGES) && !empty(WITH_COMPRESSED_VMIMAGES) . for FORMAT in ${VMFORMATS} . for FS in ${VMFSLIST} # Don't keep the originals. There is a copy in ${.OBJDIR} if needed. ${XZ_CMD} ${DESTDIR}/vmimages/${OSRELEASE}-${FS}.${FORMAT} . endfor . endfor . endif cd ${DESTDIR}/vmimages && sha512 ${OSRELEASE}* > \ ${DESTDIR}/vmimages/CHECKSUM.SHA512 cd ${DESTDIR}/vmimages && sha256 ${OSRELEASE}* > \ ${DESTDIR}/vmimages/CHECKSUM.SHA256 .endif cloud-install-BASIC-CI: mkdir -p ${DESTDIR}/ciimages .for _FS in ${BASIC-CI_FSLIST} . for _FMT in ${BASIC-CI_FORMAT} cp -p ${.OBJDIR}/${BASIC-CI${_FS:tu}${_FMT:tu}IMAGE} \ ${DESTDIR}/ciimages/${OSRELEASE}-BASIC-CI-${_FS}.${_FMT} ${XZ_CMD} ${DESTDIR}/ciimages/${OSRELEASE}-BASIC-CI-${_FS}.${_FMT} . endfor .endfor cd ${DESTDIR}/ciimages && sha512 ${OSRELEASE}* > \ ${DESTDIR}/ciimages/CHECKSUM.SHA512 cd ${DESTDIR}/ciimages && sha256 ${OSRELEASE}* > \ ${DESTDIR}/ciimages/CHECKSUM.SHA256 cloud-install-BASIC-CLOUDINIT: mkdir -p ${DESTDIR}/vmimages .for _FS in ${BASIC-CLOUDINIT_FSLIST} . for _FMT in ${BASIC-CLOUDINIT_FORMAT} cp -p ${.OBJDIR}/${BASIC-CLOUDINIT${_FS:tu}${_FMT:tu}IMAGE} \ ${DESTDIR}/vmimages/${OSRELEASE}-BASIC-CLOUDINIT-${_FS}.${_FMT} ${XZ_CMD} ${DESTDIR}/vmimages/${OSRELEASE}-BASIC-CLOUDINIT-${_FS}.${_FMT} . endfor .endfor cd ${DESTDIR}/vmimages && sha512 ${OSRELEASE}* > \ ${DESTDIR}/vmimages/CHECKSUM.SHA512 cd ${DESTDIR}/vmimages && sha256 ${OSRELEASE}* > \ ${DESTDIR}/vmimages/CHECKSUM.SHA256 CLOUD_INSTALL_TGTS= .if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) . for _CW in ${CLOUDWARE} . if target(cloud-install-${_CW}) CLOUD_INSTALL_TGTS+= cloud-install-${_CW} . endif . endfor .endif cloud-install: ${CLOUD_INSTALL_TGTS} .if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) vm-release: ${VMTARGETS} .else vm-release: .endif .if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE) cloudware-release: ${CLOUDTARGETS} .else cloudware-release: .endif .include "${.CURDIR}/Makefile.azure" .include "${.CURDIR}/Makefile.ec2" .include "${.CURDIR}/Makefile.firecracker" .include "${.CURDIR}/Makefile.gce" +.include "${.CURDIR}/Makefile.oracle" .include "${.CURDIR}/Makefile.vagrant" .include "${.CURDIR}/Makefile.inc1" diff --git a/release/scripts/oracle/arm64_shape_compatibilities.json b/release/scripts/oracle/arm64_shape_compatibilities.json new file mode 100644 index 000000000000..dfd066b5474f --- /dev/null +++ b/release/scripts/oracle/arm64_shape_compatibilities.json @@ -0,0 +1,24 @@ +[ + { + "internalShapeName": "VM.Standard.A1.Flex", + "ocpuConstraints": { + "min": 1, + "max": 80 + }, + "memoryConstraints": { + "minInGBs": 1, + "maxInGBs": 512 + } + }, + { + "internalShapeName": "VM.Standard.A2.Flex", + "ocpuConstraints": { + "min": 1, + "max": 78 + }, + "memoryConstraints": { + "minInGBs": 1, + "maxInGBs": 946 + } + } +] diff --git a/release/scripts/oracle/default_shape_compatibilities.json b/release/scripts/oracle/default_shape_compatibilities.json new file mode 100644 index 000000000000..fe51488c7066 --- /dev/null +++ b/release/scripts/oracle/default_shape_compatibilities.json @@ -0,0 +1 @@ +[] diff --git a/release/scripts/oracle/generate_metadata.lua b/release/scripts/oracle/generate_metadata.lua new file mode 100755 index 000000000000..751b9680cc29 --- /dev/null +++ b/release/scripts/oracle/generate_metadata.lua @@ -0,0 +1,74 @@ +#!/usr/libexec/flua + +local ucl = require("ucl") + +-- read from environment variables +local os_type = os.getenv("TYPE") +local os_version = os.getenv("OSRELEASE") +-- the raw file +local capability_file = os.getenv("ORACLE_CAPABILITY") +-- the platform-specific file +local shapes_file = os.getenv("ORACLE_SHAPES") +-- base template +local template_file = os.getenv("ORACLE_TEMPLATE") +local output_file = os.getenv("ORACLE_OUTPUT") + +if not os_type or not os_version or not capability_file or + not shapes_file or not template_file or not output_file then + io.stderr:write("Error: Oracle metadata script is missing required environment variables:\n") + io.stderr:write("TYPE, OSRELEASE, ORACLE_CAPABILITY, ORACLE_SHAPES, ORACLE_TEMPLATE, ORACLE_OUTPUT\n") + os.exit(1) +end + +-- read files +local function read_file(path) + local f = io.open(path, "r") + if not f then + io.stderr:write("Error: Oracle metadata script cannot open file: " .. path .. "\n") + os.exit(1) + end + local content = f:read("*a") + f:close() + return content +end + +-- parse the template +local template = read_file(template_file) +local metadata = ucl.parser() +metadata:parse_string(template) +local data = metadata:get_object() + +-- update the simple fields +data.operatingSystem = os_type +data.operatingSystemVersion = os_version + +-- capability data is actually JSON, but needs to be inserted as a raw blob +local caps = read_file(capability_file) +-- remove all newlines and preceding spaces to match Oracle's format +caps = caps:gsub("\n", "") +caps = caps:gsub("%s+", "") +-- is it still valid JSON? +local caps_parser = ucl.parser() +if not caps_parser:parse_string(caps) then + io.stderr:write("Error: Oracle metadata script found invalid JSON in capability file\n") + os.exit(1) +end +-- insert as a raw blob +data.imageCapabilityData = caps + +-- parse and insert architecture-dependent shape compatibilities data +local shapes_data = read_file(shapes_file) +local shapes = ucl.parser() +shapes:parse_string(shapes_data) +data.additionalMetadata.shapeCompatibilities = shapes:get_object() + +-- save the metadata file +local dir = os.getenv("PWD") +local out = io.open(output_file, "w") +if not out then + io.stderr:write("Error: Oracle metadata script cannot create output file: " + .. dir .. "/" .. output_file .. "\n") + os.exit(1) +end +out:write(ucl.to_format(data, "json", {pretty = true})) +out:close() diff --git a/release/scripts/oracle/image_capability_data.json b/release/scripts/oracle/image_capability_data.json new file mode 100644 index 000000000000..01af71f73031 --- /dev/null +++ b/release/scripts/oracle/image_capability_data.json @@ -0,0 +1,96 @@ +{ + "capabilities": { + "Compute.AMD_SecureEncryptedVirtualization": { + "descriptorType": "boolean", + "defaultValue": false + }, + "Storage.BootVolumeType": { + "descriptorType": "enumstring", + "values": [ + "ISCSI", + "PARAVIRTUALIZED", + "SCSI", + "IDE", + "NVME" + ], + "defaultValue": "PARAVIRTUALIZED" + }, + "Storage.Iscsi.MultipathDeviceSupported": { + "descriptorType": "boolean", + "defaultValue": false + }, + "Storage.ParaVirtualization.EncryptionInTransit": { + "descriptorType": "boolean", + "defaultValue": true + }, + "Storage.ConsistentVolumeNaming": { + "descriptorType": "boolean", + "defaultValue": true + }, + "Compute.SecureBoot": { + "descriptorType": "boolean", + "defaultValue": false + }, + "Storage.ParaVirtualization.AttachmentVersion": { + "descriptorType": "enuminteger", + "values": [ + 1, + 2 + ], + "defaultValue": 2 + }, + "Storage.LocalDataVolumeType": { + "descriptorType": "enumstring", + "values": [ + "ISCSI", + "PARAVIRTUALIZED", + "SCSI", + "IDE", + "NVME" + ], + "defaultValue": "PARAVIRTUALIZED" + }, + "Network.AttachmentType": { + "descriptorType": "enumstring", + "values": [ + "PARAVIRTUALIZED", + "VDPA" + ], + "defaultValue": "PARAVIRTUALIZED" + }, + "Storage.RemoteDataVolumeType": { + "descriptorType": "enumstring", + "values": [ + "ISCSI", + "PARAVIRTUALIZED", + "SCSI", + "IDE", + "NVME" + ], + "defaultValue": "PARAVIRTUALIZED" + }, + "Compute.LaunchMode": { + "descriptorType": "enumstring", + "values": [ + "NATIVE", + "EMULATED", + "VDPA", + "PARAVIRTUALIZED", + "CUSTOM" + ], + "defaultValue": "PARAVIRTUALIZED" + }, + "Network.IPv6Only": { + "descriptorType": "boolean", + "defaultValue": false + }, + "Compute.Firmware": { + "descriptorType": "enumstring", + "values": [ + "BIOS", + "UEFI_64" + ], + "defaultValue": "UEFI_64" + } + } +} diff --git a/release/scripts/oracle/image_metadata.json b/release/scripts/oracle/image_metadata.json new file mode 100644 index 000000000000..eaea3dd1cad2 --- /dev/null +++ b/release/scripts/oracle/image_metadata.json @@ -0,0 +1,21 @@ +{ + "version": 2, + "externalLaunchOptions": { + "firmware": "UEFI_64", + "networkType": "PARAVIRTUALIZED", + "bootVolumeType": "PARAVIRTUALIZED", + "remoteDataVolumeType": "PARAVIRTUALIZED", + "localDataVolumeType": "PARAVIRTUALIZED", + "launchOptionsSource": "PARAVIRTUALIZED", + "pvAttachmentVersion": 2, + "pvEncryptionInTransitEnabled": false, + "consistentVolumeNamingEnabled": false + }, + "imageCapabilityData": "REPLACE", + "imageCapsFormatVersion": "23cfd738-ad9c-4f56-9281-67be6c8cd14c", + "operatingSystem": "REPLACE", + "operatingSystemVersion": "REPLACE", + "additionalMetadata": { + "shapeCompatibilities": "REPLACE" + } +}