🚨 This release removes support for the ServerTemplate resource. It was an interesting experiment, but ultimately I feel cloud server creation is outside of the scope of Komodo, it wasn't a very refined flow, and is better accomplished using other IAC tools such as OpenTofu.
🚨 Container exec is now enabled even if disable_terminals = true. This allows users to still use container exec while disabling general terminals. If you don't want to allow container exec, you now have to use disable_container_exec in periphery.config.toml (Env: PERIPHERY_DISABLE_CONTAINER_EXEC)
Websocket: Add disable_websocket_reconnect = true to core.config.toml (Env: KOMODO_DISABLE_WEBSOCKET_RECONNECT=true) if your websocket is causing issues. You can still click the connected indicator in the topbar to manually trigger reconnect. The reconnect logic has also improved to make sure reconnect attempts only happen every 5s, so you might want to try it out before disabling reconnect. Re #368.
UI: Improve renaming visibility / intuitiveness
Now you rename by clicking on the name in the header
Lots of people didn't see the previous rename function until it was pointed out, hopefully this makes it easier to figure out.
Server: Terminals can now be started using your shell of choice (before it was always bash)
Server: Implemented the execute_terminal api to send command to your Terminals over HTTP call. See below for details.
Stack: Add the BatchPullStack execution for use in Actions / Procedures.
Execute Terminal
One use case I had in mind for terminals is to have an easy way to handle a simple system update task, say running sudo apt upgrade -y, on a schedule. To do this, I needed a way to interact with terminals from an Action. Now you can do this using komodo.execute_terminal. For example, a simple Action to update all your servers and consolidate / save the logs:
Note. It is necessary to CreateTerminal before you can execute on it, as shown above. Setting recreate: Types.TerminalRecreateMode.DifferentCommand will make it so it does not fail if the terminal already exists, and only recreates the terminal if it was started with a different root command. This allows you to reuse the same terminal and collect the output for later viewing.
Other
The API now supports the Path calling convention, allowing for the request type to be specified in the URL path, which is a bit more concise. For example calling DeployStack:
---------------------------------
## Path calling convention (New)
---------------------------------
curl --header (unchanged) \
--data '{ "stack": "my-stack", "services": ["server"] }' \ # <- data just matches the rust struct
https://komodo.example.com/execute/DeployStack # <- request type in path
-----------------------------------
## Type-params calling convention (Old, but still supported)
-----------------------------------
curl --header (unchanged) \
--data '{ "type": "DeployStack", "params": { "stack": "my-stack", "services": ["server"] } }' \
https://komodo.example.com/execute
This is not breaking, the previous way of calling the API continues to be supported.
The Frontend interface now uses the path based calling convention, as it is much easier to see what calls are happening from the browser devtools during development. That was the main motivation for this feature.
There isn't any change to the rust or typescript clients.
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.
## 📋 Pull Request Information
**Original PR:** https://github.com/moghtech/komodo/pull/472
**Author:** [@mbecker20](https://github.com/mbecker20)
**Created:** 5/2/2025
**Status:** ✅ Merged
**Merged:** 5/4/2025
**Merged by:** [@mbecker20](https://github.com/mbecker20)
**Base:** `main` ← **Head:** `1.17.5`
---
### 📝 Commits (10+)
- [`e99fca0`](https://github.com/moghtech/komodo/commit/e99fca0f2c75ba4f23d2c4c156db105df74b3226) API support new calling syntax
- [`fd0602b`](https://github.com/moghtech/komodo/commit/fd0602bc343e2d0fd7c5b78ad044721a624c0efa) finish /{variant} api to improve network logs in browser console
- [`c77412d`](https://github.com/moghtech/komodo/commit/c77412dc67f63151bbf6abe1eb8e85a8534cf4ca) update roadmap
- [`50853c3`](https://github.com/moghtech/komodo/commit/50853c36ba1afaada40ba05acf021fc9320daa1d) configure the shell used to start the pty
- [`bee22e2`](https://github.com/moghtech/komodo/commit/bee22e2850eede9f877d807a82af0e353e474ef2) start on ExecuteTerminal api
- [`781a57e`](https://github.com/moghtech/komodo/commit/781a57ee5fe3f207962fd105df8d814069a9a757) Rename resources less hidden - click on name in header
- [`2b588cc`](https://github.com/moghtech/komodo/commit/2b588cca0e5b62321bed0e6df817344307bdfc8d) update deps
- [`918d927`](https://github.com/moghtech/komodo/commit/918d92714f19e599421637309c32502d6e74867b) execute terminal
- [`12d52f7`](https://github.com/moghtech/komodo/commit/12d52f7fc86cef5911a86d5c1194d7a013a6bb79) BatchPullStack
- [`c898d9c`](https://github.com/moghtech/komodo/commit/c898d9c525acc70198ff44653bd1999d93482fad) add Types import to Actions, and don't stringify the error
### 📊 Changes
**134 files changed** (+2585 additions, -5647 deletions)
<details>
<summary>View changed files</summary>
📝 `Cargo.lock` (+82 -72)
📝 `Cargo.toml` (+16 -14)
📝 `bin/cli/src/exec.rs` (+7 -0)
📝 `bin/core/src/alert/mod.rs` (+0 -3)
📝 `bin/core/src/api/auth.rs` (+19 -2)
📝 `bin/core/src/api/execute/action.rs` (+9 -3)
📝 `bin/core/src/api/execute/mod.rs` (+20 -5)
➖ `bin/core/src/api/execute/server_template.rs` (+0 -156)
📝 `bin/core/src/api/execute/stack.rs` (+26 -0)
📝 `bin/core/src/api/execute/sync.rs` (+0 -25)
📝 `bin/core/src/api/mod.rs` (+6 -0)
📝 `bin/core/src/api/read/mod.rs` (+20 -8)
➖ `bin/core/src/api/read/server_template.rs` (+0 -97)
📝 `bin/core/src/api/read/toml.rs` (+1 -34)
📝 `bin/core/src/api/read/update.rs` (+0 -20)
➕ `bin/core/src/api/terminal.rs` (+75 -0)
📝 `bin/core/src/api/user.rs` (+19 -1)
📝 `bin/core/src/api/write/description.rs` (+1 -10)
📝 `bin/core/src/api/write/mod.rs` (+19 -9)
📝 `bin/core/src/api/write/permissions.rs` (+0 -14)
_...and 80 more files_
</details>
### 📄 Description
# Changelog
🚨 This release **removes support for the ServerTemplate resource**. It was an interesting experiment, but ultimately I feel cloud server creation is outside of the scope of Komodo, it wasn't a very refined flow, and is better accomplished using other IAC tools such as OpenTofu.
🚨 Container exec is now enabled even if `disable_terminals = true`. This allows users to still use container exec while disabling general terminals. If you don't want to allow container exec, you now have to use `disable_container_exec` in `periphery.config.toml` (Env: `PERIPHERY_DISABLE_CONTAINER_EXEC`)
- **Websocket**: Add `disable_websocket_reconnect = true` to `core.config.toml` (Env: `KOMODO_DISABLE_WEBSOCKET_RECONNECT=true`) if your websocket is causing issues. You can still click the connected indicator in the topbar to manually trigger reconnect. The reconnect logic has also improved to make sure reconnect attempts only happen every 5s, so you might want to try it out before disabling reconnect. Re #368.
- **UI**: Improve **renaming** visibility / intuitiveness
- Now you rename by **clicking on the name in the header**
- Lots of people didn't see the previous rename function until it was pointed out, hopefully this makes it easier to figure out.
- **Server**: Terminals can now be started using your **shell of choice** (before it was always `bash`)
- **Server**: Implemented the `execute_terminal` api to send command to your Terminals over HTTP call. See below for details.
- **Stack**: Add the `BatchPullStack` execution for use in Actions / Procedures.
## Execute Terminal
One use case I had in mind for terminals is to have an easy way to handle a simple system update task, say running `sudo apt upgrade -y`, on a schedule. To do this, I needed a way to interact with terminals from an Action. Now you can do this using `komodo.execute_terminal`. For example, a simple Action to update all your servers and consolidate / save the logs:
```ts
const servers = await komodo.read("ListServers", {
query: { tags: ["auto-update"] },
});
for (const server of servers) {
console.log();
console.log("------------------");
console.log("Updating", server.name);
await komodo.write("CreateTerminal", {
server: server.name,
name: "apt-upgrade",
command: "bash",
recreate: Types.TerminalRecreateMode.DifferentCommand,
});
await komodo.execute_terminal(
{
server: server.name,
terminal: "apt-upgrade",
command:
"sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y",
},
{
onLine: console.log,
onFinish: (code) => console.log("Finished:", code),
},
);
}
```
Note. It is necessary to `CreateTerminal` before you can execute on it, as shown above. Setting `recreate: Types.TerminalRecreateMode.DifferentCommand` will make it so it does not fail if the terminal already exists, and only recreates the terminal if it was started with a different root command. This allows you to reuse the same terminal and collect the output for later viewing.
## Other
- The API now supports the **Path** calling convention, allowing for the request **`type`** to be specified in the **URL path**, which is a bit more concise. For example calling [DeployStack](https://docs.rs/komodo_client/latest/komodo_client/api/execute/struct.DeployStack.html):
```
---------------------------------
## Path calling convention (New)
---------------------------------
curl --header (unchanged) \
--data '{ "stack": "my-stack", "services": ["server"] }' \ # <- data just matches the rust struct
https://komodo.example.com/execute/DeployStack # <- request type in path
-----------------------------------
## Type-params calling convention (Old, but still supported)
-----------------------------------
curl --header (unchanged) \
--data '{ "type": "DeployStack", "params": { "stack": "my-stack", "services": ["server"] } }' \
https://komodo.example.com/execute
```
- This is not breaking, the previous way of calling the API continues to be supported.
- The Frontend interface now uses the path based calling convention, as it is much easier to see what calls are happening from the browser devtools during development. That was the main motivation for this feature.
- There isn't any change to the [rust](https://crates.io/crates/komodo_client) or [typescript](https://www.npmjs.com/package/komodo_client) clients.
---
<sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
📋 Pull Request Information
Original PR: https://github.com/moghtech/komodo/pull/472
Author: @mbecker20
Created: 5/2/2025
Status: ✅ Merged
Merged: 5/4/2025
Merged by: @mbecker20
Base:
main← Head:1.17.5📝 Commits (10+)
e99fca0API support new calling syntaxfd0602bfinish /{variant} api to improve network logs in browser consolec77412dupdate roadmap50853c3configure the shell used to start the ptybee22e2start on ExecuteTerminal api781a57eRename resources less hidden - click on name in header2b588ccupdate deps918d927execute terminal12d52f7BatchPullStackc898d9cadd Types import to Actions, and don't stringify the error📊 Changes
134 files changed (+2585 additions, -5647 deletions)
View changed files
📝
Cargo.lock(+82 -72)📝
Cargo.toml(+16 -14)📝
bin/cli/src/exec.rs(+7 -0)📝
bin/core/src/alert/mod.rs(+0 -3)📝
bin/core/src/api/auth.rs(+19 -2)📝
bin/core/src/api/execute/action.rs(+9 -3)📝
bin/core/src/api/execute/mod.rs(+20 -5)➖
bin/core/src/api/execute/server_template.rs(+0 -156)📝
bin/core/src/api/execute/stack.rs(+26 -0)📝
bin/core/src/api/execute/sync.rs(+0 -25)📝
bin/core/src/api/mod.rs(+6 -0)📝
bin/core/src/api/read/mod.rs(+20 -8)➖
bin/core/src/api/read/server_template.rs(+0 -97)📝
bin/core/src/api/read/toml.rs(+1 -34)📝
bin/core/src/api/read/update.rs(+0 -20)➕
bin/core/src/api/terminal.rs(+75 -0)📝
bin/core/src/api/user.rs(+19 -1)📝
bin/core/src/api/write/description.rs(+1 -10)📝
bin/core/src/api/write/mod.rs(+19 -9)📝
bin/core/src/api/write/permissions.rs(+0 -14)...and 80 more files
📄 Description
Changelog
🚨 This release removes support for the ServerTemplate resource. It was an interesting experiment, but ultimately I feel cloud server creation is outside of the scope of Komodo, it wasn't a very refined flow, and is better accomplished using other IAC tools such as OpenTofu.
🚨 Container exec is now enabled even if
disable_terminals = true. This allows users to still use container exec while disabling general terminals. If you don't want to allow container exec, you now have to usedisable_container_execinperiphery.config.toml(Env:PERIPHERY_DISABLE_CONTAINER_EXEC)Websocket: Add
disable_websocket_reconnect = truetocore.config.toml(Env:KOMODO_DISABLE_WEBSOCKET_RECONNECT=true) if your websocket is causing issues. You can still click the connected indicator in the topbar to manually trigger reconnect. The reconnect logic has also improved to make sure reconnect attempts only happen every 5s, so you might want to try it out before disabling reconnect. Re #368.UI: Improve renaming visibility / intuitiveness
Server: Terminals can now be started using your shell of choice (before it was always
bash)Server: Implemented the
execute_terminalapi to send command to your Terminals over HTTP call. See below for details.Stack: Add the
BatchPullStackexecution for use in Actions / Procedures.Execute Terminal
One use case I had in mind for terminals is to have an easy way to handle a simple system update task, say running
sudo apt upgrade -y, on a schedule. To do this, I needed a way to interact with terminals from an Action. Now you can do this usingkomodo.execute_terminal. For example, a simple Action to update all your servers and consolidate / save the logs:Note. It is necessary to
CreateTerminalbefore you can execute on it, as shown above. Settingrecreate: Types.TerminalRecreateMode.DifferentCommandwill make it so it does not fail if the terminal already exists, and only recreates the terminal if it was started with a different root command. This allows you to reuse the same terminal and collect the output for later viewing.Other
typeto be specified in the URL path, which is a bit more concise. For example calling DeployStack:🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.