elf_utils 0.1.4

elf_rust utils
Documentation
use std::env;

use hashicorp_vault as vault;
use log::{error, info};

pub fn init() -> Result<(), String> {
    let host_res = env::var("VAULT_ADDRESS");
    let key_res = env::var("VAULT_KEY");
    let token_res = env::var("VAULT_TOKEN");
    if host_res.is_err() || key_res.is_err() && token_res.is_err() {
        return Err("not found env: VAULT_ADDRESS,VAULT_KEY,VAULT_TOKEN".to_string());
    }
    let key_str = key_res.unwrap();
    let host_str = host_res.unwrap();
    let token_str = token_res.unwrap();
    let client_res = vault::Client::new(host_str.clone(), token_str);
    match client_res {
        Ok(mut client) => {
            let res = client.renew();
            if res.is_err() {
                error!("renew failed :{:?}", res.err().unwrap());
                return Ok(());
            }
            let mut key_data: Vec<&str> = key_str.split('/').collect();
            info!("key_data: {:?}", key_data);
            let bk = key_data.first().unwrap().to_string();
            info!("bk: {:?}", bk);
            client.secret_backend(bk);
            key_data.remove(0); //kv
            key_data.remove(0); //data
            let key_str = key_data.join("/");
            info!("key_str: {:?}", key_str);
            if let Ok(res) = client.get_secret_wrapped(key_str, "5m") {
                let wrapping_token = res.wrap_info.unwrap().token;
                let c2 = vault::Client::new_no_lookup(host_str, wrapping_token).unwrap();
                let res = c2.get_unwrapped_response().unwrap();
                for (k, v) in res.data.unwrap() {
                    env::set_var(k, v)
                }
            } else {
                error!("val get key failed :{:?}", res.err().unwrap());
            }
        }
        Err(e) => {
            return Err(format!("vault client err {}", e));
        }
    }
    Ok(())
}