JXA Examples?
- Dominant language
- Swift
- Stars
- 35.5k
- Forks
- 1.8k
- Avg merge
- 5d 5h
- Merged PRs (30d)
- 7
Description
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](https://en.wikipedia.org/wiki/AppleScript#JavaScript_for_Automation). 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:
```javascript
#!/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:
```javascript
#!/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:
```javascript
#!/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:
```javascript
#!/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](https://docs.getutm.app/scripting/cheat-sheet/), as I imagine most people are more familiar with JavaScript than AppleScript.
JXA Resources
-
-
-
Contributor guide
Assessment
This issue has not been assessed yet.