Compare commits
1 Commits
v0.1.3
..
731800fd3f
| Author | SHA1 | Date | |
|---|---|---|---|
|
731800fd3f
|
@@ -7,29 +7,6 @@ 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
|
|
||||||
|
|
||||||
### <!-- 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.3"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap",
|
"clap",
|
||||||
"clap_complete",
|
"clap_complete",
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "crete"
|
name = "crete"
|
||||||
version = "0.1.3"
|
version = "0.1.0"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
default-run = "crete"
|
default-run = "crete"
|
||||||
publish = ["infra"]
|
publish = ["infra"]
|
||||||
|
|||||||
@@ -140,11 +140,12 @@
|
|||||||
"array",
|
"array",
|
||||||
"null"
|
"null"
|
||||||
],
|
],
|
||||||
"default": null,
|
|
||||||
"items": {
|
"items": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"format": "ipv4"
|
"format": "ipv4"
|
||||||
}
|
},
|
||||||
|
"maxItems": 2,
|
||||||
|
"minItems": 2
|
||||||
},
|
},
|
||||||
"gateway": {
|
"gateway": {
|
||||||
"type": [
|
"type": [
|
||||||
@@ -305,10 +306,8 @@
|
|||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"advertiseRoutes": {
|
"advertiseRoutes": {
|
||||||
"type": [
|
"type": "boolean",
|
||||||
"boolean",
|
"default": false
|
||||||
"null"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"authKey": {
|
"authKey": {
|
||||||
"anyOf": [
|
"anyOf": [
|
||||||
|
|||||||
+5
-6
@@ -136,11 +136,12 @@
|
|||||||
"array",
|
"array",
|
||||||
"null"
|
"null"
|
||||||
],
|
],
|
||||||
"default": null,
|
|
||||||
"items": {
|
"items": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"format": "ipv4"
|
"format": "ipv4"
|
||||||
}
|
},
|
||||||
|
"maxItems": 2,
|
||||||
|
"minItems": 2
|
||||||
},
|
},
|
||||||
"gateway": {
|
"gateway": {
|
||||||
"type": [
|
"type": [
|
||||||
@@ -210,10 +211,8 @@
|
|||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"advertiseRoutes": {
|
"advertiseRoutes": {
|
||||||
"type": [
|
"type": "boolean",
|
||||||
"boolean",
|
"default": false
|
||||||
"null"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"authKey": {
|
"authKey": {
|
||||||
"anyOf": [
|
"anyOf": [
|
||||||
|
|||||||
+5
-11
@@ -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,13 +16,6 @@ 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();
|
||||||
@@ -34,7 +27,10 @@ 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: 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 mask = netmask.to_bits();
|
||||||
let prefix = mask.leading_ones();
|
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
|
// 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
|
||||||
|
|||||||
+3
-9
@@ -40,6 +40,8 @@ enum NodeArch {
|
|||||||
#[serde(rename_all = "camelCase", deny_unknown_fields)]
|
#[serde(rename_all = "camelCase", deny_unknown_fields)]
|
||||||
struct Tailscale {
|
struct Tailscale {
|
||||||
auth_key: Secret,
|
auth_key: Secret,
|
||||||
|
#[serde(default)]
|
||||||
|
#[optional_skip_wrap]
|
||||||
advertise_routes: bool,
|
advertise_routes: bool,
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
server: Option<String>,
|
server: Option<String>,
|
||||||
@@ -53,8 +55,7 @@ struct Network {
|
|||||||
ip: Ipv4Addr,
|
ip: Ipv4Addr,
|
||||||
netmask: Ipv4Addr,
|
netmask: Ipv4Addr,
|
||||||
gateway: Ipv4Addr,
|
gateway: Ipv4Addr,
|
||||||
#[serde(default)]
|
dns: [Ipv4Addr; 2],
|
||||||
dns: Option<Vec<Ipv4Addr>>,
|
|
||||||
#[optional_rename(OptionalTailscale)]
|
#[optional_rename(OptionalTailscale)]
|
||||||
#[optional_wrap]
|
#[optional_wrap]
|
||||||
tailscale: Tailscale,
|
tailscale: Tailscale,
|
||||||
@@ -129,13 +130,6 @@ 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