1 Commits

Author SHA1 Message Date
Dreaded_X 83f7d33efa fix: No default value for advertise routes
Committed / committed (pull_request) Successful in 41s
CI / cargo shear (pull_request) Successful in 5m57s
CI / prek (pull_request) Successful in 6m22s
2026-04-13 03:05:35 +02:00
7 changed files with 19 additions and 51 deletions
-23
View File
@@ -7,29 +7,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [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
### <!-- 2 -->Bug Fixes
- No default value for advertise routes
## [0.1.0](https://git.huizinga.dev/infra/crete/releases/tag/v0.1.0) - 2026-04-07
### <!-- 0 -->Features
Generated
+1 -1
View File
@@ -214,7 +214,7 @@ dependencies = [
[[package]]
name = "crete"
version = "0.1.3"
version = "0.1.0"
dependencies = [
"clap",
"clap_complete",
+1 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "crete"
version = "0.1.3"
version = "0.1.0"
edition = "2024"
default-run = "crete"
publish = ["infra"]
+5 -3
View File
@@ -140,11 +140,12 @@
"array",
"null"
],
"default": null,
"items": {
"type": "string",
"format": "ipv4"
}
},
"maxItems": 2,
"minItems": 2
},
"gateway": {
"type": [
@@ -308,7 +309,8 @@
"type": [
"boolean",
"null"
]
],
"default": null
},
"authKey": {
"anyOf": [
+5 -3
View File
@@ -136,11 +136,12 @@
"array",
"null"
],
"default": null,
"items": {
"type": "string",
"format": "ipv4"
}
},
"maxItems": 2,
"minItems": 2
},
"gateway": {
"type": [
@@ -213,7 +214,8 @@
"type": [
"boolean",
"null"
]
],
"default": null
},
"authKey": {
"anyOf": [
+5 -11
View File
@@ -1,8 +1,8 @@
use std::net::Ipv4Addr;
use std::ops::Deref;
use std::path::{Path, PathBuf};
use std::str::FromStr;
use minijinja::value::ViaDeserialize;
use minijinja::{AutoEscape, Environment, path_loader};
use walkdir::WalkDir;
@@ -16,13 +16,6 @@ pub struct PathEnvironment<'a> {
path: PathBuf,
}
fn apply_netmask(
ip: ViaDeserialize<Ipv4Addr>,
netmask: ViaDeserialize<Ipv4Addr>,
) -> Result<String, minijinja::Error> {
Ok((*ip & *netmask).to_string())
}
impl<'a> PathEnvironment<'a> {
pub fn new(path: &Path) -> Self {
let mut env = Environment::new();
@@ -34,7 +27,10 @@ impl<'a> PathEnvironment<'a> {
env.set_auto_escape_callback(|_| AutoEscape::None);
// Add filters
env.add_filter("to_prefix", |netmask: ViaDeserialize<Ipv4Addr>| {
env.add_filter("to_prefix", |netmask: String| {
let netmask = Ipv4Addr::from_str(&netmask).map_err(|err| {
minijinja::Error::new(minijinja::ErrorKind::InvalidOperation, err.to_string())
})?;
let mask = netmask.to_bits();
let prefix = mask.leading_ones();
@@ -48,8 +44,6 @@ impl<'a> PathEnvironment<'a> {
}
});
env.add_function("apply_netmask", apply_netmask);
// Helper function for getting the path to kubeconfig files
env.add_filter("kubeconfig", move |names: Vec<String>| {
names
+2 -9
View File
@@ -40,6 +40,7 @@ enum NodeArch {
#[serde(rename_all = "camelCase", deny_unknown_fields)]
struct Tailscale {
auth_key: Secret,
#[serde(default)]
advertise_routes: bool,
#[serde(default)]
server: Option<String>,
@@ -53,8 +54,7 @@ struct Network {
ip: Ipv4Addr,
netmask: Ipv4Addr,
gateway: Ipv4Addr,
#[serde(default)]
dns: Option<Vec<Ipv4Addr>>,
dns: [Ipv4Addr; 2],
#[optional_rename(OptionalTailscale)]
#[optional_wrap]
tailscale: Tailscale,
@@ -129,13 +129,6 @@ impl Node {
// Sadly we have to this manually
// TODO: Find a better way of doing this
let default = OptionalNodeDeserialize {
network: Some(OptionalNetwork {
tailscale: Some(OptionalTailscale {
advertise_routes: Some(false),
..Default::default()
}),
..Default::default()
}),
patches: Some(OptionalPatches {
all: Some(vec![]),
control_plane: Some(vec![]),