cniguru 0.2.0

Troubleshooting tool for docker and kubernetes networking
use kubeclient;

#[derive(Debug, Fail)]
pub enum K8sError {
    #[fail(display = "{}", _0)]
    KubeclientError(String),

    #[fail(
        display = "kubernetes config not specified using $KUBECONFIG env var and could not open either $HOME/.kube/config or /etc/kubernetes/admin.conf"
    )]
    KubeconfigMissing,

    #[fail(display = "container has an unsupported runtime: {}", _0)]
    UnsupportedContainerRuntime(String),

    #[fail(display = "field {} has an unsupported format: {}", field, val)]
    UnsupportedFieldFormat { field: String, val: String },

    #[fail(display = "field {} is missing or is null", _0)]
    MissingOrNullField(String),
}

impl From<kubeclient::errors::Error> for K8sError {
    fn from(err: kubeclient::errors::Error) -> K8sError {
        K8sError::KubeclientError(err.to_string())
    }
}

#[derive(Debug, Fail)]
pub enum HostCmdError {
    #[fail(display = "command'{}' failed with code {}: {}", cmd, code, stderr)]
    CmdFailed {
        cmd: String,
        code: String,
        stderr: String,
    },

    #[fail(display = "invalid command: '{}'", _0)]
    CmdInvalid(String),
}

#[derive(Debug, Fail, Copy, Clone)]
#[fail(display = "failed to extract veth interfaces from the output of `ip link/addr show`")]
pub struct IpLinkOrAddrShowParseErr;

#[derive(Debug, Fail, Copy, Clone)]
#[fail(display = "failed to find a node veth interface with ifindex {}", _0)]
pub struct IntfMissingErr(pub u16);