Created kubernetes Service User CRD

This commit is contained in:
Dreaded_X 2025-03-13 02:59:42 +01:00
parent 53a025363c
commit 729f1483c9
Signed by: Dreaded_X
GPG Key ID: FA5F485356B0D2D4
7 changed files with 945 additions and 25 deletions

843
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -8,7 +8,7 @@ members = ["queries"]
[workspace.dependencies]
cynic = "3.10.0"
insta = "1.42.2"
insta = { version = "1.42.2", features = ["yaml"] }
[dependencies]
queries = { path = "./queries" }
@ -19,6 +19,11 @@ serde_json = "1.0.140"
surf = "2.3.2"
cynic = { workspace = true, features = ["http-surf"] }
tokio = { version = "1.44.0", features = ["full"] }
kube = { version = "0.99.0", features = ["derive"] }
k8s-openapi = { version = "0.24.0", features = ["v1_31"] }
schemars = "0.8.22"
serde = { version = "1.0.219", features = ["derive"] }
serde_yaml = "0.9.34"
[dev-dependencies]
insta = { workspace = true }

6
authelia.yaml Normal file
View File

@ -0,0 +1,6 @@
apiVersion: lldap.huizinga.dev/v1
kind: ServiceUser
metadata:
name: authelia
spec:
passwordManager: false

8
src/bin/crdgen.rs Normal file
View File

@ -0,0 +1,8 @@
use kube::CustomResourceExt;
fn main() {
print!(
"{}",
serde_yaml::to_string(&lldap_controller::resources::ServiceUser::crd()).unwrap()
)
}

View File

@ -1 +1,2 @@
pub mod lldap;
pub mod resources;

42
src/resources.rs Normal file
View File

@ -0,0 +1,42 @@
use kube::CustomResource;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(CustomResource, Deserialize, Serialize, Clone, Debug, JsonSchema)]
#[kube(
kind = "ServiceUser",
group = "lldap.huizinga.dev",
version = "v1",
namespaced,
status = "ServiceUserStatus"
)]
#[kube(
shortname = "lsu",
doc = "Custom resource for managing Service Users inside of LLDAP",
printcolumn = r#"{"name":"Exists", "type":"boolean", "description":"Does the service user exist in LLDAP", "jsonPath":".status.exists"}"#,
printcolumn = r#"{"name":"Manager", "type":"boolean", "description":"Can the service user manage passwords", "jsonPath":".spec.passwordManager"}"#,
printcolumn = r#"{"name":"Age", "type":"date", "jsonPath":".metadata.creationTimestamp"}"#
)]
#[serde(rename_all = "camelCase")]
pub struct ServiceUserSpec {
#[serde(default)]
password_manager: bool,
#[serde(default)]
additional_groups: Vec<String>,
}
#[derive(Deserialize, Serialize, Clone, Default, Debug, JsonSchema)]
pub struct ServiceUserStatus {
pub exists: bool,
}
#[cfg(test)]
mod tests {
use super::*;
use kube::CustomResourceExt;
#[test]
fn service_user_crd_output() {
insta::assert_yaml_snapshot!(ServiceUser::crd());
}
}

View File

@ -0,0 +1,63 @@
---
source: src/resources.rs
expression: "ServiceUser::crd()"
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: serviceusers.lldap.huizinga.dev
spec:
group: lldap.huizinga.dev
names:
categories: []
kind: ServiceUser
plural: serviceusers
shortNames:
- lsu
singular: serviceuser
scope: Namespaced
versions:
- additionalPrinterColumns:
- description: Does the service user exist in LLDAP
jsonPath: ".status.exists"
name: Exists
type: boolean
- description: Can the service user manage passwords
jsonPath: ".spec.passwordManager"
name: Manager
type: boolean
- jsonPath: ".metadata.creationTimestamp"
name: Age
type: date
name: v1
schema:
openAPIV3Schema:
description: Custom resource for managing Service Users inside of LLDAP
properties:
spec:
properties:
additionalGroups:
default: []
items:
type: string
type: array
passwordManager:
default: false
type: boolean
type: object
status:
nullable: true
properties:
exists:
type: boolean
required:
- exists
type: object
required:
- spec
title: ServiceUser
type: object
served: true
storage: true
subresources:
status: {}