#[macro_use] extern crate log;
use std::collections::BTreeMap;
use kube::{
api::{Api, Reflector},
client::APIClient,
config,
};
#[derive(Debug)]
enum Decoded {
Utf8(String),
Bytes(Vec<u8>),
}
fn main() -> Result<(), failure::Error> {
std::env::set_var("RUST_LOG", "info,kube=trace");
env_logger::init();
let config = config::load_kube_config().expect("failed to load kubeconfig");
let client = APIClient::new(config);
let namespace = std::env::var("NAMESPACE").unwrap_or("default".into());
let resource = Api::v1Secret(client).within(&namespace);
let rf = Reflector::new(resource).init()?;
rf.read()?.into_iter().for_each(|(name, d)| {
let mut res = BTreeMap::new();
for (k, v) in d.data {
if let Ok(b) = std::str::from_utf8(&v.0) {
res.insert(k, Decoded::Utf8(b.to_string()));
}
else {
res.insert(k, Decoded::Bytes(v.0));
}
}
info!("Found secret {} with data: {:?}",
name,
res,
);
});
loop {
rf.poll()?;
let pods = rf.read()?.into_iter().map(|(name, _)| name).collect::<Vec<_>>();
info!("Current pods: {:?}", pods);
}
}