mirror of
https://github.com/edera-dev/krata.git
synced 2025-08-04 13:41:31 +00:00
hypha: implement basic container init
This commit is contained in:
@ -8,12 +8,17 @@ use uuid::Uuid;
|
||||
|
||||
pub struct ConfigBlock<'a> {
|
||||
pub image_info: &'a ImageInfo,
|
||||
pub config_bundle: Option<&'a str>,
|
||||
pub file: PathBuf,
|
||||
pub dir: PathBuf,
|
||||
}
|
||||
|
||||
impl ConfigBlock<'_> {
|
||||
pub fn new<'a>(uuid: &Uuid, image_info: &'a ImageInfo) -> Result<ConfigBlock<'a>> {
|
||||
pub fn new<'a>(
|
||||
uuid: &Uuid,
|
||||
image_info: &'a ImageInfo,
|
||||
config_bundle: Option<&'a str>,
|
||||
) -> Result<ConfigBlock<'a>> {
|
||||
let mut dir = std::env::temp_dir().clone();
|
||||
dir.push(format!("hypha-cfg-{}", uuid));
|
||||
fs::create_dir_all(&dir)?;
|
||||
@ -21,12 +26,17 @@ impl ConfigBlock<'_> {
|
||||
file.push("config.squashfs");
|
||||
Ok(ConfigBlock {
|
||||
image_info,
|
||||
config_bundle,
|
||||
file,
|
||||
dir,
|
||||
})
|
||||
}
|
||||
|
||||
pub fn build(&self) -> Result<()> {
|
||||
let config_bundle_content = match self.config_bundle {
|
||||
None => None,
|
||||
Some(path) => Some(fs::read(path)?),
|
||||
};
|
||||
let manifest = self.image_info.config.to_string()?;
|
||||
let mut writer = FilesystemWriter::default();
|
||||
writer.push_dir(
|
||||
@ -48,6 +58,18 @@ impl ConfigBlock<'_> {
|
||||
mtime: 0,
|
||||
},
|
||||
)?;
|
||||
if let Some(config_bundle_content) = config_bundle_content.as_ref() {
|
||||
writer.push_file(
|
||||
config_bundle_content.as_slice(),
|
||||
"/bundle",
|
||||
NodeHeader {
|
||||
permissions: 384,
|
||||
uid: 0,
|
||||
gid: 0,
|
||||
mtime: 0,
|
||||
},
|
||||
)?;
|
||||
}
|
||||
let mut file = File::create(&self.file)?;
|
||||
writer.write(&mut file)?;
|
||||
Ok(())
|
||||
|
@ -63,6 +63,7 @@ impl Controller {
|
||||
&mut self,
|
||||
kernel_path: &str,
|
||||
initrd_path: &str,
|
||||
config_bundle_path: Option<&str>,
|
||||
image: &str,
|
||||
vcpus: u32,
|
||||
mem: u64,
|
||||
@ -70,7 +71,7 @@ impl Controller {
|
||||
let uuid = Uuid::new_v4();
|
||||
let name = format!("hypha-{uuid}");
|
||||
let image_info = self.compile(image)?;
|
||||
let cfgblk = ConfigBlock::new(&uuid, &image_info)?;
|
||||
let cfgblk = ConfigBlock::new(&uuid, &image_info, config_bundle_path)?;
|
||||
cfgblk.build()?;
|
||||
|
||||
let image_squashfs_path = image_info
|
||||
@ -110,6 +111,7 @@ impl Controller {
|
||||
writable: false,
|
||||
},
|
||||
],
|
||||
filesystems: vec![],
|
||||
extra_keys: vec![
|
||||
("hypha/uuid".to_string(), uuid.to_string()),
|
||||
(
|
||||
|
Reference in New Issue
Block a user