6 Commits

Author SHA1 Message Date
Release-plz 8290896f9d chore(release): Release v0.1.3
Committed / committed (pull_request) Successful in 37s
CI / cargo shear (pull_request) Successful in 7m5s
CI / prek (pull_request) Successful in 8m39s
Release-plz / Release-plz PR (push) Successful in 8m24s
Release-plz / Release-plz Release (push) Successful in 9m15s
Audit / cargo audit (push) Successful in 5m49s
CI / cargo shear (push) Successful in 5m52s
CI / prek (push) Successful in 7m46s
Release / Arch Linux (push) Successful in 8m56s
Signed-off-by: Release-plz <release-plz@noreply.huizinga.dev>
2026-04-21 03:23:16 +00:00
Dreaded_X f51746c5df feat: Add function that applies netmask to ip
Audit / cargo audit (push) Successful in 7m8s
Committed / committed (pull_request) Successful in 42s
CI / cargo shear (pull_request) Successful in 6m11s
CI / prek (pull_request) Successful in 7m43s
Release-plz / Release-plz Release (push) Successful in 9m20s
CI / prek (push) Successful in 9m22s
CI / cargo shear (push) Successful in 9m26s
Release-plz / Release-plz PR (push) Successful in 3m7s
2026-04-21 04:49:31 +02:00
Dreaded_X ca72d08cc1 refactor: Use ViaDeserialize to convert ip address 2026-04-21 04:49:30 +02:00
Release-plz 6a7ab1f9d5 chore(release): Release v0.1.2
CI / cargo shear (pull_request) Successful in 9m24s
CI / prek (pull_request) Successful in 11m0s
Committed / committed (pull_request) Successful in 1m36s
Release-plz / Release-plz PR (push) Successful in 9m26s
Release-plz / Release-plz Release (push) Successful in 12m6s
Audit / cargo audit (push) Successful in 4m5s
CI / cargo shear (push) Successful in 7m57s
Release / Arch Linux (push) Successful in 9m42s
CI / prek (push) Successful in 4m28s
Signed-off-by: Release-plz <release-plz@noreply.huizinga.dev>
2026-04-17 19:55:20 +00:00
Dreaded_X f7e4a2d545 feat: Make dns optional
Committed / committed (pull_request) Successful in 47s
CI / prek (pull_request) Successful in 6m31s
CI / cargo shear (pull_request) Successful in 7m58s
CI / cargo shear (push) Successful in 7m45s
Release-plz / Release-plz Release (push) Successful in 9m39s
CI / prek (push) Successful in 10m6s
Release-plz / Release-plz PR (push) Successful in 4m47s
2026-04-17 21:32:19 +02:00
Dreaded_X 7142ff0fa3 feat: Allow more than two dns entries 2026-04-17 20:59:42 +02:00
7 changed files with 36 additions and 14 deletions
+17
View File
@@ -7,6 +7,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased] ## [Unreleased]
## [0.1.3](https://git.huizinga.dev/infra/crete/compare/v0.1.2...v0.1.3) - 2026-04-21
### <!-- 0 -->Features
- Add function that applies netmask to ip
### <!-- 3 -->Refactor
- Use ViaDeserialize to convert ip address
## [0.1.2](https://git.huizinga.dev/infra/crete/compare/v0.1.1...v0.1.2) - 2026-04-17
### <!-- 0 -->Features
- Make dns optional
- Allow more than two dns entries
## [0.1.1](https://git.huizinga.dev/infra/crete/compare/v0.1.0...v0.1.1) - 2026-04-13 ## [0.1.1](https://git.huizinga.dev/infra/crete/compare/v0.1.0...v0.1.1) - 2026-04-13
### <!-- 2 -->Bug Fixes ### <!-- 2 -->Bug Fixes
Generated
+1 -1
View File
@@ -214,7 +214,7 @@ dependencies = [
[[package]] [[package]]
name = "crete" name = "crete"
version = "0.1.1" version = "0.1.3"
dependencies = [ dependencies = [
"clap", "clap",
"clap_complete", "clap_complete",
+1 -1
View File
@@ -1,6 +1,6 @@
[package] [package]
name = "crete" name = "crete"
version = "0.1.1" version = "0.1.3"
edition = "2024" edition = "2024"
default-run = "crete" default-run = "crete"
publish = ["infra"] publish = ["infra"]
+2 -3
View File
@@ -140,12 +140,11 @@
"array", "array",
"null" "null"
], ],
"default": null,
"items": { "items": {
"type": "string", "type": "string",
"format": "ipv4" "format": "ipv4"
}, }
"maxItems": 2,
"minItems": 2
}, },
"gateway": { "gateway": {
"type": [ "type": [
+2 -3
View File
@@ -136,12 +136,11 @@
"array", "array",
"null" "null"
], ],
"default": null,
"items": { "items": {
"type": "string", "type": "string",
"format": "ipv4" "format": "ipv4"
}, }
"maxItems": 2,
"minItems": 2
}, },
"gateway": { "gateway": {
"type": [ "type": [
+11 -5
View File
@@ -1,8 +1,8 @@
use std::net::Ipv4Addr; use std::net::Ipv4Addr;
use std::ops::Deref; use std::ops::Deref;
use std::path::{Path, PathBuf}; use std::path::{Path, PathBuf};
use std::str::FromStr;
use minijinja::value::ViaDeserialize;
use minijinja::{AutoEscape, Environment, path_loader}; use minijinja::{AutoEscape, Environment, path_loader};
use walkdir::WalkDir; use walkdir::WalkDir;
@@ -16,6 +16,13 @@ pub struct PathEnvironment<'a> {
path: PathBuf, path: PathBuf,
} }
fn apply_netmask(
ip: ViaDeserialize<Ipv4Addr>,
netmask: ViaDeserialize<Ipv4Addr>,
) -> Result<String, minijinja::Error> {
Ok((*ip & *netmask).to_string())
}
impl<'a> PathEnvironment<'a> { impl<'a> PathEnvironment<'a> {
pub fn new(path: &Path) -> Self { pub fn new(path: &Path) -> Self {
let mut env = Environment::new(); let mut env = Environment::new();
@@ -27,10 +34,7 @@ impl<'a> PathEnvironment<'a> {
env.set_auto_escape_callback(|_| AutoEscape::None); env.set_auto_escape_callback(|_| AutoEscape::None);
// Add filters // Add filters
env.add_filter("to_prefix", |netmask: String| { env.add_filter("to_prefix", |netmask: ViaDeserialize<Ipv4Addr>| {
let netmask = Ipv4Addr::from_str(&netmask).map_err(|err| {
minijinja::Error::new(minijinja::ErrorKind::InvalidOperation, err.to_string())
})?;
let mask = netmask.to_bits(); let mask = netmask.to_bits();
let prefix = mask.leading_ones(); let prefix = mask.leading_ones();
@@ -44,6 +48,8 @@ impl<'a> PathEnvironment<'a> {
} }
}); });
env.add_function("apply_netmask", apply_netmask);
// Helper function for getting the path to kubeconfig files // Helper function for getting the path to kubeconfig files
env.add_filter("kubeconfig", move |names: Vec<String>| { env.add_filter("kubeconfig", move |names: Vec<String>| {
names names
+2 -1
View File
@@ -53,7 +53,8 @@ struct Network {
ip: Ipv4Addr, ip: Ipv4Addr,
netmask: Ipv4Addr, netmask: Ipv4Addr,
gateway: Ipv4Addr, gateway: Ipv4Addr,
dns: [Ipv4Addr; 2], #[serde(default)]
dns: Option<Vec<Ipv4Addr>>,
#[optional_rename(OptionalTailscale)] #[optional_rename(OptionalTailscale)]
#[optional_wrap] #[optional_wrap]
tailscale: Tailscale, tailscale: Tailscale,