feat(homelab): start containerizing homelab binary
This commit is contained in:
@@ -92,7 +92,7 @@ routes = [
|
|||||||
service = "prometheus-stack-grafana",
|
service = "prometheus-stack-grafana",
|
||||||
port = 80,
|
port = 80,
|
||||||
private = true
|
private = true
|
||||||
},
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
[pihole]
|
[pihole]
|
||||||
@@ -109,4 +109,6 @@ extra_hosts = [
|
|||||||
|
|
||||||
[router]
|
[router]
|
||||||
host = "192.168.15.1:22"
|
host = "192.168.15.1:22"
|
||||||
|
user = "luca"
|
||||||
|
key_path = "/home/luca/.ssh/id_ed25519"
|
||||||
lease_file = "/var/dhcpd/var/db/dhcpd.leases"
|
lease_file = "/var/dhcpd/var/db/dhcpd.leases"
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ metadata:
|
|||||||
namespace: metallb-system
|
namespace: metallb-system
|
||||||
spec:
|
spec:
|
||||||
addresses:
|
addresses:
|
||||||
- 192.168.27.12-192.168.27.30
|
- 192.168.27.12-192.168.27.40
|
||||||
---
|
---
|
||||||
apiVersion: metallb.io/v1beta1
|
apiVersion: metallb.io/v1beta1
|
||||||
kind: L2Advertisement
|
kind: L2Advertisement
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ mod lease_parser;
|
|||||||
mod pihole;
|
mod pihole;
|
||||||
mod transport;
|
mod transport;
|
||||||
|
|
||||||
use std::collections::HashSet;
|
use std::path::{Path, PathBuf};
|
||||||
use std::path::Path;
|
use std::{collections::HashSet, env};
|
||||||
|
|
||||||
use anyhow::Context;
|
use anyhow::Context;
|
||||||
use clap::{CommandFactory, Parser};
|
use clap::{CommandFactory, Parser};
|
||||||
@@ -58,6 +58,8 @@ pub struct PiHoleConfig {
|
|||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize)]
|
||||||
pub struct RouterConfig {
|
pub struct RouterConfig {
|
||||||
host: String,
|
host: String,
|
||||||
|
user: String,
|
||||||
|
key_path: PathBuf,
|
||||||
lease_file: String,
|
lease_file: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,6 +71,10 @@ pub fn parse_config<T: AsRef<Path>>(path: T) -> anyhow::Result<Config> {
|
|||||||
Ok(toml::from_slice::<Config>(&bytes)?)
|
Ok(toml::from_slice::<Config>(&bytes)?)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn env_or<S: Into<String>>(key: &str, fallback: S) -> String {
|
||||||
|
env::var(key).unwrap_or_else(|_| fallback.into())
|
||||||
|
}
|
||||||
|
|
||||||
#[tokio::main(flavor = "current_thread")]
|
#[tokio::main(flavor = "current_thread")]
|
||||||
async fn main() -> anyhow::Result<()> {
|
async fn main() -> anyhow::Result<()> {
|
||||||
let cli = Cli::parse();
|
let cli = Cli::parse();
|
||||||
@@ -79,7 +85,8 @@ async fn main() -> anyhow::Result<()> {
|
|||||||
generate_routes(&config)?;
|
generate_routes(&config)?;
|
||||||
}
|
}
|
||||||
Some(Commands::SyncDNS {}) => {
|
Some(Commands::SyncDNS {}) => {
|
||||||
let config = parse_config("./config.toml")?;
|
let config_path = env_or("CONFIG_PATH", "./config.toml");
|
||||||
|
let config = parse_config(config_path)?;
|
||||||
let pihole_config = config
|
let pihole_config = config
|
||||||
.pihole
|
.pihole
|
||||||
.context("pihole configuration is necessary for syncing dns")?;
|
.context("pihole configuration is necessary for syncing dns")?;
|
||||||
@@ -96,7 +103,11 @@ async fn main() -> anyhow::Result<()> {
|
|||||||
.to_string();
|
.to_string();
|
||||||
|
|
||||||
let leases = tokio::task::spawn_blocking(move || -> anyhow::Result<Vec<Lease>> {
|
let leases = tokio::task::spawn_blocking(move || -> anyhow::Result<Vec<Lease>> {
|
||||||
let r = Router::new(SSHTransport::new(&router_config.host)?);
|
let r = Router::new(SSHTransport::new(
|
||||||
|
&router_config.host,
|
||||||
|
&router_config.user,
|
||||||
|
&router_config.key_path,
|
||||||
|
)?);
|
||||||
let leases = r
|
let leases = r
|
||||||
.dhcp_leases(&router_config.lease_file)?
|
.dhcp_leases(&router_config.lease_file)?
|
||||||
.into_iter()
|
.into_iter()
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ pub struct SSHTransport {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl SSHTransport {
|
impl SSHTransport {
|
||||||
pub fn new(host: &str) -> Result<Self> {
|
pub fn new(host: &str, user: &str, key_path: &Path) -> Result<Self> {
|
||||||
let stream = TcpStream::connect(host)?;
|
let stream = TcpStream::connect(host)?;
|
||||||
|
|
||||||
let mut s = Self {
|
let mut s = Self {
|
||||||
@@ -17,12 +17,7 @@ impl SSHTransport {
|
|||||||
};
|
};
|
||||||
s.session.set_tcp_stream(stream);
|
s.session.set_tcp_stream(stream);
|
||||||
s.session.handshake()?;
|
s.session.handshake()?;
|
||||||
s.session.userauth_pubkey_file(
|
s.session.userauth_pubkey_file(user, None, key_path, None)?;
|
||||||
"luca",
|
|
||||||
None,
|
|
||||||
Path::new("/home/luca/.ssh/id_ed25519"),
|
|
||||||
None,
|
|
||||||
)?;
|
|
||||||
Ok(s)
|
Ok(s)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user