Cloudy is a both an HTTP server and a CLI tool, used to run commands on a remote machine using plugins.
So what?
Well, not any commands... You write a script that exports a few functions in an object and Cloudy takes care of exposing it as an API.
Here's an example:
export default {
greeting: {
sayHi() {
return 'Hello!';
}
}
}And here's what the CLI can do:
cy greeting.sayHi
> Hello!You install the CLI locally, point it to a server and run remote commands.
On the server side, you run the same CLI, but as an HTTP API.
You need a machine with Node.js installed. Then you can install the Cloudy CLI and create a server.
Tip: create an alias for Cloudy CLI. Add this to
~/.profile:alias cy="npx @cloud-cli/cli"
# generate a random key
head -c 5000 /dev/urandom | sha512sum
echo '[paste-the-generated-key-here]' > keyNext, let's create a configuration file called cloudy.conf.mjs on the server:
// import your plugins
import foo from 'foo-plugin';
import { init } from '@cloud-cli/cli';
function initialize() {
// anything you need to run when the command server starts
}
// export commands from plugins
export default { foo, [init]: initialize };
// optional, change remote port and host
export const apiPort = 1234;
export const apiHost = '0.0.0.0';And then we start the Cloudy server:
npx @cloud-cli/cli --serveOn your local machine, create a configuration file again:
// cloudy.conf.mjs
export default {};
// same port as the config on the server
export const apiPort = 1234;
export const remoteHost = 'your-server.com';
export const key = '[paste-the-generated-key-here]';And that's it!
Now you can run npx @cloud-cli/cli --help to get a list of commands available.
-
A call to
cy foo.bar --option valueon localhost is converted to a POST request toyour-server.com/foo.barwith a JSON body{ "option": "value" }. -
The server runs your command and sometimes returns an output
-
The same commands can be executed with
cyinside the server and in your local machine. -
And if you need to un the same but from a browser, the entire CLI is also an API