Created kubernetes Service User CRD

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

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: {}