selectel-mks-cli 0.1.0

CLI for the Selectel Managed Kubernetes Service.
use anyhow::{bail, Context, Result};
use selectel_mks::node;
use selectel_mks::Client;
use term_table::row::Row;
use term_table::table_cell::TableCell;
use term_table::{Table, TableStyle};

use crate::json;

pub(crate) fn get(
    client: &Client,
    output: &str,
    cluster_id: &str,
    nodegroup_id: &str,
    node_id: &str,
) -> Result<()> {
    let node = client
        .get_node(cluster_id, nodegroup_id, node_id)
        .context("Failed to get node")?;

    match output {
        "table" => get_print_table(&node),
        "json" => json::print_json(node)?,
        _ => bail!("Unknown output format"),
    };

    Ok(())
}

fn get_print_table(node: &node::schemas::Node) {
    let updated_at = match &node.updated_at {
        Some(time) => time.to_rfc3339(),
        None => String::new(),
    };

    let mut table = Table::new();
    table.style = TableStyle::simple();
    table.separate_rows = false;

    table.add_row(Row::new(vec![
        TableCell::new("id"),
        TableCell::new(&node.id),
    ]));

    table.add_row(Row::new(vec![
        TableCell::new("created_at"),
        TableCell::new(&node.created_at.to_rfc3339()),
    ]));

    table.add_row(Row::new(vec![
        TableCell::new("updated_at"),
        TableCell::new(&updated_at),
    ]));

    table.add_row(Row::new(vec![
        TableCell::new("hostname"),
        TableCell::new(&node.hostname),
    ]));

    table.add_row(Row::new(vec![
        TableCell::new("ip"),
        TableCell::new(&node.ip),
    ]));

    table.add_row(Row::new(vec![
        TableCell::new("nodegroup_id"),
        TableCell::new(&node.nodegroup_id),
    ]));

    println!("{}", table.render());
}

pub(crate) fn reinstall(
    client: &Client,
    cluster_id: &str,
    nodegroup_id: &str,
    node_id: &str,
) -> Result<()> {
    client
        .reinstall_node(cluster_id, nodegroup_id, node_id)
        .context("Failed to reinstall node")?;

    Ok(())
}