From 32ced51d01c7d44a2cc87639d5d05fb42437a889 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Mon, 12 Jan 2026 16:20:24 +0100 Subject: [PATCH] chore!: Upgrade to kube 3.0.0 and k8s-openapi 0.27.0 --- Cargo.lock | 474 ++++----- Cargo.toml | 7 +- crates/stackable-operator/Cargo.toml | 4 +- .../crds/AuthenticationClass.yaml | 1 + .../stackable-operator/crds/DummyCluster.yaml | 922 +++++++++++++++--- .../crds/ListenerClass.yaml | 37 +- .../stackable-operator/src/builder/event.rs | 4 +- .../src/cluster_resources.rs | 6 +- crates/stackable-operator/src/eos/mod.rs | 34 +- .../src/status/condition/mod.rs | 5 +- crates/stackable-shared/Cargo.toml | 6 +- .../stackable-shared/src/time/chrono_impl.rs | 18 - crates/stackable-shared/src/time/jiff_impl.rs | 20 + crates/stackable-shared/src/time/mod.rs | 4 +- .../codegen/container/struct/conversion.rs | 9 +- ...oned_macros__snapshots__pass@basic.rs.snap | 8 +- ...napshots__pass@conversion_tracking.rs.snap | 8 +- ...s__snapshots__pass@crate_overrides.rs.snap | 8 +- ...ned_macros__snapshots__pass@module.rs.snap | 16 +- ...s__snapshots__pass@module_preserve.rs.snap | 16 +- ...cros__snapshots__pass@renamed_kind.rs.snap | 8 +- ...macros__snapshots__pass@shortnames.rs.snap | 8 +- 22 files changed, 1159 insertions(+), 464 deletions(-) delete mode 100644 crates/stackable-shared/src/time/chrono_impl.rs create mode 100644 crates/stackable-shared/src/time/jiff_impl.rs diff --git a/Cargo.lock b/Cargo.lock index 3fc79c68d..b497e80a1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -94,9 +94,12 @@ checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" [[package]] name = "arc-swap" -version = "1.7.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" +checksum = "51d03449bb8ca2cc2ef70869af31463d1ae5ccc8fa3e334b307203fbf815207e" +dependencies = [ + "rustversion", +] [[package]] name = "async-broadcast" @@ -129,7 +132,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -140,7 +143,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -190,9 +193,9 @@ dependencies = [ [[package]] name = "axum-core" -version = "0.5.5" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59446ce19cd142f8833f856eb31f3eb097812d1479ab224f54d72428ca21ea22" +checksum = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1" dependencies = [ "bytes", "futures-core", @@ -232,9 +235,9 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64ct" -version = "1.8.1" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e050f626429857a27ddccb31e0aca21356bfa709c04041aefddac081a8f068a" +checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" [[package]] name = "bit-set" @@ -290,9 +293,9 @@ checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" [[package]] name = "cc" -version = "1.2.50" +version = "1.2.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f50d563227a1c37cc0a263f64eca3334388c01c5e4c4861a9def205c614383c" +checksum = "cd4932aefd12402b36c60956a4fe0035421f544799057659ff86f923657aada3" dependencies = [ "find-msvc-tools", "shlex", @@ -304,21 +307,11 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" -[[package]] -name = "chrono" -version = "0.4.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" -dependencies = [ - "num-traits", - "serde", -] - [[package]] name = "clap" -version = "4.5.53" +version = "4.5.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e340e012a1bf4935f5282ed1436d1489548e8f72308207ea5df0e23d2d03f8" +checksum = "c6e6ff9dcd79cff5cd969a17a545d79e84ab086e444102a591e288a8aa3ce394" dependencies = [ "clap_builder", "clap_derive", @@ -326,9 +319,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.53" +version = "4.5.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76b5d13eaa18c901fd2f7fca939fefe3a0727a953561fefdf3b2922b8569d00" +checksum = "fa42cf4d2b7a41bc8f663a7cab4031ebafa1bf3875705bfaf8466dc60ab52c00" dependencies = [ "anstream", "anstyle", @@ -345,7 +338,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -487,38 +480,14 @@ dependencies = [ "typenum", ] -[[package]] -name = "darling" -version = "0.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" -dependencies = [ - "darling_core 0.21.3", - "darling_macro 0.21.3", -] - [[package]] name = "darling" version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" dependencies = [ - "darling_core 0.23.0", - "darling_macro 0.23.0", -] - -[[package]] -name = "darling_core" -version = "0.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 2.0.111", + "darling_core", + "darling_macro", ] [[package]] @@ -531,18 +500,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.111", -] - -[[package]] -name = "darling_macro" -version = "0.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" -dependencies = [ - "darling_core 0.21.3", - "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -551,9 +509,9 @@ version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" dependencies = [ - "darling_core 0.23.0", + "darling_core", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -564,7 +522,7 @@ checksum = "780eb241654bf097afb00fc5f054a09b687dad862e485fdcf8399bb056565370" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -588,7 +546,7 @@ checksum = "8034092389675178f570469e6c3b0465d3d30b4505c294a6550db47f3c17ad18" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -618,7 +576,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -641,7 +599,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -693,7 +651,7 @@ dependencies = [ "enum-ordinalize", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -763,7 +721,7 @@ checksum = "8ca9601fb2d62598ee17836250842873a413586e5d7ed88b356e38ddbb0ec631" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -832,9 +790,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.5" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" +checksum = "f449e6c6c08c865631d4890cfacf252b3d396c9bcc83adb6623cdb02a8336c41" [[package]] name = "flagset" @@ -844,9 +802,9 @@ checksum = "b7ac824320a75a52197e8f2d787f6a38b6718bb6897a35142d749af3c0e8f4fe" [[package]] name = "flate2" -version = "1.1.5" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" +checksum = "b375d6465b98090a5f25b1c7703f3859783755aa9a80433b36e0379a3ec2f369" dependencies = [ "crc32fast", "miniz_oxide", @@ -860,9 +818,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "foldhash" -version = "0.1.5" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" [[package]] name = "form_urlencoded" @@ -929,7 +887,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -981,9 +939,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", "libc", @@ -1046,9 +1004,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" +checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54" dependencies = [ "atomic-waker", "bytes", @@ -1065,21 +1023,15 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.5" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" dependencies = [ "allocator-api2", "equivalent", "foldhash", ] -[[package]] -name = "hashbrown" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" - [[package]] name = "heck" version = "0.5.0" @@ -1095,15 +1047,6 @@ dependencies = [ "digest", ] -[[package]] -name = "home" -version = "0.5.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" -dependencies = [ - "windows-sys 0.61.2", -] - [[package]] name = "hostname" version = "0.4.2" @@ -1348,12 +1291,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.12.1" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" +checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" dependencies = [ "equivalent", - "hashbrown 0.16.1", + "hashbrown", ] [[package]] @@ -1367,9 +1310,9 @@ dependencies = [ [[package]] name = "insta" -version = "1.45.0" +version = "1.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b76866be74d68b1595eb8060cb9191dca9c021db2316558e52ddc5d55d41b66c" +checksum = "1b66886d14d18d420ab5052cbff544fc5d34d0b2cdd35eb5976aaa10a4a472e5" dependencies = [ "console", "globset", @@ -1387,9 +1330,9 @@ checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "iri-string" -version = "0.7.9" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397" +checksum = "c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a" dependencies = [ "memchr", "serde", @@ -1412,9 +1355,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ee5b5339afb4c41626dde77b7a611bd4f2c202b897852b4bcf5d03eddc61010" +checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" [[package]] name = "java-properties" @@ -1427,6 +1370,47 @@ dependencies = [ "regex", ] +[[package]] +name = "jiff" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e67e8da4c49d6d9909fe03361f9b620f58898859f5c7aded68351e85e71ecf50" +dependencies = [ + "jiff-static", + "jiff-tzdb-platform", + "log", + "portable-atomic", + "portable-atomic-util", + "serde_core", + "windows-sys 0.61.2", +] + +[[package]] +name = "jiff-static" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0c84ee7f197eca9a86c6fd6cb771e55eb991632f15f2bc3ca6ec838929e6e78" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.114", +] + +[[package]] +name = "jiff-tzdb" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68971ebff725b9e2ca27a601c5eb38a4c5d64422c4cbab0c535f248087eda5c2" + +[[package]] +name = "jiff-tzdb-platform" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "875a5a69ac2bab1a891711cf5eccbec1ce0341ea805560dcd90b7a2e925132e8" +dependencies = [ + "jiff-tzdb", +] + [[package]] name = "js-sys" version = "0.3.83" @@ -1451,9 +1435,9 @@ dependencies = [ [[package]] name = "jsonpath-rust" -version = "0.7.5" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c00ae348f9f8fd2d09f82a98ca381c60df9e0820d8d79fce43e649b4dc3128b" +checksum = "633a7320c4bb672863a3782e89b9094ad70285e097ff6832cddd0ec615beadfa" dependencies = [ "pest", "pest_derive", @@ -1474,12 +1458,12 @@ dependencies = [ [[package]] name = "k8s-openapi" -version = "0.26.0" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d13f06d5326a915becaffabdfab75051b8cdc260c2a5c06c0e90226ede89a692" +checksum = "05a6d6f3611ad1d21732adbd7a2e921f598af6c92d71ae6e2620da4b67ee1f0d" dependencies = [ "base64", - "chrono", + "jiff", "schemars", "serde", "serde_json", @@ -1489,7 +1473,7 @@ dependencies = [ name = "k8s-version" version = "0.1.3" dependencies = [ - "darling 0.23.0", + "darling", "proc-macro2", "quote", "regex", @@ -1498,13 +1482,14 @@ dependencies = [ "serde", "serde_yaml", "snafu 0.8.9", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] name = "kube" -version = "2.0.1" -source = "git+https://github.com/stackabletech/kube-rs?branch=2.0.1-fix-schema-hoisting#26543e85dc7daaf82d8f7dbd902b26775798879e" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dae7229247e4215781e5c5104a056e1e2163943e577f9084cf8bba7b5248f7a" dependencies = [ "k8s-openapi", "kube-client", @@ -1515,15 +1500,14 @@ dependencies = [ [[package]] name = "kube-client" -version = "2.0.1" -source = "git+https://github.com/stackabletech/kube-rs?branch=2.0.1-fix-schema-hoisting#26543e85dc7daaf82d8f7dbd902b26775798879e" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "010875e291a9c0a4e076f4f9c35b97d82fd2372cb3bc713252c3d08b7e73ce5b" dependencies = [ "base64", "bytes", - "chrono", "either", "futures", - "home", "http", "http-body", "http-body-util", @@ -1531,6 +1515,7 @@ dependencies = [ "hyper-rustls", "hyper-timeout", "hyper-util", + "jiff", "jsonpath-rust", "k8s-openapi", "kube-core", @@ -1550,13 +1535,14 @@ dependencies = [ [[package]] name = "kube-core" -version = "2.0.1" -source = "git+https://github.com/stackabletech/kube-rs?branch=2.0.1-fix-schema-hoisting#26543e85dc7daaf82d8f7dbd902b26775798879e" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ac76281aa698dd34111e25b21f5f6561932a30feabab5357152be273f8a81bb" dependencies = [ - "chrono", "derive_more", "form_urlencoded", "http", + "jiff", "json-patch", "k8s-openapi", "schemars", @@ -1568,21 +1554,23 @@ dependencies = [ [[package]] name = "kube-derive" -version = "2.0.1" -source = "git+https://github.com/stackabletech/kube-rs?branch=2.0.1-fix-schema-hoisting#26543e85dc7daaf82d8f7dbd902b26775798879e" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "599c09721efcccc0e6a26e93df28c587da60ff5e099c657626fff2af0ae4cbb8" dependencies = [ - "darling 0.21.3", + "darling", "proc-macro2", "quote", "serde", "serde_json", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] name = "kube-runtime" -version = "2.0.1" -source = "git+https://github.com/stackabletech/kube-rs?branch=2.0.1-fix-schema-hoisting#26543e85dc7daaf82d8f7dbd902b26775798879e" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db43d26700f564baf850f681f3cb0f1195d2699bd379bfa70750ecec4dcb209" dependencies = [ "ahash", "async-broadcast", @@ -1590,7 +1578,7 @@ dependencies = [ "backon", "educe", "futures", - "hashbrown 0.15.5", + "hashbrown", "hostname", "json-patch", "k8s-openapi", @@ -1616,9 +1604,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.178" +version = "0.2.180" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091" +checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" [[package]] name = "libm" @@ -1776,9 +1764,9 @@ checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "openssl-probe" -version = "0.1.6" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" +checksum = "9f50d9b3dabb09ecd771ad0aa242ca6894994c130308ca3d7684634df8037391" [[package]] name = "opentelemetry" @@ -1957,9 +1945,9 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" -version = "2.8.4" +version = "2.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbcfd20a6d4eeba40179f05735784ad32bdaef05ce8e8af05f180d45bb3e7e22" +checksum = "2c9eb05c21a464ea704b53158d358a31e6425db2f63a1a7312268b05fe2b75f7" dependencies = [ "memchr", "ucd-trie", @@ -1967,9 +1955,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.8.4" +version = "2.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51f72981ade67b1ca6adc26ec221be9f463f2b5839c7508998daa17c23d94d7f" +checksum = "68f9dbced329c441fa79d80472764b1a2c7e57123553b8519b36663a2fb234ed" dependencies = [ "pest", "pest_generator", @@ -1977,22 +1965,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.8.4" +version = "2.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dee9efd8cdb50d719a80088b76f81aec7c41ed6d522ee750178f83883d271625" +checksum = "3bb96d5051a78f44f43c8f712d8e810adb0ebf923fc9ed2655a7f66f63ba8ee5" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] name = "pest_meta" -version = "2.8.4" +version = "2.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf1d70880e76bdc13ba52eafa6239ce793d85c8e43896507e43dd8984ff05b82" +checksum = "602113b5b5e8621770cfd490cfd90b9f84ab29bd2b0e49ad83eb6d186cef2365" dependencies = [ "pest", "sha2", @@ -2015,7 +2003,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -2051,6 +2039,21 @@ dependencies = [ "spki", ] +[[package]] +name = "portable-atomic" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f89776e4d69bb58bc6993e99ffa1d11f228b839984854c7daeb5d37f87cbe950" + +[[package]] +name = "portable-atomic-util" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +dependencies = [ + "portable-atomic", +] + [[package]] name = "potential_utf" version = "0.1.4" @@ -2082,7 +2085,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -2105,9 +2108,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.103" +version = "1.0.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" +checksum = "535d180e0ecab6268a3e718bb9fd44db66bbbc256257165fc699dadf70d16fe7" dependencies = [ "unicode-ident", ] @@ -2130,9 +2133,9 @@ dependencies = [ [[package]] name = "prost" -version = "0.14.1" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7231bd9b3d3d33c86b58adbac74b5ec0ad9f496b19d22801d773636feaa95f3d" +checksum = "d2ea70524a2f82d518bce41317d0fae74151505651af45faf1ffbd6fd33f0568" dependencies = [ "bytes", "prost-derive", @@ -2140,22 +2143,22 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.14.1" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9120690fafc389a67ba3803df527d0ec9cbbc9cc45e4cc20b332996dfb672425" +checksum = "27c6023962132f4b30eb4c172c91ce92d933da334c59c23cddee82358ddafb0b" dependencies = [ "anyhow", "itertools", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] name = "quote" -version = "1.0.42" +version = "1.0.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" +checksum = "dc74d9a594b72ae6656596548f56f667211f8a97b3d4c3d467150794690dc40a" dependencies = [ "proc-macro2", ] @@ -2184,7 +2187,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ "rand_chacha 0.9.0", - "rand_core 0.9.3", + "rand_core 0.9.4", ] [[package]] @@ -2204,7 +2207,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ "ppv-lite86", - "rand_core 0.9.3", + "rand_core 0.9.4", ] [[package]] @@ -2213,14 +2216,14 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", ] [[package]] name = "rand_core" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +checksum = "4f1b3bc831f92381018fd9c6350b917c7b21f1eed35a65a51900e0e55a3d7afa" dependencies = [ "getrandom 0.3.4", ] @@ -2251,7 +2254,7 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -2291,9 +2294,9 @@ checksum = "ba39f3699c378cd8970968dcbff9c43159ea4cfbd88d43c00b22f2ef10a435d2" [[package]] name = "reqwest" -version = "0.12.26" +version = "0.12.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b4c14b2d9afca6a60277086b0cc6a6ae0b568f6f7916c943a8cdc79f8be240f" +checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" dependencies = [ "base64", "bytes", @@ -2341,7 +2344,7 @@ checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom 0.2.16", + "getrandom 0.2.17", "libc", "untrusted", "windows-sys 0.52.0", @@ -2349,9 +2352,9 @@ dependencies = [ [[package]] name = "rsa" -version = "0.9.9" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40a0376c50d0358279d9d643e4bf7b7be212f1f4ff1da9070a7b54d22ef75c88" +checksum = "b8573f03f5883dcaebdfcf4725caa1ecb9c15b2ef50c43a07b816e06799bb12d" dependencies = [ "const-oid", "digest", @@ -2393,7 +2396,7 @@ dependencies = [ "regex", "relative-path", "rustc_version", - "syn 2.0.111", + "syn 2.0.114", "unicode-ident", ] @@ -2405,7 +2408,7 @@ checksum = "b3a8fb4672e840a587a66fc577a5491375df51ddb88f2a2c2a792598c326fe14" dependencies = [ "quote", "rand 0.8.5", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -2419,9 +2422,9 @@ dependencies = [ [[package]] name = "rustix" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" +checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" dependencies = [ "bitflags", "errno", @@ -2432,9 +2435,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.35" +version = "0.23.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f" +checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b" dependencies = [ "log", "once_cell", @@ -2447,9 +2450,9 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9980d917ebb0c0536119ba501e90834767bffc3d60641457fd84a1f3fd337923" +checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" dependencies = [ "openssl-probe", "rustls-pki-types", @@ -2485,9 +2488,9 @@ checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "ryu" -version = "1.0.21" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62049b2877bf12821e8f9ad256ee38fdc31db7387ec2d3b3f403024de2034aea" +checksum = "a50f4cf475b65d88e057964e0e9bb1f0aa9bbb2036dc65c64596b42932536984" [[package]] name = "same-file" @@ -2509,9 +2512,9 @@ dependencies = [ [[package]] name = "schemars" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9558e172d4e8533736ba97870c4b2cd63f84b382a3d6eb063da41b91cce17289" +checksum = "54e910108742c57a770f492731f99be216a52fadd361b06c8fb59d74ccc267d2" dependencies = [ "dyn-clone", "ref-cast", @@ -2523,14 +2526,14 @@ dependencies = [ [[package]] name = "schemars_derive" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301858a4023d78debd2353c7426dc486001bddc91ae31a76fb1f55132f7e2633" +checksum = "4908ad288c5035a8eb12cfdf0d49270def0a268ee162b75eeee0f85d155a7c45" dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -2628,7 +2631,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -2639,20 +2642,20 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] name = "serde_json" -version = "1.0.146" +version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "217ca874ae0207aac254aa02c957ded05585a90892cc8d87f9e5fa49669dadd8" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ "itoa", "memchr", - "ryu", "serde", "serde_core", + "zmij", ] [[package]] @@ -2739,10 +2742,11 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.7" +version = "1.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7664a098b8e616bdfcc2dc0e9ac44eb231eedf41db4e9fe95d8d32ec728dedad" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" dependencies = [ + "errno", "libc", ] @@ -2819,7 +2823,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -2881,7 +2885,6 @@ dependencies = [ name = "stackable-operator" version = "0.101.2" dependencies = [ - "chrono", "clap", "const_format", "delegate", @@ -2892,6 +2895,7 @@ dependencies = [ "http", "indexmap", "indoc", + "jiff", "json-patch", "k8s-openapi", "kube", @@ -2923,18 +2927,18 @@ dependencies = [ name = "stackable-operator-derive" version = "0.3.1" dependencies = [ - "darling 0.23.0", + "darling", "proc-macro2", "quote", "stackable-operator", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] name = "stackable-shared" version = "0.0.3" dependencies = [ - "chrono", + "jiff", "k8s-openapi", "kube", "rstest", @@ -2992,7 +2996,7 @@ name = "stackable-versioned-macros" version = "0.8.3" dependencies = [ "convert_case", - "darling 0.23.0", + "darling", "indoc", "insta", "itertools", @@ -3010,7 +3014,7 @@ dependencies = [ "serde_yaml", "snafu 0.8.9", "stackable-versioned", - "syn 2.0.111", + "syn 2.0.114", "tracing", "trybuild", ] @@ -3071,7 +3075,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -3093,9 +3097,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.111" +version = "2.0.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" +checksum = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a" dependencies = [ "proc-macro2", "quote", @@ -3119,7 +3123,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -3130,9 +3134,9 @@ checksum = "591ef38edfb78ca4771ee32cf494cb8771944bee237a9b91fc9c1424ac4b777b" [[package]] name = "tempfile" -version = "3.23.0" +version = "3.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" +checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c" dependencies = [ "fastrand", "getrandom 0.3.4", @@ -3176,7 +3180,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -3187,7 +3191,7 @@ checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -3258,14 +3262,14 @@ checksum = "2d2e76690929402faae40aebdda620a2c0e25dd6d3b9afe48867dfd95991f4bd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] name = "tokio" -version = "1.48.0" +version = "1.49.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" +checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86" dependencies = [ "bytes", "libc", @@ -3285,7 +3289,7 @@ checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -3300,9 +3304,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.17" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" +checksum = "32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70" dependencies = [ "futures-core", "pin-project-lite", @@ -3311,9 +3315,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.17" +version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" dependencies = [ "bytes", "futures-core", @@ -3325,9 +3329,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.9.10+spec-1.1.0" +version = "0.9.11+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0825052159284a1a8b4d6c0c86cbc801f2da5afd2b225fa548c72f2e74002f48" +checksum = "f3afc9a848309fe1aaffaed6e1546a7a14de1f935dc9d89d32afd9a44bab7c46" dependencies = [ "indexmap", "serde_core", @@ -3496,7 +3500,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -3522,16 +3526,13 @@ dependencies = [ [[package]] name = "tracing-opentelemetry" -version = "0.32.0" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e6e5658463dd88089aba75c7791e1d3120633b1bfde22478b28f625a9bb1b8e" +checksum = "1ac28f2d093c6c477eaa76b23525478f38de514fa9aeb1285738d4b97a9552fc" dependencies = [ "js-sys", "opentelemetry", - "opentelemetry_sdk", - "rustversion", "smallvec", - "thiserror 2.0.17", "tracing", "tracing-core", "tracing-log", @@ -3635,14 +3636,15 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.7" +version = "2.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" dependencies = [ "form_urlencoded", "idna", "percent-encoding", "serde", + "serde_derive", ] [[package]] @@ -3748,7 +3750,7 @@ dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", "wasm-bindgen-shared", ] @@ -4034,28 +4036,28 @@ checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.31" +version = "0.8.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd74ec98b9250adb3ca554bdde269adf631549f51d8a8f8f0a10b50f1cb298c3" +checksum = "668f5168d10b9ee831de31933dc111a459c97ec93225beb307aed970d1372dfd" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.31" +version = "0.8.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a" +checksum = "2c7962b26b0a8685668b671ee4b54d007a67d4eaf05fda79ac0ecf41e32270f1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -4075,7 +4077,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", "synstructure", ] @@ -4090,13 +4092,13 @@ dependencies = [ [[package]] name = "zeroize_derive" -version = "1.4.2" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -4129,5 +4131,11 @@ checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] + +[[package]] +name = "zmij" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac93432f5b761b22864c774aac244fa5c0fd877678a4c37ebf6cf42208f9c9ec" diff --git a/Cargo.toml b/Cargo.toml index c2b107bef..e3313f110 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,7 +14,6 @@ product-config = { git = "https://github.com/stackabletech/product-config.git", arc-swap = "1.7.0" async-trait = "0.1.89" axum = { version = "0.8.1", features = ["http2"] } -chrono = { version = "0.4.38", default-features = false } clap = { version = "4.5.17", features = ["derive", "cargo", "env"] } const_format = "0.2.33" const-oid = { version = "0.9.6", features = ["db"] } @@ -30,17 +29,17 @@ futures-util = "0.3.30" http = "1.3.1" indexmap = "2.5.0" indoc = "2.0.6" +jiff = "0.2.18" insta = { version = "1.40", features = ["glob"] } hyper = { version = "1.4.1", features = ["full"] } hyper-util = "0.1.8" itertools = "0.14.0" json-patch = "4.0.0" -# k8s-openapi 0.26.1 doesn't play well with our kube version: https://github.com/kube-rs/kube/issues/1869 -k8s-openapi = { version = "=0.26.0", default-features = false, features = ["schemars", "v1_34"] } +k8s-openapi = { version = "0.27.0", default-features = false, features = ["schemars", "v1_35"] } # We use rustls instead of openssl for easier portability, e.g. so that we can build stackablectl without the need to vendor (build from source) openssl # We use ring instead of aws-lc-rs, as this currently fails to build in "make run-dev" # We pin the kube version, as we use a patch for 2.0.1 -kube = { git = "https://github.com/stackabletech/kube-rs", branch = "2.0.1-fix-schema-hoisting", version = "=2.0.1", default-features = false, features = ["client", "jsonpatch", "runtime", "derive", "admission", "rustls-tls", "ring"] } +kube = { version = "3.0.0", default-features = false, features = ["client", "jsonpatch", "runtime", "derive", "admission", "rustls-tls", "ring"] } opentelemetry = "0.31.0" opentelemetry_sdk = { version = "0.31.0", features = ["rt-tokio"] } opentelemetry-appender-tracing = "0.31.0" diff --git a/crates/stackable-operator/Cargo.toml b/crates/stackable-operator/Cargo.toml index 4929a3021..ab186ac42 100644 --- a/crates/stackable-operator/Cargo.toml +++ b/crates/stackable-operator/Cargo.toml @@ -21,12 +21,11 @@ webhook = ["dep:stackable-webhook"] [dependencies] stackable-certs = { path = "../stackable-certs", optional = true } stackable-operator-derive = { path = "../stackable-operator-derive" } -stackable-shared = { path = "../stackable-shared", features = ["chrono", "time"] } +stackable-shared = { path = "../stackable-shared", features = ["time", "jiff"] } stackable-telemetry = { path = "../stackable-telemetry", optional = true, features = ["clap"] } stackable-versioned = { path = "../stackable-versioned", optional = true } stackable-webhook = { path = "../stackable-webhook", optional = true } -chrono.workspace = true clap.workspace = true const_format.workspace = true delegate.workspace = true @@ -36,6 +35,7 @@ educe.workspace = true futures.workspace = true http.workspace = true indexmap.workspace = true +jiff.workspace = true json-patch.workspace = true k8s-openapi.workspace = true kube.workspace = true diff --git a/crates/stackable-operator/crds/AuthenticationClass.yaml b/crates/stackable-operator/crds/AuthenticationClass.yaml index a4cb0dfb9..8d2c5de7c 100644 --- a/crates/stackable-operator/crds/AuthenticationClass.yaml +++ b/crates/stackable-operator/crds/AuthenticationClass.yaml @@ -246,6 +246,7 @@ spec: intended to be used (via the `.well-known` discovery). enum: - Keycloak + - null nullable: true type: string rootPath: diff --git a/crates/stackable-operator/crds/DummyCluster.yaml b/crates/stackable-operator/crds/DummyCluster.yaml index d13867ef2..052bb60b3 100644 --- a/crates/stackable-operator/crds/DummyCluster.yaml +++ b/crates/stackable-operator/crds/DummyCluster.yaml @@ -106,63 +106,20 @@ spec: description: Logging configuration, learn more in the [logging concept documentation](https://docs.stackable.tech/home/nightly/concepts/logging). properties: containers: - additionalProperties: - anyOf: - - required: - - custom - - {} - - {} - description: Log configuration of the container - properties: - console: - description: Configuration for the console appender - nullable: true - properties: - level: - description: |- - The log level threshold. - Log events with a lower log level are discarded. - enum: - - TRACE - - DEBUG - - INFO - - WARN - - ERROR - - FATAL - - NONE - nullable: true - type: string - type: object - custom: - description: Log configuration provided in a ConfigMap - properties: - configMap: - description: ConfigMap containing the log configuration files - nullable: true - type: string - type: object - file: - description: Configuration for the file appender - nullable: true - properties: - level: - description: |- - The log level threshold. - Log events with a lower log level are discarded. - enum: - - TRACE - - DEBUG - - INFO - - WARN - - ERROR - - FATAL - - NONE - nullable: true - type: string - type: object - loggers: - additionalProperties: - description: Configuration of a logger + additionalProperties: false + description: Log configuration per container. + properties: + bundle-builder: + anyOf: + - required: + - custom + - {} + - {} + description: Log configuration of the container + properties: + console: + description: Configuration for the console appender + nullable: true properties: level: description: |- @@ -176,14 +133,382 @@ spec: - ERROR - FATAL - NONE + - null nullable: true type: string type: object - default: {} - description: Configuration per logger - type: object - type: object - description: Log configuration per container. + custom: + description: Custom log configuration provided in a ConfigMap + properties: + configMap: + description: ConfigMap containing the log configuration files + nullable: true + type: string + type: object + file: + description: Configuration for the file appender + nullable: true + properties: + level: + description: |- + The log level threshold. + Log events with a lower log level are discarded. + enum: + - TRACE + - DEBUG + - INFO + - WARN + - ERROR + - FATAL + - NONE + - null + nullable: true + type: string + type: object + loggers: + additionalProperties: + description: Configuration of a logger + properties: + level: + description: |- + The log level threshold. + Log events with a lower log level are discarded. + enum: + - TRACE + - DEBUG + - INFO + - WARN + - ERROR + - FATAL + - NONE + - null + nullable: true + type: string + type: object + default: {} + description: Configuration per logger + type: object + type: object + opa: + anyOf: + - required: + - custom + - {} + - {} + description: Log configuration of the container + properties: + console: + description: Configuration for the console appender + nullable: true + properties: + level: + description: |- + The log level threshold. + Log events with a lower log level are discarded. + enum: + - TRACE + - DEBUG + - INFO + - WARN + - ERROR + - FATAL + - NONE + - null + nullable: true + type: string + type: object + custom: + description: Custom log configuration provided in a ConfigMap + properties: + configMap: + description: ConfigMap containing the log configuration files + nullable: true + type: string + type: object + file: + description: Configuration for the file appender + nullable: true + properties: + level: + description: |- + The log level threshold. + Log events with a lower log level are discarded. + enum: + - TRACE + - DEBUG + - INFO + - WARN + - ERROR + - FATAL + - NONE + - null + nullable: true + type: string + type: object + loggers: + additionalProperties: + description: Configuration of a logger + properties: + level: + description: |- + The log level threshold. + Log events with a lower log level are discarded. + enum: + - TRACE + - DEBUG + - INFO + - WARN + - ERROR + - FATAL + - NONE + - null + nullable: true + type: string + type: object + default: {} + description: Configuration per logger + type: object + type: object + prepare: + anyOf: + - required: + - custom + - {} + - {} + description: Log configuration of the container + properties: + console: + description: Configuration for the console appender + nullable: true + properties: + level: + description: |- + The log level threshold. + Log events with a lower log level are discarded. + enum: + - TRACE + - DEBUG + - INFO + - WARN + - ERROR + - FATAL + - NONE + - null + nullable: true + type: string + type: object + custom: + description: Custom log configuration provided in a ConfigMap + properties: + configMap: + description: ConfigMap containing the log configuration files + nullable: true + type: string + type: object + file: + description: Configuration for the file appender + nullable: true + properties: + level: + description: |- + The log level threshold. + Log events with a lower log level are discarded. + enum: + - TRACE + - DEBUG + - INFO + - WARN + - ERROR + - FATAL + - NONE + - null + nullable: true + type: string + type: object + loggers: + additionalProperties: + description: Configuration of a logger + properties: + level: + description: |- + The log level threshold. + Log events with a lower log level are discarded. + enum: + - TRACE + - DEBUG + - INFO + - WARN + - ERROR + - FATAL + - NONE + - null + nullable: true + type: string + type: object + default: {} + description: Configuration per logger + type: object + type: object + user-info-fetcher: + anyOf: + - required: + - custom + - {} + - {} + description: Log configuration of the container + properties: + console: + description: Configuration for the console appender + nullable: true + properties: + level: + description: |- + The log level threshold. + Log events with a lower log level are discarded. + enum: + - TRACE + - DEBUG + - INFO + - WARN + - ERROR + - FATAL + - NONE + - null + nullable: true + type: string + type: object + custom: + description: Custom log configuration provided in a ConfigMap + properties: + configMap: + description: ConfigMap containing the log configuration files + nullable: true + type: string + type: object + file: + description: Configuration for the file appender + nullable: true + properties: + level: + description: |- + The log level threshold. + Log events with a lower log level are discarded. + enum: + - TRACE + - DEBUG + - INFO + - WARN + - ERROR + - FATAL + - NONE + - null + nullable: true + type: string + type: object + loggers: + additionalProperties: + description: Configuration of a logger + properties: + level: + description: |- + The log level threshold. + Log events with a lower log level are discarded. + enum: + - TRACE + - DEBUG + - INFO + - WARN + - ERROR + - FATAL + - NONE + - null + nullable: true + type: string + type: object + default: {} + description: Configuration per logger + type: object + type: object + vector: + anyOf: + - required: + - custom + - {} + - {} + description: Log configuration of the container + properties: + console: + description: Configuration for the console appender + nullable: true + properties: + level: + description: |- + The log level threshold. + Log events with a lower log level are discarded. + enum: + - TRACE + - DEBUG + - INFO + - WARN + - ERROR + - FATAL + - NONE + - null + nullable: true + type: string + type: object + custom: + description: Custom log configuration provided in a ConfigMap + properties: + configMap: + description: ConfigMap containing the log configuration files + nullable: true + type: string + type: object + file: + description: Configuration for the file appender + nullable: true + properties: + level: + description: |- + The log level threshold. + Log events with a lower log level are discarded. + enum: + - TRACE + - DEBUG + - INFO + - WARN + - ERROR + - FATAL + - NONE + - null + nullable: true + type: string + type: object + loggers: + additionalProperties: + description: Configuration of a logger + properties: + level: + description: |- + The log level threshold. + Log events with a lower log level are discarded. + enum: + - TRACE + - DEBUG + - INFO + - WARN + - ERROR + - FATAL + - NONE + - null + nullable: true + type: string + type: object + default: {} + description: Configuration per logger + type: object + type: object type: object enableVectorAgent: description: Wether or not to deploy a container with the Vector log agent. @@ -218,7 +543,7 @@ spec: Cores are specified either as a decimal point number or as milli units. For example:`1.5` will be 1.5 cores, also written as `1500m`. nullable: true - type: string + x-kubernetes-int-or-string: true min: description: |- The minimal amount of CPU cores that Pods need to run. @@ -226,7 +551,7 @@ spec: Cores are specified either as a decimal point number or as milli units. For example:`1.5` will be 1.5 cores, also written as `1500m`. nullable: true - type: string + x-kubernetes-int-or-string: true type: object memory: properties: @@ -239,18 +564,18 @@ spec: For example, the following represent roughly the same value: `128974848, 129e6, 129M, 128974848000m, 123Mi` nullable: true - type: string + x-kubernetes-int-or-string: true runtimeLimits: description: Additional options that can be specified. properties: max: description: "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n``` ::= \n\n\t(Note that may be empty, from the \"\" case in .)\n\n ::= 0 | 1 | ... | 9 ::= | ::= | . | . | . ::= \"+\" | \"-\" ::= | ::= | | ::= Ki | Mi | Gi | Ti | Pi | Ei\n\n\t(International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\n ::= m | \"\" | k | M | G | T | P | E\n\n\t(Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\n ::= \"e\" | \"E\" ```\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n\n- No precision is lost - No fractional digits will be emitted - The exponent (or suffix) is as large as possible.\n\nThe sign will be omitted unless the number is negative.\n\nExamples:\n\n- 1.5 will be serialized as \"1500m\" - 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation." nullable: true - type: string + x-kubernetes-int-or-string: true min: description: "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n``` ::= \n\n\t(Note that may be empty, from the \"\" case in .)\n\n ::= 0 | 1 | ... | 9 ::= | ::= | . | . | . ::= \"+\" | \"-\" ::= | ::= | | ::= Ki | Mi | Gi | Ti | Pi | Ei\n\n\t(International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\n ::= m | \"\" | k | M | G | T | P | E\n\n\t(Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\n ::= \"e\" | \"E\" ```\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n\n- No precision is lost - No fractional digits will be emitted - The exponent (or suffix) is as large as possible.\n\nThe sign will be omitted unless the number is negative.\n\nExamples:\n\n- 1.5 will be serialized as \"1500m\" - 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation." nullable: true - type: string + x-kubernetes-int-or-string: true type: object type: object storage: @@ -260,7 +585,7 @@ spec: capacity: description: "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n``` ::= \n\n\t(Note that may be empty, from the \"\" case in .)\n\n ::= 0 | 1 | ... | 9 ::= | ::= | . | . | . ::= \"+\" | \"-\" ::= | ::= | | ::= Ki | Mi | Gi | Ti | Pi | Ei\n\n\t(International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\n ::= m | \"\" | k | M | G | T | P | E\n\n\t(Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\n ::= \"e\" | \"E\" ```\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n\n- No precision is lost - No fractional digits will be emitted - The exponent (or suffix) is as large as possible.\n\nThe sign will be omitted unless the number is negative.\n\nExamples:\n\n- 1.5 will be serialized as \"1500m\" - 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation." nullable: true - type: string + x-kubernetes-int-or-string: true selectors: description: A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects. nullable: true @@ -394,63 +719,20 @@ spec: description: Logging configuration, learn more in the [logging concept documentation](https://docs.stackable.tech/home/nightly/concepts/logging). properties: containers: - additionalProperties: - anyOf: - - required: - - custom - - {} - - {} - description: Log configuration of the container - properties: - console: - description: Configuration for the console appender - nullable: true - properties: - level: - description: |- - The log level threshold. - Log events with a lower log level are discarded. - enum: - - TRACE - - DEBUG - - INFO - - WARN - - ERROR - - FATAL - - NONE - nullable: true - type: string - type: object - custom: - description: Log configuration provided in a ConfigMap - properties: - configMap: - description: ConfigMap containing the log configuration files - nullable: true - type: string - type: object - file: - description: Configuration for the file appender - nullable: true - properties: - level: - description: |- - The log level threshold. - Log events with a lower log level are discarded. - enum: - - TRACE - - DEBUG - - INFO - - WARN - - ERROR - - FATAL - - NONE - nullable: true - type: string - type: object - loggers: - additionalProperties: - description: Configuration of a logger + additionalProperties: false + description: Log configuration per container. + properties: + bundle-builder: + anyOf: + - required: + - custom + - {} + - {} + description: Log configuration of the container + properties: + console: + description: Configuration for the console appender + nullable: true properties: level: description: |- @@ -464,14 +746,382 @@ spec: - ERROR - FATAL - NONE + - null nullable: true type: string type: object - default: {} - description: Configuration per logger - type: object - type: object - description: Log configuration per container. + custom: + description: Custom log configuration provided in a ConfigMap + properties: + configMap: + description: ConfigMap containing the log configuration files + nullable: true + type: string + type: object + file: + description: Configuration for the file appender + nullable: true + properties: + level: + description: |- + The log level threshold. + Log events with a lower log level are discarded. + enum: + - TRACE + - DEBUG + - INFO + - WARN + - ERROR + - FATAL + - NONE + - null + nullable: true + type: string + type: object + loggers: + additionalProperties: + description: Configuration of a logger + properties: + level: + description: |- + The log level threshold. + Log events with a lower log level are discarded. + enum: + - TRACE + - DEBUG + - INFO + - WARN + - ERROR + - FATAL + - NONE + - null + nullable: true + type: string + type: object + default: {} + description: Configuration per logger + type: object + type: object + opa: + anyOf: + - required: + - custom + - {} + - {} + description: Log configuration of the container + properties: + console: + description: Configuration for the console appender + nullable: true + properties: + level: + description: |- + The log level threshold. + Log events with a lower log level are discarded. + enum: + - TRACE + - DEBUG + - INFO + - WARN + - ERROR + - FATAL + - NONE + - null + nullable: true + type: string + type: object + custom: + description: Custom log configuration provided in a ConfigMap + properties: + configMap: + description: ConfigMap containing the log configuration files + nullable: true + type: string + type: object + file: + description: Configuration for the file appender + nullable: true + properties: + level: + description: |- + The log level threshold. + Log events with a lower log level are discarded. + enum: + - TRACE + - DEBUG + - INFO + - WARN + - ERROR + - FATAL + - NONE + - null + nullable: true + type: string + type: object + loggers: + additionalProperties: + description: Configuration of a logger + properties: + level: + description: |- + The log level threshold. + Log events with a lower log level are discarded. + enum: + - TRACE + - DEBUG + - INFO + - WARN + - ERROR + - FATAL + - NONE + - null + nullable: true + type: string + type: object + default: {} + description: Configuration per logger + type: object + type: object + prepare: + anyOf: + - required: + - custom + - {} + - {} + description: Log configuration of the container + properties: + console: + description: Configuration for the console appender + nullable: true + properties: + level: + description: |- + The log level threshold. + Log events with a lower log level are discarded. + enum: + - TRACE + - DEBUG + - INFO + - WARN + - ERROR + - FATAL + - NONE + - null + nullable: true + type: string + type: object + custom: + description: Custom log configuration provided in a ConfigMap + properties: + configMap: + description: ConfigMap containing the log configuration files + nullable: true + type: string + type: object + file: + description: Configuration for the file appender + nullable: true + properties: + level: + description: |- + The log level threshold. + Log events with a lower log level are discarded. + enum: + - TRACE + - DEBUG + - INFO + - WARN + - ERROR + - FATAL + - NONE + - null + nullable: true + type: string + type: object + loggers: + additionalProperties: + description: Configuration of a logger + properties: + level: + description: |- + The log level threshold. + Log events with a lower log level are discarded. + enum: + - TRACE + - DEBUG + - INFO + - WARN + - ERROR + - FATAL + - NONE + - null + nullable: true + type: string + type: object + default: {} + description: Configuration per logger + type: object + type: object + user-info-fetcher: + anyOf: + - required: + - custom + - {} + - {} + description: Log configuration of the container + properties: + console: + description: Configuration for the console appender + nullable: true + properties: + level: + description: |- + The log level threshold. + Log events with a lower log level are discarded. + enum: + - TRACE + - DEBUG + - INFO + - WARN + - ERROR + - FATAL + - NONE + - null + nullable: true + type: string + type: object + custom: + description: Custom log configuration provided in a ConfigMap + properties: + configMap: + description: ConfigMap containing the log configuration files + nullable: true + type: string + type: object + file: + description: Configuration for the file appender + nullable: true + properties: + level: + description: |- + The log level threshold. + Log events with a lower log level are discarded. + enum: + - TRACE + - DEBUG + - INFO + - WARN + - ERROR + - FATAL + - NONE + - null + nullable: true + type: string + type: object + loggers: + additionalProperties: + description: Configuration of a logger + properties: + level: + description: |- + The log level threshold. + Log events with a lower log level are discarded. + enum: + - TRACE + - DEBUG + - INFO + - WARN + - ERROR + - FATAL + - NONE + - null + nullable: true + type: string + type: object + default: {} + description: Configuration per logger + type: object + type: object + vector: + anyOf: + - required: + - custom + - {} + - {} + description: Log configuration of the container + properties: + console: + description: Configuration for the console appender + nullable: true + properties: + level: + description: |- + The log level threshold. + Log events with a lower log level are discarded. + enum: + - TRACE + - DEBUG + - INFO + - WARN + - ERROR + - FATAL + - NONE + - null + nullable: true + type: string + type: object + custom: + description: Custom log configuration provided in a ConfigMap + properties: + configMap: + description: ConfigMap containing the log configuration files + nullable: true + type: string + type: object + file: + description: Configuration for the file appender + nullable: true + properties: + level: + description: |- + The log level threshold. + Log events with a lower log level are discarded. + enum: + - TRACE + - DEBUG + - INFO + - WARN + - ERROR + - FATAL + - NONE + - null + nullable: true + type: string + type: object + loggers: + additionalProperties: + description: Configuration of a logger + properties: + level: + description: |- + The log level threshold. + Log events with a lower log level are discarded. + enum: + - TRACE + - DEBUG + - INFO + - WARN + - ERROR + - FATAL + - NONE + - null + nullable: true + type: string + type: object + default: {} + description: Configuration per logger + type: object + type: object type: object enableVectorAgent: description: Wether or not to deploy a container with the Vector log agent. @@ -506,7 +1156,7 @@ spec: Cores are specified either as a decimal point number or as milli units. For example:`1.5` will be 1.5 cores, also written as `1500m`. nullable: true - type: string + x-kubernetes-int-or-string: true min: description: |- The minimal amount of CPU cores that Pods need to run. @@ -514,7 +1164,7 @@ spec: Cores are specified either as a decimal point number or as milli units. For example:`1.5` will be 1.5 cores, also written as `1500m`. nullable: true - type: string + x-kubernetes-int-or-string: true type: object memory: properties: @@ -527,18 +1177,18 @@ spec: For example, the following represent roughly the same value: `128974848, 129e6, 129M, 128974848000m, 123Mi` nullable: true - type: string + x-kubernetes-int-or-string: true runtimeLimits: description: Additional options that can be specified. properties: max: description: "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n``` ::= \n\n\t(Note that may be empty, from the \"\" case in .)\n\n ::= 0 | 1 | ... | 9 ::= | ::= | . | . | . ::= \"+\" | \"-\" ::= | ::= | | ::= Ki | Mi | Gi | Ti | Pi | Ei\n\n\t(International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\n ::= m | \"\" | k | M | G | T | P | E\n\n\t(Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\n ::= \"e\" | \"E\" ```\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n\n- No precision is lost - No fractional digits will be emitted - The exponent (or suffix) is as large as possible.\n\nThe sign will be omitted unless the number is negative.\n\nExamples:\n\n- 1.5 will be serialized as \"1500m\" - 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation." nullable: true - type: string + x-kubernetes-int-or-string: true min: description: "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n``` ::= \n\n\t(Note that may be empty, from the \"\" case in .)\n\n ::= 0 | 1 | ... | 9 ::= | ::= | . | . | . ::= \"+\" | \"-\" ::= | ::= | | ::= Ki | Mi | Gi | Ti | Pi | Ei\n\n\t(International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\n ::= m | \"\" | k | M | G | T | P | E\n\n\t(Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\n ::= \"e\" | \"E\" ```\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n\n- No precision is lost - No fractional digits will be emitted - The exponent (or suffix) is as large as possible.\n\nThe sign will be omitted unless the number is negative.\n\nExamples:\n\n- 1.5 will be serialized as \"1500m\" - 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation." nullable: true - type: string + x-kubernetes-int-or-string: true type: object type: object storage: @@ -548,7 +1198,7 @@ spec: capacity: description: "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n``` ::= \n\n\t(Note that may be empty, from the \"\" case in .)\n\n ::= 0 | 1 | ... | 9 ::= | ::= | . | . | . ::= \"+\" | \"-\" ::= | ::= | | ::= Ki | Mi | Gi | Ti | Pi | Ei\n\n\t(International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\n ::= m | \"\" | k | M | G | T | P | E\n\n\t(Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\n ::= \"e\" | \"E\" ```\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n\n- No precision is lost - No fractional digits will be emitted - The exponent (or suffix) is as large as possible.\n\nThe sign will be omitted unless the number is negative.\n\nExamples:\n\n- 1.5 will be serialized as \"1500m\" - 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation." nullable: true - type: string + x-kubernetes-int-or-string: true selectors: description: A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects. nullable: true diff --git a/crates/stackable-operator/crds/ListenerClass.yaml b/crates/stackable-operator/crds/ListenerClass.yaml index 0e87e2b65..abab0c2e7 100644 --- a/crates/stackable-operator/crds/ListenerClass.yaml +++ b/crates/stackable-operator/crds/ListenerClass.yaml @@ -77,18 +77,35 @@ spec: description: Annotations that should be added to the Service object. type: object serviceExternalTrafficPolicy: + anyOf: + - description: |- + Service Internal Traffic Policy enables internal traffic restrictions to only route internal + traffic to endpoints within the node the traffic originated from. The "internal" traffic + here refers to traffic originated from Pods in the current cluster. This can help to reduce + costs and improve performance. See [Kubernetes docs][k8s-docs]. + + [k8s-docs]: https://kubernetes.io/docs/concepts/services-networking/service-traffic-policy/ + enum: + - Cluster + - Local + type: string + - enum: + - null + nullable: true description: |- - Service Internal Traffic Policy enables internal traffic restrictions to only route internal - traffic to endpoints within the node the traffic originated from. The "internal" traffic - here refers to traffic originated from Pods in the current cluster. This can help to reduce - costs and improve performance. See [Kubernetes docs][k8s-docs]. + `externalTrafficPolicy` that should be set on the created Service objects. - [k8s-docs]: https://kubernetes.io/docs/concepts/services-networking/service-traffic-policy/ - enum: - - Cluster - - Local - nullable: true - type: string + It is a Kubernetes feature that controls how external traffic is routed to a Kubernetes + Service. + + * `Cluster`: Kubernetes default. Traffic is routed to any node in the Kubernetes cluster that + has a pod running the service. + * `Local`: Traffic is only routed to pods running on the same node as the Service. + + The `Local` mode has better performance as it avoids a network hop, but requires a more + sophisticated LoadBalancer, that respects what Pods run on which nodes and routes traffic only + to these nodes accordingly. Some cloud providers or bare metal installations do not implement + some of the required features. serviceType: description: The method used to access the services. enum: diff --git a/crates/stackable-operator/src/builder/event.rs b/crates/stackable-operator/src/builder/event.rs index b523acffb..f3d07d3c2 100644 --- a/crates/stackable-operator/src/builder/event.rs +++ b/crates/stackable-operator/src/builder/event.rs @@ -1,7 +1,7 @@ -use chrono::Utc; use k8s_openapi::{ api::core::v1::{Event, EventSource, ObjectReference}, apimachinery::pkg::apis::meta::v1::{MicroTime, ObjectMeta, Time}, + jiff::Timestamp, }; use kube::{Resource, ResourceExt}; @@ -91,7 +91,7 @@ impl EventBuilder { } pub fn build(&self) -> Event { - let time = Utc::now(); + let time = Timestamp::now(); let source = Some(EventSource { component: self.reporting_component.clone(), diff --git a/crates/stackable-operator/src/cluster_resources.rs b/crates/stackable-operator/src/cluster_resources.rs index e159f9cf2..c84a03822 100644 --- a/crates/stackable-operator/src/cluster_resources.rs +++ b/crates/stackable-operator/src/cluster_resources.rs @@ -22,7 +22,7 @@ use k8s_openapi::{ }, apimachinery::pkg::apis::meta::v1::{LabelSelector, LabelSelectorRequirement}, }; -use kube::{Resource, ResourceExt, core::ErrorResponse}; +use kube::{Resource, ResourceExt}; use serde::{Serialize, de::DeserializeOwned}; use snafu::{OptionExt, ResultExt, Snafu}; use strum::Display; @@ -744,8 +744,8 @@ impl<'a> ClusterResources<'a> { Ok(()) } Err(crate::client::Error::ListResources { - source: kube::Error::Api(ErrorResponse { code: 403, .. }), - }) => { + source: kube::Error::Api(s), + }) if s.is_forbidden() => { debug!( "Skipping deletion of orphaned {} because the operator is not allowed to list \ them and is therefore probably not in charge of them.", diff --git a/crates/stackable-operator/src/eos/mod.rs b/crates/stackable-operator/src/eos/mod.rs index 243cb365a..277aed1c8 100644 --- a/crates/stackable-operator/src/eos/mod.rs +++ b/crates/stackable-operator/src/eos/mod.rs @@ -1,4 +1,4 @@ -use chrono::{DateTime, Utc}; +use jiff::{self, Zoned}; use snafu::{ResultExt, Snafu}; use stackable_shared::time::Duration; use tracing::{Level, instrument}; @@ -63,12 +63,12 @@ pub enum EndOfSupportCheckMode { #[derive(Debug, Snafu)] pub enum Error { #[snafu(display("failed to parse built-time"))] - ParseBuiltTime { source: chrono::ParseError }, + ParseBuiltTime { source: k8s_openapi::jiff::Error }, } pub struct EndOfSupportChecker { - built_datetime: DateTime, - eos_datetime: DateTime, + built_datetime: Zoned, + eos_datetime: Zoned, interval: Duration, disabled: bool, } @@ -92,15 +92,13 @@ impl EndOfSupportChecker { // Parse the built-time from the RFC2822-encoded string when this is compiled as a release // build. If this is a debug/dev build, use the current datetime instead. let built_datetime = if cfg!(debug_assertions) { - Utc::now() + Zoned::now() } else { - DateTime::parse_from_rfc2822(built_time) - .context(ParseBuiltTimeSnafu)? - .to_utc() + jiff::fmt::rfc2822::parse(built_time).context(ParseBuiltTimeSnafu)? }; // Add the support duration to the built date. This marks the end-of-support date. - let eos_datetime = built_datetime + *support_duration; + let eos_datetime = &built_datetime + *support_duration; Ok(Self { built_datetime, @@ -127,12 +125,13 @@ impl EndOfSupportChecker { // TODO: Add way to stop from the outside // The first tick ticks immediately. interval.tick().await; - let now = Utc::now(); + let now = Zoned::now(); tracing::info_span!( "checking end-of-support state", eos.interval = self.interval.to_string(), - eos.now = now.to_rfc3339(), + eos.now = jiff::fmt::rfc2822::to_string(&now) + .expect("Zoned::now() can always be serialized using rfc2822::to_string"), ); // Continue the loop and wait for the next tick to run the check again. @@ -146,18 +145,19 @@ impl EndOfSupportChecker { /// Emits the end-of-support warning. #[instrument(level = Level::DEBUG, skip(self))] - fn emit_warning(&self, now: DateTime) { - let built_datetime = self.built_datetime.to_rfc3339(); - let build_age = Duration::try_from(now - self.built_datetime) + fn emit_warning(&self, now: Zoned) { + let built_datetime = jiff::fmt::rfc2822::to_string(&self.built_datetime) + .expect("The build datetime can always be serialized using rfc2822::to_string"); + let build_age = Duration::try_from(&now - &self.built_datetime) .expect("time delta of now and built datetime must not be less than 0") .to_string(); tracing::warn!( eos.built.datetime = built_datetime, - eos.build.age = build_age, + eos.build.age = %build_age, "This operator version was built on {built_datetime} ({build_age} ago) and may have reached end-of-support. \ -Running unsupported versions may contain security vulnerabilities. \ -Please upgrade to a supported version as soon as possible." + Running unsupported versions may contain security vulnerabilities. \ + Please upgrade to a supported version as soon as possible." ); } } diff --git a/crates/stackable-operator/src/status/condition/mod.rs b/crates/stackable-operator/src/status/condition/mod.rs index e30f727a8..c658d03fb 100644 --- a/crates/stackable-operator/src/status/condition/mod.rs +++ b/crates/stackable-operator/src/status/condition/mod.rs @@ -3,8 +3,7 @@ pub mod deployment; pub mod operations; pub mod statefulset; -use chrono::Utc; -use k8s_openapi::apimachinery::pkg::apis::meta::v1::Time; +use k8s_openapi::{apimachinery::pkg::apis::meta::v1::Time, jiff::Timestamp}; use schemars::{self, JsonSchema}; use serde::{Deserialize, Serialize}; use strum::EnumCount; @@ -345,7 +344,7 @@ fn update_timestamps( // sanity check assert_eq!(old_condition.type_, new_condition.type_); - let now = Time(Utc::now()); + let now = Time(Timestamp::now()); // No change in status -> keep "last_transition_time" if old_condition.status == new_condition.status { ClusterCondition { diff --git a/crates/stackable-shared/Cargo.toml b/crates/stackable-shared/Cargo.toml index 4925a11cc..50dfe9edb 100644 --- a/crates/stackable-shared/Cargo.toml +++ b/crates/stackable-shared/Cargo.toml @@ -7,14 +7,14 @@ edition.workspace = true repository.workspace = true [features] -full = ["chrono", "time"] +full = ["jiff", "time"] default = ["time"] -chrono = ["dep:chrono"] +jiff = ["dep:jiff"] time = ["dep:time"] [dependencies] -chrono = { workspace = true, optional = true } +jiff = { workspace = true, optional = true } k8s-openapi.workspace = true kube.workspace = true schemars.workspace = true diff --git a/crates/stackable-shared/src/time/chrono_impl.rs b/crates/stackable-shared/src/time/chrono_impl.rs deleted file mode 100644 index 1f0a6c5e8..000000000 --- a/crates/stackable-shared/src/time/chrono_impl.rs +++ /dev/null @@ -1,18 +0,0 @@ -use crate::time::Duration; - -impl TryFrom for Duration { - type Error = chrono::OutOfRangeError; - - fn try_from(value: chrono::TimeDelta) -> Result { - let std_duration = value.to_std()?; - Ok(Self::from(std_duration)) - } -} - -impl TryFrom for chrono::TimeDelta { - type Error = chrono::OutOfRangeError; - - fn try_from(value: Duration) -> Result { - chrono::TimeDelta::from_std(value.into()) - } -} diff --git a/crates/stackable-shared/src/time/jiff_impl.rs b/crates/stackable-shared/src/time/jiff_impl.rs new file mode 100644 index 000000000..a655d8eb7 --- /dev/null +++ b/crates/stackable-shared/src/time/jiff_impl.rs @@ -0,0 +1,20 @@ +use jiff::Span; + +use crate::time::Duration; + +impl TryFrom for Duration { + type Error = jiff::Error; + + fn try_from(value: Span) -> Result { + let std_duration = std::time::Duration::try_from(value)?; + Ok(Self::from(std_duration)) + } +} + +impl TryFrom for Span { + type Error = jiff::Error; + + fn try_from(value: Duration) -> Result { + Span::try_from(Into::::into(value)) + } +} diff --git a/crates/stackable-shared/src/time/mod.rs b/crates/stackable-shared/src/time/mod.rs index 63e13a930..bc562dca0 100644 --- a/crates/stackable-shared/src/time/mod.rs +++ b/crates/stackable-shared/src/time/mod.rs @@ -1,8 +1,8 @@ mod duration; mod serde_impl; -#[cfg(feature = "chrono")] -mod chrono_impl; +#[cfg(feature = "jiff")] +mod jiff_impl; #[cfg(feature = "time")] mod time_impl; diff --git a/crates/stackable-versioned-macros/src/codegen/container/struct/conversion.rs b/crates/stackable-versioned-macros/src/codegen/container/struct/conversion.rs index 1ca5c3d23..7d6c5e593 100644 --- a/crates/stackable-versioned-macros/src/codegen/container/struct/conversion.rs +++ b/crates/stackable-versioned-macros/src/codegen/container/struct/conversion.rs @@ -334,7 +334,6 @@ impl Struct { let version_enum_ident = &spec_gen_ctx.kubernetes_idents.version; let struct_ident = &spec_gen_ctx.kubernetes_idents.kind; - let kube_client_path = &*mod_gen_ctx.crates.kube_client; let serde_json_path = &*mod_gen_ctx.crates.serde_json; let kube_core_path = &*mod_gen_ctx.crates.kube_core; let versioned_path = &*mod_gen_ctx.crates.versioned; @@ -381,9 +380,10 @@ impl Struct { #invalid_conversion_review_event return #kube_core_path::conversion::ConversionResponse::invalid( - #kube_client_path::Status { + #kube_core_path::Status { status: Some(#kube_core_path::response::StatusSummary::Failure), message: err.to_string(), + metadata: None, reason: err.to_string(), details: None, code: 400, @@ -405,7 +405,7 @@ impl Struct { // the result to success and the converted objects to the provided list. // The below code does the same thing. #kube_core_path::conversion::ConversionResponse { - result: #kube_client_path::Status::success(), + result: #kube_core_path::Status::success(), types: request.types, uid: request.uid, converted_objects, @@ -416,9 +416,10 @@ impl Struct { let message = err.join_errors(); #kube_core_path::conversion::ConversionResponse { - result: #kube_client_path::Status { + result: #kube_core_path::Status { status: Some(#kube_core_path::response::StatusSummary::Failure), message: message.clone(), + metadata: None, reason: message, details: None, code, diff --git a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@basic.rs.snap b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@basic.rs.snap index 3f981cccd..904083f27 100644 --- a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@basic.rs.snap +++ b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@basic.rs.snap @@ -192,9 +192,10 @@ impl Foo { ) { ::std::result::Result::Ok(request) => request, ::std::result::Result::Err(err) => { - return ::kube::core::conversion::ConversionResponse::invalid(::kube::client::Status { + return ::kube::core::conversion::ConversionResponse::invalid(::kube::core::Status { status: Some(::kube::core::response::StatusSummary::Failure), message: err.to_string(), + metadata: None, reason: err.to_string(), details: None, code: 400, @@ -208,7 +209,7 @@ impl Foo { ) { ::std::result::Result::Ok(converted_objects) => { ::kube::core::conversion::ConversionResponse { - result: ::kube::client::Status::success(), + result: ::kube::core::Status::success(), types: request.types, uid: request.uid, converted_objects, @@ -218,9 +219,10 @@ impl Foo { let code = err.http_status_code(); let message = err.join_errors(); ::kube::core::conversion::ConversionResponse { - result: ::kube::client::Status { + result: ::kube::core::Status { status: Some(::kube::core::response::StatusSummary::Failure), message: message.clone(), + metadata: None, reason: message, details: None, code, diff --git a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@conversion_tracking.rs.snap b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@conversion_tracking.rs.snap index d0971affb..88e9eeb82 100644 --- a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@conversion_tracking.rs.snap +++ b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@conversion_tracking.rs.snap @@ -236,9 +236,10 @@ impl Foo { ) { ::std::result::Result::Ok(request) => request, ::std::result::Result::Err(err) => { - return ::kube::core::conversion::ConversionResponse::invalid(::kube::client::Status { + return ::kube::core::conversion::ConversionResponse::invalid(::kube::core::Status { status: Some(::kube::core::response::StatusSummary::Failure), message: err.to_string(), + metadata: None, reason: err.to_string(), details: None, code: 400, @@ -252,7 +253,7 @@ impl Foo { ) { ::std::result::Result::Ok(converted_objects) => { ::kube::core::conversion::ConversionResponse { - result: ::kube::client::Status::success(), + result: ::kube::core::Status::success(), types: request.types, uid: request.uid, converted_objects, @@ -262,9 +263,10 @@ impl Foo { let code = err.http_status_code(); let message = err.join_errors(); ::kube::core::conversion::ConversionResponse { - result: ::kube::client::Status { + result: ::kube::core::Status { status: Some(::kube::core::response::StatusSummary::Failure), message: message.clone(), + metadata: None, reason: message, details: None, code, diff --git a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@crate_overrides.rs.snap b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@crate_overrides.rs.snap index 495389a6d..f62143573 100644 --- a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@crate_overrides.rs.snap +++ b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@crate_overrides.rs.snap @@ -179,9 +179,10 @@ impl Foo { ) { ::std::result::Result::Ok(request) => request, ::std::result::Result::Err(err) => { - return ::kube::core::conversion::ConversionResponse::invalid(::kube::client::Status { + return ::kube::core::conversion::ConversionResponse::invalid(::kube::core::Status { status: Some(::kube::core::response::StatusSummary::Failure), message: err.to_string(), + metadata: None, reason: err.to_string(), details: None, code: 400, @@ -195,7 +196,7 @@ impl Foo { ) { ::std::result::Result::Ok(converted_objects) => { ::kube::core::conversion::ConversionResponse { - result: ::kube::client::Status::success(), + result: ::kube::core::Status::success(), types: request.types, uid: request.uid, converted_objects, @@ -205,9 +206,10 @@ impl Foo { let code = err.http_status_code(); let message = err.join_errors(); ::kube::core::conversion::ConversionResponse { - result: ::kube::client::Status { + result: ::kube::core::Status { status: Some(::kube::core::response::StatusSummary::Failure), message: message.clone(), + metadata: None, reason: message, details: None, code, diff --git a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@module.rs.snap b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@module.rs.snap index 21ec44f82..e86d884fa 100644 --- a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@module.rs.snap +++ b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@module.rs.snap @@ -387,9 +387,10 @@ impl Foo { ) { ::std::result::Result::Ok(request) => request, ::std::result::Result::Err(err) => { - return ::kube::core::conversion::ConversionResponse::invalid(::kube::client::Status { + return ::kube::core::conversion::ConversionResponse::invalid(::kube::core::Status { status: Some(::kube::core::response::StatusSummary::Failure), message: err.to_string(), + metadata: None, reason: err.to_string(), details: None, code: 400, @@ -403,7 +404,7 @@ impl Foo { ) { ::std::result::Result::Ok(converted_objects) => { ::kube::core::conversion::ConversionResponse { - result: ::kube::client::Status::success(), + result: ::kube::core::Status::success(), types: request.types, uid: request.uid, converted_objects, @@ -413,9 +414,10 @@ impl Foo { let code = err.http_status_code(); let message = err.join_errors(); ::kube::core::conversion::ConversionResponse { - result: ::kube::client::Status { + result: ::kube::core::Status { status: Some(::kube::core::response::StatusSummary::Failure), message: message.clone(), + metadata: None, reason: message, details: None, code, @@ -667,9 +669,10 @@ impl Bar { ) { ::std::result::Result::Ok(request) => request, ::std::result::Result::Err(err) => { - return ::kube::core::conversion::ConversionResponse::invalid(::kube::client::Status { + return ::kube::core::conversion::ConversionResponse::invalid(::kube::core::Status { status: Some(::kube::core::response::StatusSummary::Failure), message: err.to_string(), + metadata: None, reason: err.to_string(), details: None, code: 400, @@ -683,7 +686,7 @@ impl Bar { ) { ::std::result::Result::Ok(converted_objects) => { ::kube::core::conversion::ConversionResponse { - result: ::kube::client::Status::success(), + result: ::kube::core::Status::success(), types: request.types, uid: request.uid, converted_objects, @@ -693,9 +696,10 @@ impl Bar { let code = err.http_status_code(); let message = err.join_errors(); ::kube::core::conversion::ConversionResponse { - result: ::kube::client::Status { + result: ::kube::core::Status { status: Some(::kube::core::response::StatusSummary::Failure), message: message.clone(), + metadata: None, reason: message, details: None, code, diff --git a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@module_preserve.rs.snap b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@module_preserve.rs.snap index b5af49e8d..261792f53 100644 --- a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@module_preserve.rs.snap +++ b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@module_preserve.rs.snap @@ -360,9 +360,10 @@ pub(crate) mod versioned { ) { ::std::result::Result::Ok(request) => request, ::std::result::Result::Err(err) => { - return ::kube::core::conversion::ConversionResponse::invalid(::kube::client::Status { + return ::kube::core::conversion::ConversionResponse::invalid(::kube::core::Status { status: Some(::kube::core::response::StatusSummary::Failure), message: err.to_string(), + metadata: None, reason: err.to_string(), details: None, code: 400, @@ -376,7 +377,7 @@ pub(crate) mod versioned { ) { ::std::result::Result::Ok(converted_objects) => { ::kube::core::conversion::ConversionResponse { - result: ::kube::client::Status::success(), + result: ::kube::core::Status::success(), types: request.types, uid: request.uid, converted_objects, @@ -386,9 +387,10 @@ pub(crate) mod versioned { let code = err.http_status_code(); let message = err.join_errors(); ::kube::core::conversion::ConversionResponse { - result: ::kube::client::Status { + result: ::kube::core::Status { status: Some(::kube::core::response::StatusSummary::Failure), message: message.clone(), + metadata: None, reason: message, details: None, code, @@ -635,9 +637,10 @@ pub(crate) mod versioned { ) { ::std::result::Result::Ok(request) => request, ::std::result::Result::Err(err) => { - return ::kube::core::conversion::ConversionResponse::invalid(::kube::client::Status { + return ::kube::core::conversion::ConversionResponse::invalid(::kube::core::Status { status: Some(::kube::core::response::StatusSummary::Failure), message: err.to_string(), + metadata: None, reason: err.to_string(), details: None, code: 400, @@ -651,7 +654,7 @@ pub(crate) mod versioned { ) { ::std::result::Result::Ok(converted_objects) => { ::kube::core::conversion::ConversionResponse { - result: ::kube::client::Status::success(), + result: ::kube::core::Status::success(), types: request.types, uid: request.uid, converted_objects, @@ -661,9 +664,10 @@ pub(crate) mod versioned { let code = err.http_status_code(); let message = err.join_errors(); ::kube::core::conversion::ConversionResponse { - result: ::kube::client::Status { + result: ::kube::core::Status { status: Some(::kube::core::response::StatusSummary::Failure), message: message.clone(), + metadata: None, reason: message, details: None, code, diff --git a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@renamed_kind.rs.snap b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@renamed_kind.rs.snap index dbb5e5ead..a4b97d5ae 100644 --- a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@renamed_kind.rs.snap +++ b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@renamed_kind.rs.snap @@ -164,9 +164,10 @@ impl FooBar { ) { ::std::result::Result::Ok(request) => request, ::std::result::Result::Err(err) => { - return ::kube::core::conversion::ConversionResponse::invalid(::kube::client::Status { + return ::kube::core::conversion::ConversionResponse::invalid(::kube::core::Status { status: Some(::kube::core::response::StatusSummary::Failure), message: err.to_string(), + metadata: None, reason: err.to_string(), details: None, code: 400, @@ -180,7 +181,7 @@ impl FooBar { ) { ::std::result::Result::Ok(converted_objects) => { ::kube::core::conversion::ConversionResponse { - result: ::kube::client::Status::success(), + result: ::kube::core::Status::success(), types: request.types, uid: request.uid, converted_objects, @@ -190,9 +191,10 @@ impl FooBar { let code = err.http_status_code(); let message = err.join_errors(); ::kube::core::conversion::ConversionResponse { - result: ::kube::client::Status { + result: ::kube::core::Status { status: Some(::kube::core::response::StatusSummary::Failure), message: message.clone(), + metadata: None, reason: message, details: None, code, diff --git a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@shortnames.rs.snap b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@shortnames.rs.snap index 501588df8..c20892b16 100644 --- a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@shortnames.rs.snap +++ b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@shortnames.rs.snap @@ -57,9 +57,10 @@ impl Foo { ) { ::std::result::Result::Ok(request) => request, ::std::result::Result::Err(err) => { - return ::kube::core::conversion::ConversionResponse::invalid(::kube::client::Status { + return ::kube::core::conversion::ConversionResponse::invalid(::kube::core::Status { status: Some(::kube::core::response::StatusSummary::Failure), message: err.to_string(), + metadata: None, reason: err.to_string(), details: None, code: 400, @@ -73,7 +74,7 @@ impl Foo { ) { ::std::result::Result::Ok(converted_objects) => { ::kube::core::conversion::ConversionResponse { - result: ::kube::client::Status::success(), + result: ::kube::core::Status::success(), types: request.types, uid: request.uid, converted_objects, @@ -83,9 +84,10 @@ impl Foo { let code = err.http_status_code(); let message = err.join_errors(); ::kube::core::conversion::ConversionResponse { - result: ::kube::client::Status { + result: ::kube::core::Status { status: Some(::kube::core::response::StatusSummary::Failure), message: message.clone(), + metadata: None, reason: message, details: None, code,