UTM icon indicating copy to clipboard operation
UTM copied to clipboard

JXA Examples?

Open dronenb opened this issue 1 month ago • 0 comments

Hi all,

First off, thank you for all your work on UTM. It is a very useful application.

I was looking for some assistance with utilizing the AppleScript scripting interface for UTM from within JXA. From reading the UTM.sdef from the Script Editor in JavaScript language mode, I came up with the following working example that lists VM's and give output in JSON format to STDOUT:

#!/usr/bin/env osascript -l JavaScript

const app = Application('UTM');
let vms = app.virtualMachines().map((vm) => {
    return JSON.parse(Automation.getDisplayString(vm.properties()));
});

// Output last statement to stdout
JSON.stringify(vms);

I am interested in creating VM's as well, but have not had much luck. Here is what I have attemped thus far:

Attempt 1:

#!/usr/bin/env osascript -l JavaScript
const utm = Application("UTM");
let config = utm.QemuConfiguration(
    {
        "name":"test",
        "notes":"",
        "architecture":"aarch64",
        "memory":4096,
        "cpuCores":0,
        "hypervisor":true,
        "uefi":true,
        "directoryShareMode":"VirtFS",
        "drives":[],
        "networkInterfaces":[],
        "serialPorts":[],
        "machine":"virt"
    }
);

var vm = utm.VirtualMachine(
    {
        "backend":"qemu",
        "configuration": config
    }
);
utm.virtualMachines.push(vm);

Attempt 2:

#!/usr/bin/env osascript -l JavaScript
const utm = Application('UTM');
const config = utm.QemuConfiguration(
    {
        "name":"test",
        "notes":"",
        "architecture":"aarch64",
        "memory":4096,
        "cpuCores":0,
        "hypervisor":true,
        "uefi":true,
        "directoryShareMode":"VirtFS",
        "drives":[],
        "networkInterfaces":[],
        "serialPorts":[],
        "machine":"virt"
    }
);
const vm = utm.make(
    {
        "new": "virtualMachine",
        "withProperties":   {
            "backend"   :"qemu",
            "configuration" : config,
        }
    }
);

Attempt 3:

#!/usr/bin/env osascript -l JavaScript
const utm = Application('UTM');

const vm = utm.make(
    {
        "new": "virtualMachine",
        "withProperties":   {
            "backend"   :"qemu",
            "configuration" : {
                "name":"test",
                "notes":"",
                "architecture":"aarch64",
                "memory":4096,
                "cpuCores":0,
                "hypervisor":true,
                "uefi":true,
                "directoryShareMode":"VirtFS",
                "drives":[],
                "networkInterfaces":[],
                "serialPorts":[],
                "machine":"virt"
            }
        }
    }
);

Attempts 1 and 2 yield: execution error: Error: Error: A valid configuration must be specified. (-2700) Attempt 3 yields: execution error: Error: Error: Can't convert types. (-1700)

I think I am close here, but I could use some assistance. If we get something working, I would love to help get some JXA examples documented alongside the AppleScript examples in the scripting cheat sheet, as I imagine most people are more familiar with JavaScript than AppleScript.

JXA Resources

dronenb avatar Jun 02 '24 18:06 dronenb