Skip to main content

Crate armada_client

Crate armada_client 

Source
Expand description

Rust client for the Armada batch-job scheduler.

This crate provides an async gRPC client for submitting and monitoring batch jobs on an Armada cluster. It is built on top of tonic and exposes a small, ergonomic API that can be shared across async tasks without locking.

§Quick start

use armada_client::k8s::io::api::core::v1::{Container, PodSpec};
use armada_client::{
    ArmadaClient, JobRequestItemBuilder, JobSubmitRequest, StaticTokenProvider,
};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 1. Connect (plaintext). Use `connect_tls` for production clusters.
    let client = ArmadaClient::connect(
        "http://localhost:50051",
        StaticTokenProvider::new("my-token"),
    )
    .await?;

    // 2. Build a job item — pod spec required before `.build()` compiles.
    let pod_spec = PodSpec {
        containers: vec![Container {
            name: Some("main".into()),
            image: Some("busybox:latest".into()),
            command: vec!["echo".into()],
            args: vec!["hello".into()],
            ..Default::default()
        }],
        ..Default::default()
    };

    let item = JobRequestItemBuilder::new()
        .namespace("default")
        .priority(1.0)
        .pod_spec(pod_spec)
        .build();

    // 3. Submit.
    let response = client
        .submit(JobSubmitRequest {
            queue: "my-queue".into(),
            job_set_id: "my-job-set".into(),
            job_request_items: vec![item],
        })
        .await?;

    for r in &response.job_response_items {
        println!("job_id={}", r.job_id);
    }
    Ok(())
}

§Features

FeatureHow to use
Plaintext connectionArmadaClient::connect
TLS connection (system roots)ArmadaClient::connect_tls
Per-call timeoutArmadaClient::with_timeout
Job submissionArmadaClient::submit
Event streamingArmadaClient::watch
Static bearer tokenStaticTokenProvider
Custom auth (OIDC, OAuth2…)Implement TokenProvider
Compile-time safe job builderJobRequestItemBuilder

§Kubernetes proto types

Armada job specs embed Kubernetes PodSpec and related types. These are generated from the upstream k8s protobufs and re-exported under the k8s module, mirroring the proto package hierarchy:

use armada_client::k8s::io::api::core::v1::{Container, PodSpec, ResourceRequirements};
use armada_client::k8s::io::apimachinery::pkg::api::resource::Quantity;

§Cloning and concurrent use

ArmadaClient is Clone. All clones share the same underlying connection pool — cloning is cheap and the correct way to use the client across multiple tasks:

let client = ArmadaClient::connect("http://localhost:50051", StaticTokenProvider::new("tok"))
    .await?;

let c1 = client.clone();
let c2 = client.clone();
tokio::join!(
    async move { /* use c1 */ },
    async move { /* use c2 */ },
);

Re-exports§

pub use api::EventMessage;
pub use api::EventStreamMessage;
pub use api::JobSubmitRequest;
pub use api::JobSubmitRequestItem;
pub use api::JobSubmitResponse;
pub use auth::BasicAuthProvider;
pub use auth::StaticTokenProvider;
pub use auth::TokenProvider;
pub use builder::JobRequestItemBuilder;
pub use client::ArmadaClient;
pub use error::Error;

Modules§

api
auth
builder
client
error
k8s

Type Aliases§

BoxStream
An owned dynamically typed Stream for use in cases where you can’t statically type your result or need to add some indirection.