UTM
UTM copied to clipboard
JXA Examples?
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