anchor 0.1.3

A Rust library for managing Docker container clusters through declarative JSON manifests
Documentation
use anchor::prelude::{Client, MountType, ResourceStatus, get_ecr_credentials};
use std::error::Error;

const IMAGE_REF: &str = "939027885851.dkr.ecr.eu-west-2.amazonaws.com/uncertainty-engine-add-node:latest";
const CONTAINER_NAME: &str = "node-add";
const PORT_MAPPINGS: &[(u16, u16)] = &[(8000, 8000)];
const ENV_VARS: &[(&str, &str)] = &[];
const MOUNTS: &[MountType] = &[];

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    let credentials = get_ecr_credentials().await?;
    let client = Client::new(credentials).await?;

    let status = client.get_resource_status(IMAGE_REF, CONTAINER_NAME).await?;
    match status {
        ResourceStatus::Missing => {
            println!("Pulling image...");
            client.pull_image(IMAGE_REF).await?;
        }
        ResourceStatus::Available => {
            println!("Building container...");
            client
                .build_container(IMAGE_REF, CONTAINER_NAME, PORT_MAPPINGS, ENV_VARS, MOUNTS)
                .await?;
        }
        ResourceStatus::Built => {
            println!("Starting container...");
            client.start_container(CONTAINER_NAME).await?;
        }
        ResourceStatus::Running => {
            println!("Container is already running.");
        }
    }

    Ok(())
}