Compare commits
7 Commits
v0.1.0
...
f51746c5df
| Author | SHA1 | Date | |
|---|---|---|---|
|
f51746c5df
|
|||
|
ca72d08cc1
|
|||
| 6a7ab1f9d5 | |||
|
f7e4a2d545
|
|||
|
7142ff0fa3
|
|||
| afcca9eb47 | |||
|
c76b0e6ade
|
@@ -7,6 +7,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
## [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.1.0](https://git.huizinga.dev/infra/crete/releases/tag/v0.1.0) - 2026-04-07
|
||||||
|
|
||||||
### <!-- 0 -->Features
|
### <!-- 0 -->Features
|
||||||
|
|||||||
Generated
+1
-1
@@ -214,7 +214,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "crete"
|
name = "crete"
|
||||||
version = "0.1.0"
|
version = "0.1.2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap",
|
"clap",
|
||||||
"clap_complete",
|
"clap_complete",
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "crete"
|
name = "crete"
|
||||||
version = "0.1.0"
|
version = "0.1.2"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
default-run = "crete"
|
default-run = "crete"
|
||||||
publish = ["infra"]
|
publish = ["infra"]
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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
|
||||||
|
|||||||
+9
-1
@@ -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,
|
||||||
@@ -128,6 +129,13 @@ impl Node {
|
|||||||
// Sadly we have to this manually
|
// Sadly we have to this manually
|
||||||
// TODO: Find a better way of doing this
|
// TODO: Find a better way of doing this
|
||||||
let default = OptionalNodeDeserialize {
|
let default = OptionalNodeDeserialize {
|
||||||
|
network: Some(OptionalNetwork {
|
||||||
|
tailscale: Some(OptionalTailscale {
|
||||||
|
advertise_routes: Some(false),
|
||||||
|
..Default::default()
|
||||||
|
}),
|
||||||
|
..Default::default()
|
||||||
|
}),
|
||||||
patches: Some(OptionalPatches {
|
patches: Some(OptionalPatches {
|
||||||
all: Some(vec![]),
|
all: Some(vec![]),
|
||||||
control_plane: Some(vec![]),
|
control_plane: Some(vec![]),
|
||||||
|
|||||||
Reference in New Issue
Block a user