mirror of
https://github.com/Lumither/nocturne.git
synced 2026-10-17 10:26:21 +00:00
draft(daemon) module init
This commit is contained in:
8 files changed
+123
No files matched your search
@@ -0,0 +1,3 @@
|
|||||||
|
target/
|
||||||
|
|
||||||
|
Cargo.lock
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
[package]
|
||||||
|
name = "daemon"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2024"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
clap = { version = "4.5.47", features = ["derive"] }
|
||||||
|
containerd-client = "0.8.0"
|
||||||
|
tokio = { version = "1.45.1", features = ["macros", "rt-multi-thread"] }
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
.PHONY: rebuild
|
||||||
|
rebuild:
|
||||||
|
cargo clean
|
||||||
|
cargo build
|
||||||
|
|
||||||
|
.PHONY: rebuild-release
|
||||||
|
rebuild-release:
|
||||||
|
cargo clean
|
||||||
|
cargo build -r
|
||||||
|
|
||||||
|
.PHONY: run
|
||||||
|
run:
|
||||||
|
sudo ./target/debug/daemon
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
mod pull;
|
||||||
Whitespace-only changes.
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"images": [
|
||||||
|
{
|
||||||
|
"id": "",
|
||||||
|
"image": ""
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Whitespace-only changes.
@@ -0,0 +1,89 @@
|
|||||||
|
mod actions;
|
||||||
|
mod config;
|
||||||
|
|
||||||
|
use clap::Parser;
|
||||||
|
use containerd_client::tonic::Request;
|
||||||
|
use containerd_client::{
|
||||||
|
connect,
|
||||||
|
services::v1::{transfer_client::TransferClient, TransferOptions, TransferRequest},
|
||||||
|
to_any,
|
||||||
|
types::transfer::OciRegistry,
|
||||||
|
types::transfer::{ImageStore, UnpackConfiguration},
|
||||||
|
types::Platform,
|
||||||
|
with_namespace,
|
||||||
|
};
|
||||||
|
use std::env::consts;
|
||||||
|
|
||||||
|
#[derive(Parser, Debug)]
|
||||||
|
struct Args {
|
||||||
|
/// containerd namespace
|
||||||
|
#[arg(short, long, default_value = "nocturne")]
|
||||||
|
namespace: String,
|
||||||
|
|
||||||
|
/// containerd socket
|
||||||
|
#[arg(short, long, default_value = "/run/containerd/containerd.sock")]
|
||||||
|
socket: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
const IMAGE: &str = "docker.io/library/alpine:latest";
|
||||||
|
|
||||||
|
#[tokio::main]
|
||||||
|
async fn main() {
|
||||||
|
let args = Args::parse();
|
||||||
|
|
||||||
|
let arch = match consts::ARCH {
|
||||||
|
"x86_64" => "amd64",
|
||||||
|
"aarch64" => "arm64",
|
||||||
|
_ => consts::ARCH,
|
||||||
|
};
|
||||||
|
|
||||||
|
dbg!(&args);
|
||||||
|
|
||||||
|
let channel = connect(&args.socket).await.expect("failed to bind socket");
|
||||||
|
let mut client = TransferClient::new(channel.clone());
|
||||||
|
|
||||||
|
let registry = OciRegistry {
|
||||||
|
reference: IMAGE.to_string(),
|
||||||
|
resolver: Default::default(),
|
||||||
|
};
|
||||||
|
|
||||||
|
let platform = Platform {
|
||||||
|
os: "linux".to_string(),
|
||||||
|
architecture: arch.to_string(),
|
||||||
|
variant: "".to_string(),
|
||||||
|
os_version: "".to_string(),
|
||||||
|
};
|
||||||
|
|
||||||
|
let destination = ImageStore {
|
||||||
|
name: IMAGE.to_string(),
|
||||||
|
platforms: vec![platform.clone()],
|
||||||
|
unpacks: vec![UnpackConfiguration {
|
||||||
|
platform: Some(platform),
|
||||||
|
..Default::default()
|
||||||
|
}],
|
||||||
|
..Default::default()
|
||||||
|
};
|
||||||
|
|
||||||
|
let anys = to_any(®istry);
|
||||||
|
let anyd = to_any(&destination);
|
||||||
|
|
||||||
|
println!(
|
||||||
|
"Pulling image for linux/{} from source: {:?}",
|
||||||
|
arch, registry
|
||||||
|
);
|
||||||
|
|
||||||
|
let request = TransferRequest {
|
||||||
|
source: Some(anys),
|
||||||
|
destination: Some(anyd),
|
||||||
|
options: Some(TransferOptions {
|
||||||
|
..Default::default()
|
||||||
|
}),
|
||||||
|
};
|
||||||
|
// let request = Request::new(request);
|
||||||
|
let req = with_namespace!(request, args.namespace);
|
||||||
|
|
||||||
|
client
|
||||||
|
.transfer(req)
|
||||||
|
.await
|
||||||
|
.expect("unable to transfer image");
|
||||||
|
}
|
||||||
Reference in new issue
Block a user