utmapp / utmapp/UTM

JXA Examples?

Open
#6,403 4 comments 0 reactions 0 assignees View on GitHub
enhancement help wanted
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.