use std::fs;
use std::path::Path;
use async_trait::async_trait;
use serde::Deserialize;
use tracing::{debug, error, Level};
use crate::Provider;
const VENDOR_FILE: &str = "/sys/class/dmi/id/chassis_asset_tag";
pub const IDENTIFIER: &str = "oci";
pub struct OCI;
#[async_trait]
impl Provider for OCI {
async fn identify(&self) -> bool {
crate::identify(self, IDENTIFIER).await
}
async fn check_metadata_server(&self) -> bool {
let span = tracing::span!(Level::TRACE, "check_metadata_server");
let _enter = span.enter();
debug!("Metadata server checking currently unimplemented");
false
}
async fn check_vendor_file(&self) -> bool {
let span = tracing::span!(Level::TRACE, "check_vendor_file");
let _enter = span.enter();
debug!("Checking {} vendor file: {}", IDENTIFIER, VENDOR_FILE);
let vendor_file = Path::new(VENDOR_FILE);
if vendor_file.is_file() {
return match fs::read_to_string(vendor_file) {
Ok(content) => content.contains("OracleCloud"),
Err(err) => {
error!("Error reading file: {:?}", err);
false
}
};
}
false
}
}