oct-cloud

Crates.iooct-cloud
lib.rsoct-cloud
version0.8.0
created_at2025-08-22 05:21:12.597221+00
updated_at2026-01-22 02:25:54.19353+00
descriptionopencloudtool (oct)
homepagehttps://opencloudtool.com
repositoryhttps://github.com/opencloudtool/opencloudtool
max_upload_size
id1805928
size310,935
Vladimir Minev (minev-dev)

documentation

https://opencloudtool.com/docs

README

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

Design

High-level

OpenCloudTool Design

Decentralized oct

Infrastructure layers

Infrastructure layers

  • Base - base cloud resources (networking, VMs, IAM, etc.).
  • oct-ctl:
    • Consensus - Raft-based consensus mechanism to maintain a distributed state of the infrastructure.
    • Management - management operations to control the infrastructure resources and user services.
    • Service Discovery - DNS service to let the service communicate using domain name and hide the exact IPs.
  • Workload - user services deployed along with proxy sidecars to implement service mesh approach.

Infrastructure lifecycle

Infrastructure lifecycle

  • Genesis - step to setup the initial infrastructure to deploy a leader node that'll control everything.
  • Life - the main period of infrastructure lifecycle where the leader is already deployed and all main operations with infrastructure and user services happen.
  • Afterlife - the final step of the whole infrastructure destruction.

Node

Node

Node can play the following roles:

  • Leader - the main node that controls all infrastructure components (follower nodes and underlying infrastructure for them), the user services on the node itself and sends commands to the follower nodes to CRUD user services.
  • Follower - the node type that accepts commands from the leader to CRUD user services. The follower node can become a leader if the current leader is not available anymore, according to the Raft consensus algorithm.

User-cloud interaction

User-cloud

Deployment process

The diagrams try to follow C4Model notation at component level.

L1 infrastructure (cloud resources)

In the current implementation Infra Graph is hard-coded. It'll be updated to be adaptive to the User Services Graph at L2.

L1 infrastructure

L2 infrastructure (user services)

L2 infrastructure

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

Commit count: 458

cargo fmt