Thanks to visit codestin.com
Credit goes to lib.rs

3 releases (breaking)

Uses new Rust 2024

0.7.0 Nov 29, 2025
0.6.1 Nov 16, 2025
0.4.1 Aug 22, 2025

#550 in Command line utilities

Apache-2.0

85KB
1K SLoC

Header

opencloudtool

Actions status codecov

A tool to hide the complexity of the cloud.

Install oct-cli

curl -LsSf https://repo.opencloudtool.com/install.sh | sh

or

wget -qO- https://repo.opencloudtool.com/install.sh | sh

Install as Python library

pip install opencloudtool

See the Python library README for details: crates/oct-py/README.md

Log in to AWS

Basic login (docs):

aws configure

Using AWS SSO (docs):

aws configure sso

Deployment Examples

High Level Design

OpenCloudTool Design

Versions Design

Each version of OpenCloudTool has a mini-project to prove the design and implementation.

v0.7.0 "VMs deployment based on user services resources"

v0.7.0

Fixed infra graph

Shows the current state of the graph from crates/oct-cloud/src/infra.

The diagram can be moved to the infra-specific folder later, keeping it here for now to have all the design documents in one place.

Fixed infra graph

Development

Command examples

Install pre-commit hooks

pre-commit install

Build project

 cargo build

Run deploy command

 cd dir/with/oct.toml
 cargo run -p oct-cli deploy

Run destroy command

 cargo run -p oct-cli destroy

Show all available commands

 cargo run -p oct-cli --help

Show all available parameters for command

 cargo run -p oct-cli command --help

For example:

 cargo run -p oct-cli deploy --help

Writing tests

[WIP] Main principles:

  • Each module provides its own mocks in a public mocks module
...main code...

pub mod mocks {
    ...mocks...
}

#[cfg(test)]
mod tests {
    ...tests...
}
  • Each module tests cover only the functionality in the module
  • If a module uses external modules, they are mocked using mocks provided by the imported module's mocks module
...other imports...

#[cfg(test)]
use module::mocks::MockModule as Module;
#[cfg(not(test))]
use module::Module;

...main code...

Imports ordering

When importing modules, the following order should be used:

  • Standard library imports
  • Third-party imports
  • Local crate imports
use std::fs;

use serde::{Deserialize, Serialize};

use crate::aws::types::InstanceType;

Dev tools

Machete

Removes unused dependencies

cargo install cargo-machete
cargo machete

Cargo Features Manager

Removes unused features

cargo install cargo-features-manager
cargo features prune

Profile building time

Produces HTML file with building time report. Can be found in target/cargo-timings.html

cargo build -p PACKAGE_NAME --release --timings

Pricing comparison

This section compares the cost of running a set of services in a cloud with different approaches which do not require the end user to manage underlying infrastructure (serverless).

Note that OpenCloudTool is a free to use open-source tool and there is no charge for using it.

Simple REST service

Main components:

  • Django REST service (0.5 vCPU, 1GB RAM)
  • Celery worker (0.5 vCPU, 1GB RAM)
  • Redis (0.5 vCPU, 1GB RAM)
  • Postgres (0.5 vCPU, 1GB RAM)
  • Load Balancer (nginx, ELB, etc.)

AWS ECS Fargate

  • 2 vCPU (1 vCPU per hour - $0.04048) - $61.5 per month
  • 4 GB RAM (1 GB RAM per hour - $0.004445) - $13.5 per month
  • Load Balancer ($0.0225 per hour) - $17 per month

Total: $92 per month

Single EC2 instance managed by OpenCloudTool

  • 1 EC2 t4g.medium instance ($0.0336 per hour): $25.5 per month

Total: $25.5 per month

Repo stats

Alt

Dependencies

~146MB
~2M SLoC