aboutsummaryrefslogtreecommitdiff
path: root/release/scripts/oracle
diff options
context:
space:
mode:
authorDave Cottlehuber <dch@FreeBSD.org>2025-03-04 23:56:00 +0000
committerDave Cottlehuber <dch@FreeBSD.org>2025-04-08 18:58:08 +0000
commite2125f57bd2c4539b3414251066931dee36a377c (patch)
tree786a924ad6821aad2856573c3ccfa38fbb6968ae /release/scripts/oracle
parent7eab72fae632115fa93f5b39f1f39453e0630af9 (diff)
Diffstat (limited to 'release/scripts/oracle')
-rw-r--r--release/scripts/oracle/arm64_shape_compatibilities.json24
-rw-r--r--release/scripts/oracle/default_shape_compatibilities.json1
-rwxr-xr-xrelease/scripts/oracle/generate_metadata.lua74
-rw-r--r--release/scripts/oracle/image_capability_data.json96
-rw-r--r--release/scripts/oracle/image_metadata.json21
5 files changed, 216 insertions, 0 deletions
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"
+ }
+}