Skip to main content

tool using Clouding.io API

Project description

tool using Clouding.io API

This is an unofficial CLI that interacts with Clouding.io's REST API. Its main purpose is to provide a simple interface to create and destroy servers from snapshots/images. It is not an all-encompassing tool as it neither provides access to all API endpoints nor all actions.

Installation

tuca is on PyPi, use the package manager of your choice to set yourself up. Here is an example using uv:

uv tool install tuca

Usage

The basics

The CLI interface follows this pattern:

tuca <endpoint> <action> [options]
  • endpoint is the same as in the API documentation
    💁 Not all endpoints are supported!
  • action is one of create, list and delete
    💁 Supported actions depend on endpoint!
  • options depend on endpoint and action
    💁 Consult --help for details!

tuca writes pretty-printed JSON (no colors) to stdout. It's human-readable and can be piped into jq for non-interactive usage. The following example shows the output from listing the keypairs endpoint (values redacted):

{
    "keypairs": [
        {
            "fingerprint": "00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00",
            "id": "xxxxxxxxxxxxxxxx",
            "name": "default"
        }
    ]
}

The output is

  • always presented as list, even if the result count is 1 or 0
  • usually named after the endpoint
  • contains an opionated subset of the available attributes, but always id and name where applicable (use -v to show everything)
  • limited to a maximum of 100 entries

Setup authentication

First order of business is setting up an API token. You can do that via environment variable:

export CLOUDINGIO_API_TOKEN=my_secret_token

Or, more securely, have tuca write it into your system's keyring. The following command will give you an interactive prompt to do that:

tuca auth create

If credentials are present in both keyring and environment, the environment variable takes precedence.

Create a server

Pick one of the available Windows images.

tuca images list --filter windows
Output
{
    "images": [
        {
            "accessMethods": {
                "password": "required",
                "sshKey": "not-supported"
            },
            "id": "Lka79zd4JDnxyr85",
            "minimumSizeGb": 25,
            "name": "Windows Server 2022 Datacenter (English 64Bit)"
        },
        {
            "accessMethods": {
                "password": "required",
                "sshKey": "not-supported"
            },
            "id": "jG4bZNnEQznYx7LP",
            "minimumSizeGb": 25,
            "name": "Windows Server 2016 Datacenter (English 64Bit) EOL"
        },
        {
            "accessMethods": {
                "password": "required",
                "sshKey": "not-supported"
            },
            "id": "WwQ6kDdVqb2Jeaml",
            "minimumSizeGb": 25,
            "name": "Windows Server 2019 Datacenter (English 64Bit) EOL"
        },
        {
            "accessMethods": {
                "password": "required",
                "sshKey": "not-supported"
            },
            "id": "kbxmpG2bXvKwlaDg",
            "minimumSizeGb": 25,
            "name": "Windows Server 2025 Datacenter (English 64Bit)"
        },
        {
            "accessMethods": {
                "password": "required",
                "sshKey": "not-supported"
            },
            "id": "jXEm7yK3MJ2VYkQ9",
            "minimumSizeGb": 25,
            "name": "Windows 11 (English 64Bit | Based on Windows Server 2025)"
        },
        {
            "accessMethods": {
                "password": "required",
                "sshKey": "not-supported"
            },
            "id": "q58XEgdA0P26mA0j",
            "minimumSizeGb": 25,
            "name": "Windows 11 (Espa\u00f1ol 64Bit | Basado en Windows Server 2025)"
        }
    ]
}

Now pick one of the available flavors (server sizes).

tuca flavors list
Output

(output shortened)

{
    "sizes/flavors": [
        ...
        {
            "id": "8x16",
            "pricePerHour": 0.05472,
            "ramGb": 16,
            "vCores": 8.0
        },
        ...
    ]
}

That's sufficient to create a server with minimal configuration.

# Windows 11 compatible image
# 8 cores, 16 GB RAM
# default firewall
# default image size
tuca servers create --image jXEm7yK3MJ2VYkQ9 --name MyWinServer --flavorid 8x16 --password start123
Output
{
    "servers": [
        {
            "action": {
                "completedAt": null,
                "id": "aaaaaaaaaaaaaaaa",
                "resourceId": "rrrrrrrrrrrrrrrr",
                "resourceType": "server",
                "startedAt": "2026-02-28T14:38:52.312803Z",
                "status": "inProgress",
                "type": "create"
            },
            "createdAt": "",
            "id": "rrrrrrrrrrrrrrrr",
            "name": "MyWinServer",
            "publicPorts": [],
            "status": "Pending"
        }
    ]
}

Creating the server can take some time and you can check how it's doing.

tuca servers list --name MyWinServer
Output
{
    "servers": [
        {
            "createdAt": "2026-02-28T14:38:52",
            "id": "rrrrrrrrrrrrrrrr",
            "name": "MyWinServer",
            "publicPorts": [
                {
                    "id": "pppppppppppppppp",
                    "ipAddress": "000.000.000.000",
                    "macAddress": "00:00:00:00:00:00"
                }
            ],
            "status": "Creating"
        }
    ]
}

The server will be ready eventually.

Output
{
    "servers": [
        {
            "createdAt": "2026-02-04T23:42:16",
            "id": "rrrrrrrrrrrrrrrr",
            "name": "MyWinServer",
            "publicPorts": [
                {
                    "id": "pppppppppppppppp",
                    "ipAddress": "000.000.000.000",
                    "macAddress": "00:00:00:00:00:00"
                }
            ],
            "status": "Active"
        }
    ]
}

License

GPL-2.0-or-later

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tuca-0.8.0.tar.gz (46.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tuca-0.8.0-py3-none-any.whl (39.8 kB view details)

Uploaded Python 3

File details

Details for the file tuca-0.8.0.tar.gz.

File metadata

  • Download URL: tuca-0.8.0.tar.gz
  • Upload date:
  • Size: 46.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tuca-0.8.0.tar.gz
Algorithm Hash digest
SHA256 d77d7789fb7452614ae6fc8cda975977a7f2b1d14036c095efbcd8f5672092bc
MD5 b98728e94389f0ae2e79de68bf4ed2ea
BLAKE2b-256 57ba93e2935bf0b331f27c5db7742882b249aae1f1621ff51e09a6a7334d4995

See more details on using hashes here.

Provenance

The following attestation bundles were made for tuca-0.8.0.tar.gz:

Publisher: build.yml on dehesselle/tuca

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tuca-0.8.0-py3-none-any.whl.

File metadata

  • Download URL: tuca-0.8.0-py3-none-any.whl
  • Upload date:
  • Size: 39.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tuca-0.8.0-py3-none-any.whl
Algorithm Hash digest
SHA256 78a6c35c5d2e61042acd8f2c8fc3599b0ae28dbc14cd8033cc1a7163b8e83d5a
MD5 06adf73a53e276c23d005ec34505f1e3
BLAKE2b-256 07b849ec6d43afd537f8fa8ab61977788036d8df6672d3bdde40809d2b717a12

See more details on using hashes here.

Provenance

The following attestation bundles were made for tuca-0.8.0-py3-none-any.whl:

Publisher: build.yml on dehesselle/tuca

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page