From 97c60b1dfe2eee8cf4e844f8dca55bbb8ff1dc96 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Tue, 6 Oct 2026 14:41:18 +0200 Subject: [PATCH 01/34] WIP: Add support for configuring Iceberg REST catalog --- Cargo.lock | 442 ++++----- Cargo.toml | 5 +- extra/crds.yaml | 864 ++++++++++++++++++ rust/operator-binary/Cargo.toml | 1 + rust/operator-binary/src/catalog/commons.rs | 4 +- rust/operator-binary/src/catalog/config.rs | 9 +- rust/operator-binary/src/catalog/iceberg.rs | 121 ++- .../src/controller/dereference.rs | 12 +- .../src/controller/validate.rs | 2 +- rust/operator-binary/src/crd/affinity.rs | 135 +-- .../src/crd/catalog/commons.rs | 2 +- .../src/crd/catalog/delta_lake.rs | 4 +- .../src/crd/catalog/generic.rs | 4 +- rust/operator-binary/src/crd/catalog/hive.rs | 4 +- .../src/crd/catalog/iceberg.rs | 84 +- rust/operator-binary/src/crd/catalog/mod.rs | 234 ++++- rust/operator-binary/src/crd/mod.rs | 2 +- 17 files changed, 1577 insertions(+), 352 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c7ffa6e58..a495b3bce 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -169,7 +169,7 @@ checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.6", ] [[package]] @@ -279,9 +279,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.13.1" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "block-buffer" @@ -316,9 +316,9 @@ checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" [[package]] name = "cc" -version = "1.4.3" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "509591b7bcd67f4ef775afad7662703b4935daaa6ec0e5605cfb1090b32a2b6d" +checksum = "f74872d07caf508b30a21f6836e7d7016a2eaf7d9ff4f48deaa58cd8a0407630" dependencies = [ "find-msvc-tools", "jobserver", @@ -328,9 +328,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" [[package]] name = "chacha20" @@ -339,7 +339,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "65c35e4b699c7e15ccbe7ee35c005e4fc0a278d22238a2857e6ce2dadeda1b06" dependencies = [ "cfg-if", - "cpufeatures 0.3.0", + "cpufeatures 0.3.1", "rand_core 0.10.1", ] @@ -356,9 +356,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.6.6" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "473c7e07f409a8d772161724aa8db6a765a2532a70f9667eeb7b49d3d02fbdca" +checksum = "aa8876b300ab35ba921adea3dfd70157a46249b33f95c9084ae5709785478946" dependencies = [ "clap_builder", "clap_derive", @@ -366,9 +366,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.6.6" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b48fea5a88e9ae728a2dcbedbfc0e730f7d60da42e1cb049a83c9fb8b789889" +checksum = "ec0797fb7aeb1406c84efac526901f7ec3ead2124f946b494e72879d4b54704d" dependencies = [ "anstream", "anstyle", @@ -378,21 +378,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.6.4" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d012d2b9d65aca7f18f4d9878a045bc17899bba951561ba5ec3c2ba1eed9a061" +checksum = "f9c751b79415d4e559e3d1fcf128e09e720eb673a06d26cf6f392d37d75b66e0" dependencies = [ "heck", "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.6", ] [[package]] name = "clap_lex" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" +checksum = "1c133bc6a41be0d194c306b5506d15e6feeea7b1d6604bd3f8310dfb2ca96486" [[package]] name = "colorchoice" @@ -402,9 +402,9 @@ checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" [[package]] name = "combine" -version = "4.6.7" +version = "4.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +checksum = "cfc320937d09e6de266b31b9afb480f197d7a861be86be7cb2ea7e5d1bfffc5e" dependencies = [ "bytes", "memchr", @@ -462,6 +462,12 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" +[[package]] +name = "core_detect" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f8f80099a98041a3d1622845c271458a2d73e688351bf3cb999266764b81d48" + [[package]] name = "cpufeatures" version = "0.2.17" @@ -473,36 +479,36 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +checksum = "5ca28b0ae3115b884660db4118d803791fd6756b6e88f39c0f3f7859060d7566" dependencies = [ "libc", ] [[package]] name = "crc32fast" -version = "1.5.0" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +checksum = "01a7799fd6b852db0e61728dde9a204c423b44d689dbd432522543614b490e78" dependencies = [ "cfg-if", ] [[package]] name = "crossbeam-channel" -version = "0.5.16" +version = "0.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d85363c37faeca707aef026efa9f3b34d077bce547e48f770770625c6013679e" +checksum = "98b0cc327b5bc766e7fda9c9260cc0fa81b43a8e240440422dff70788e3f9ef1" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.22" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17" +checksum = "a31eee39dddec8330830986fcd7625edb5a24ec90ea038215273bbc3adb08ac6" [[package]] name = "crypto-bigint" @@ -538,12 +544,12 @@ dependencies = [ [[package]] name = "darling" -version = "0.24.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88490bf1b990d87eaaa7ac8aa887f629a08e7359765b4911faf63c3763347d23" +checksum = "ed17f5901b6630b993ca003def43f2f8ef4014fc13b047b57aad617ff32bc2ec" dependencies = [ - "darling_core 0.24.0", - "darling_macro 0.24.0", + "darling_core 0.24.1", + "darling_macro 0.24.1", ] [[package]] @@ -561,15 +567,15 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.24.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "084e274f91c482280130e1e34e0b8d6e66776a060d7b6de7b84289ca778868c4" +checksum = "6837e2cf7485aaae18f86181d2f0e9a7ed297a025e220aeabf63fdebd3a2ddff" dependencies = [ "ident_case", "proc-macro2", "quote", "strsim", - "syn 3.0.3", + "syn 3.0.6", ] [[package]] @@ -585,13 +591,13 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.24.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f5792fa0d41cd2325ce0ffa64f0a340eaebd4971a3a0c5e1ffd2cc488a355e" +checksum = "2ac7135c3ef02b2f7833bbeb1be5ba7f966dcde8a87c6b87f65a778d71a02785" dependencies = [ - "darling_core 0.24.0", + "darling_core 0.24.1", "quote", - "syn 3.0.3", + "syn 3.0.6", ] [[package]] @@ -622,7 +628,7 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e" dependencies = [ - "thiserror 2.0.20", + "thiserror 2.0.21", ] [[package]] @@ -707,7 +713,7 @@ checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.6", ] [[package]] @@ -771,14 +777,14 @@ dependencies = [ "enum-ordinalize", "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.6", ] [[package]] name = "either" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5e8f6c15a24b9a3ee5efec809ccd006d3b30e8b3bb63c39af737c7f87daa1d" +checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" [[package]] name = "elliptic-curve" @@ -802,11 +808,16 @@ dependencies = [ [[package]] name = "encoding_rs" -version = "0.8.35" +version = "0.8.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +checksum = "8e985e0451871ad22fb8d2b6b076e2028a502a0d3950998c2c5c0a4f9b5d9679" dependencies = [ "cfg-if", + "core_detect", + "multiversion_no_op", + "rustversion", + "scopeguard", + "simdutf8", ] [[package]] @@ -844,7 +855,7 @@ checksum = "a65863d15a4ce2888bd2f0f543cc963d3879c3a022c8ee43f6141d479a3ac815" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.6", ] [[package]] @@ -901,9 +912,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.11" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d45db016d36b838f563236e9193d0ee6ce38f3f68b6c94e914b4929c96bbb890" +checksum = "aedcfb3409746eddb02b9e19ebda1c3394f759a152e48ee875a0844d1b955484" [[package]] name = "flagset" @@ -913,12 +924,13 @@ checksum = "b7ac824320a75a52197e8f2d787f6a38b6718bb6897a35142d749af3c0e8f4fe" [[package]] name = "flate2" -version = "1.1.9" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" +checksum = "6e634e2e0ebac1ee034020da1ca582e17ffe4e0f5e985823721e168928136dcb" dependencies = [ "crc32fast", "miniz_oxide", + "zlib-rs", ] [[package]] @@ -1004,7 +1016,7 @@ checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.6", ] [[package]] @@ -1098,7 +1110,7 @@ version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ddddbf932745a6be37109b6112d3ee09696106f848449069d3a57bba937ab82e" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.13.2", "libc", "libgit2-sys", "log", @@ -1145,9 +1157,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.17" +version = "0.4.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f877e75f39e9827ec50a572dd592684ac28c029578726c85f1b2aa6ab807449" +checksum = "ef8e5e5a340588f4452631496976cf8636d4a7ecf600239fdc27615d2530bc16" dependencies = [ "atomic-waker", "bytes", @@ -1258,9 +1270,9 @@ checksum = "15cdd26707701c53297e2fa6afb323d55fbc1d0810c3aec078ae3ef0424c3c15" [[package]] name = "hyper" -version = "1.11.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d22053281f852e11534f5198498373cbb59295120a20771d90f7ed1897490a72" +checksum = "27b501faa50e7a26c3d3560ca625132f4078a17771f4810baf70475ae48cbe43" dependencies = [ "atomic-waker", "bytes", @@ -1280,9 +1292,9 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.9" +version = "0.27.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" +checksum = "dfa8e654703247911e29c23fbeaa261834bd9bb74efba2f9acddc37bfb127f53" dependencies = [ "http", "hyper", @@ -1310,16 +1322,17 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.20" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" +checksum = "ddc03d96684f9226b8a787cdb71488417b53ab5ea8fdb1dac946cb9431cc8bff" dependencies = [ - "base64 0.22.1", + "base64 0.23.1", "bytes", "futures-channel", "futures-util", "http", "http-body", + "httparse", "hyper", "ipnet", "libc", @@ -1425,9 +1438,9 @@ checksum = "e590f038c1464a96894fd6d10127e90a8be4509f56ff7ecef851b15cee0b7caa" [[package]] name = "icu_provider" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92a7ed671a6aad807a8651a2e1782a6598fda9ce5185dd8158549e95a91c6428" +checksum = "d27bbb9d3abbefac45d55f647c9de1d44aafcd1186eb91879afef17c396c3e73" dependencies = [ "displaydoc", "icu_locale_core", @@ -1467,9 +1480,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.14.0" +version = "2.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +checksum = "cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855" dependencies = [ "equivalent", "hashbrown 0.17.1", @@ -1486,9 +1499,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.12.1" +version = "2.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a756c3fac73139e83f14c2d742155dd2b78d3ee56597b419a0579b7bdd6dd78" +checksum = "791930b43c0d5973160d90a8f3894509f2b273430f5c5c73b668636d0287c5c0" [[package]] name = "is_terminal_polyfill" @@ -1533,9 +1546,9 @@ dependencies = [ [[package]] name = "jiff" -version = "0.2.35" +version = "0.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "668b7183bd07af9a4885f5c35b0cc5c83c4607a913c16b7e17291832910d2dcc" +checksum = "0ab1baf72f08796de0260609515130699b890ac25f30e610ad894bc5856cafdb" dependencies = [ "defmt", "jiff-core", @@ -1550,18 +1563,19 @@ dependencies = [ [[package]] name = "jiff-core" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7feca88439efe53da3754500c1851dedf3cb36c524dd5cf8225cc0794de95d09" +checksum = "5e52fe76043ccecc9005d2305ebaadf7d7fc0cc89ca6baa10a94d6bc68c7128c" dependencies = [ "defmt", + "log", ] [[package]] name = "jiff-static" -version = "0.2.35" +version = "0.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a69dcb3a21cfb32ce1cd056169337ca284af0766dd766e7878819b251a49204" +checksum = "378268a1116ad67ae6228701118ac9f491d78fda38a40a1f1a9e1348de6f7212" dependencies = [ "jiff-core", "proc-macro2", @@ -1596,7 +1610,7 @@ dependencies = [ "jni-sys", "log", "simd_cesu8", - "thiserror 2.0.20", + "thiserror 2.0.21", "walkdir", "windows-link", ] @@ -1645,9 +1659,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.104" +version = "0.3.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e0c1080212aad755ea003d18543e8768dd432c48819efd73a7bf1e39b7a5a3a" +checksum = "7883d941dae510fb2d978fc3fe018c71c9e2892fd38854de3e8b92c2e5ad9cc5" dependencies = [ "cfg-if", "futures-util", @@ -1664,20 +1678,20 @@ dependencies = [ "schemars", "serde", "serde_json", - "thiserror 2.0.20", + "thiserror 2.0.21", ] [[package]] name = "jsonpath-rust" -version = "1.0.8" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e07021eefc09f897611b067ba7897b5e9266edfc902768418968772e5bb06a7" +checksum = "d23892d4caa103325a558250e9f4e406d81cf64f7c01679ae7a64e0413321e51" dependencies = [ "pest", "pest_derive", "regex", "serde_json", - "thiserror 2.0.20", + "thiserror 2.0.21", ] [[package]] @@ -1706,9 +1720,9 @@ dependencies = [ [[package]] name = "k8s-version" version = "0.1.3" -source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.119.0#ed84d456ff0b8324db3d7444659cb207564be8c9" +source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ffrom_docs#5d7902142fe5c7ab0a820117a80b5f4a4e34d5c9" dependencies = [ - "darling 0.24.0", + "darling 0.24.1", "regex", "snafu 0.9.2", ] @@ -1769,7 +1783,7 @@ dependencies = [ "serde", "serde-saphyr", "serde_json", - "thiserror 2.0.20", + "thiserror 2.0.21", "tokio", "tokio-util", "tower", @@ -1793,7 +1807,7 @@ dependencies = [ "serde", "serde-value", "serde_json", - "thiserror 2.0.20", + "thiserror 2.0.21", ] [[package]] @@ -1831,7 +1845,7 @@ dependencies = [ "pin-project", "serde", "serde_json", - "thiserror 2.0.20", + "thiserror 2.0.21", "tokio", "tokio-util", "tracing", @@ -1839,24 +1853,24 @@ dependencies = [ [[package]] name = "lazy_static" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +checksum = "20870f649af7073d53e38067b2a84312175d56ea15217e1b15bc83506ec50afb" dependencies = [ "spin", ] [[package]] name = "libc" -version = "0.2.189" +version = "0.2.190" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" +checksum = "ce5d3ddc6d3fa000eb1536d85e147bfe31aacaba692ed6a876f95cb7c855be78" [[package]] name = "libgit2-sys" -version = "0.18.7+1.9.6" +version = "0.18.8+1.9.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23c7391e4b9f4ffab1a624223cc1d7385ff9a678f490768add717de7ea2f4d89" +checksum = "7f7c568b25d7489bc3fb2988ed69ab111d2944d2f5fec3d5c987fe545ea97b50" dependencies = [ "cc", "libc", @@ -1899,9 +1913,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.33" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" [[package]] name = "matchers" @@ -1932,9 +1946,9 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "miniz_oxide" -version = "0.8.9" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +checksum = "b63fbc4a50860e98e7b2aa7804ded1db5cbc3aff9193adaff57a6931bf7c4b4c" dependencies = [ "adler2", "simd-adler32", @@ -1942,15 +1956,21 @@ dependencies = [ [[package]] name = "mio" -version = "1.2.2" +version = "1.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427" +checksum = "1788edb87fdc09c7e26304471e2f5be8cdefb1b6930d6e3985fc02ff53bf86ee" dependencies = [ "libc", "wasi", "windows-sys 0.61.2", ] +[[package]] +name = "multiversion_no_op" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "743fb55ba31b18fb1ecef6bdc9aa2743314978ac084044301a7eee33fb99a20d" + [[package]] name = "nohash-hasher" version = "0.2.0" @@ -1977,7 +1997,7 @@ dependencies = [ "num-integer", "num-iter", "num-traits", - "rand 0.8.7", + "rand 0.8.8", "smallvec", "zeroize", ] @@ -2045,7 +2065,7 @@ dependencies = [ "futures-sink", "js-sys", "pin-project-lite", - "thiserror 2.0.20", + "thiserror 2.0.21", "tracing", ] @@ -2088,7 +2108,7 @@ dependencies = [ "opentelemetry_sdk", "prost", "reqwest", - "thiserror 2.0.20", + "thiserror 2.0.21", "tokio", "tonic", "tonic-types", @@ -2126,7 +2146,7 @@ dependencies = [ "percent-encoding", "portable-atomic", "rand 0.9.5", - "thiserror 2.0.20", + "thiserror 2.0.21", "tokio", "tokio-stream", ] @@ -2208,9 +2228,9 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" -version = "2.9.0" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a07a60cc7a4d00c91f95c685609d1d2f79050e6804b70ebedd7650f0b839bcf" +checksum = "45d3aca230fad2e6f6317ca0a72724338c4960cb97168a85cdee66df4a9a21a8" dependencies = [ "memchr", "ucd-trie", @@ -2218,9 +2238,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.9.0" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3a83744a5c8455b8b3e0dc5031362780a347c878bdd11584d1a8984228cc88d" +checksum = "284b60557f2c4a2e72ad3f2d34d42685a2fa4a6a61d0d2a10c0ae2a5e916c2cf" dependencies = [ "pest", "pest_generator", @@ -2228,9 +2248,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.9.0" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0cd3451aa3de60d4b9a1e736885e4dea6b31617598026f12256ad566d63304a" +checksum = "1d9d1f08a115309ee99268cf85e5228e0e56aa9caf8841ec12866b6be07c3109" dependencies = [ "pest", "pest_meta", @@ -2241,9 +2261,9 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.9.0" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e04d3a0849e241d7dfce834c83b1c5edc8622009e8dd51a12ba1927c32f05496" +checksum = "ed93ba1a9ffcca32130a5188701c81c0c49cf00d4b7c5007d5148951d743adcb" dependencies = [ "pest", ] @@ -2309,9 +2329,9 @@ checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85" [[package]] name = "portable-atomic-util" -version = "0.2.7" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618" +checksum = "10ab3eb7f3becc3a1cbc4f2c6f20267996cfc1a6467a873763411b136a122715" dependencies = [ "portable-atomic", ] @@ -2327,9 +2347,9 @@ dependencies = [ [[package]] name = "powerfmt" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" +checksum = "4a6394b9e965e73d0a289ee54f589087e2c676aedf60885baf52c76b771e4958" [[package]] name = "ppv-lite86" @@ -2422,9 +2442,9 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "rand" -version = "0.8.7" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22f6172bdec972074665ed81ed53b71da00bfc44b65a753cfde883ec4c702a1a" +checksum = "e058c7de0b26af77780c769414d6257830bb240f3c38477dbc2c16e5f54d6d4c" dependencies = [ "rand_chacha 0.3.1", "rand_core 0.6.4", @@ -2442,9 +2462,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.10.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" +checksum = "65c9fb96cbc91e3478eaae79a69fcd3f1ae4ad052e471fe6732fff548984b4af" dependencies = [ "chacha20", "getrandom 0.4.3", @@ -2501,7 +2521,7 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.13.2", ] [[package]] @@ -2521,7 +2541,7 @@ checksum = "92ecd8964f8453721699a1ed72037b0db49ce2f5a5138486ee89bed6f67cdf3a" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.6", ] [[package]] @@ -2561,11 +2581,11 @@ checksum = "ba39f3699c378cd8970968dcbff9c43159ea4cfbd88d43c00b22f2ef10a435d2" [[package]] name = "reqwest" -version = "0.13.4" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219c5811de6525e5416c7d5d53bb656d3afdbc6c5af816e0802bcfa42dbdc1c3" +checksum = "16a1cfa75cc186dd73d5818e510e042e40927bccc9c236b061cea97e1eb08029" dependencies = [ - "base64 0.22.1", + "base64 0.23.1", "bytes", "futures-channel", "futures-core", @@ -2637,9 +2657,9 @@ dependencies = [ [[package]] name = "rstest" -version = "0.26.1" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5a3193c063baaa2a95a33f03035c8a72b83d97a54916055ba22d35ed3839d49" +checksum = "948203e6d13b83e51a90d7cf236dd58a0065f23f4b902f00f306e7eb2bd09b9c" dependencies = [ "futures-timer", "futures-util", @@ -2648,9 +2668,9 @@ dependencies = [ [[package]] name = "rstest_macros" -version = "0.26.1" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c845311f0ff7951c5506121a9ad75aec44d083c31583b2ea5a30bcb0b0abba0" +checksum = "a8d92eaf7b6e51e12471d71ddc72608e7151573de44099aacfbb1128177c0da4" dependencies = [ "cfg-if", "glob", @@ -2711,9 +2731,9 @@ dependencies = [ [[package]] name = "rustls-platform-verifier" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d1e2536ce4f35f4846aa13bff16bd0ff40157cdb14cc056c7b14ba41233ba0" +checksum = "1167586491e2b18b8bfbb293e8180ec17c201c4f076d7cb3070ca964e7598f98" dependencies = [ "core-foundation", "core-foundation-sys", @@ -2732,15 +2752,15 @@ dependencies = [ [[package]] name = "rustls-platform-verifier-android" -version = "0.1.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" +checksum = "eec689c0bc40ff2458a5977b6619cb718087084a18e02a131c599b62d05e1a5f" [[package]] name = "rustls-webpki" -version = "0.103.14" +version = "0.103.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0527518605e68109d875e248ea259b6758801cf165e4b2c2733ae3b51f12535a" +checksum = "f3c3cf1d8b1e7d4927e2d154c3fcb02979afb9939629c62cd9048d4f07b60ac2" dependencies = [ "ring", "rustls-pki-types", @@ -2800,7 +2820,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 3.0.3", + "syn 3.0.6", ] [[package]] @@ -2838,7 +2858,7 @@ version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.13.2", "core-foundation", "core-foundation-sys", "libc", @@ -2921,7 +2941,7 @@ checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.6", ] [[package]] @@ -2932,7 +2952,7 @@ checksum = "f852137cce035d6a4df67ccce505ff6b3e9fd3a10e3e52b24dc71e650bb1a9bd" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.6", ] [[package]] @@ -3152,14 +3172,14 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "stackable-certs" version = "0.4.1" -source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.119.0#ed84d456ff0b8324db3d7444659cb207564be8c9" +source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ffrom_docs#5d7902142fe5c7ab0a820117a80b5f4a4e34d5c9" dependencies = [ "const-oid", "ecdsa", "k8s-openapi", "kube", "p256", - "rand 0.10.2", + "rand 0.10.3", "rand_core 0.6.4", "rsa", "sha2", @@ -3176,7 +3196,7 @@ dependencies = [ [[package]] name = "stackable-operator" version = "0.119.0" -source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.119.0#ed84d456ff0b8324db3d7444659cb207564be8c9" +source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ffrom_docs#5d7902142fe5c7ab0a820117a80b5f4a4e34d5c9" dependencies = [ "base64 0.23.1", "clap", @@ -3193,7 +3213,7 @@ dependencies = [ "json-patch", "k8s-openapi", "kube", - "rand 0.10.2", + "rand 0.10.3", "regex", "schemars", "semver", @@ -3220,18 +3240,18 @@ dependencies = [ [[package]] name = "stackable-operator-derive" version = "0.3.1" -source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.119.0#ed84d456ff0b8324db3d7444659cb207564be8c9" +source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ffrom_docs#5d7902142fe5c7ab0a820117a80b5f4a4e34d5c9" dependencies = [ - "darling 0.24.0", + "darling 0.24.1", "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.6", ] [[package]] name = "stackable-shared" version = "0.1.2" -source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.119.0#ed84d456ff0b8324db3d7444659cb207564be8c9" +source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ffrom_docs#5d7902142fe5c7ab0a820117a80b5f4a4e34d5c9" dependencies = [ "jiff", "k8s-openapi", @@ -3248,7 +3268,7 @@ dependencies = [ [[package]] name = "stackable-telemetry" version = "0.6.5" -source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.119.0#ed84d456ff0b8324db3d7444659cb207564be8c9" +source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ffrom_docs#5d7902142fe5c7ab0a820117a80b5f4a4e34d5c9" dependencies = [ "axum", "clap", @@ -3290,12 +3310,13 @@ dependencies = [ "strum", "tokio", "tracing", + "url", ] [[package]] name = "stackable-versioned" version = "0.11.1" -source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.119.0#ed84d456ff0b8324db3d7444659cb207564be8c9" +source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ffrom_docs#5d7902142fe5c7ab0a820117a80b5f4a4e34d5c9" dependencies = [ "kube", "schemars", @@ -3309,10 +3330,10 @@ dependencies = [ [[package]] name = "stackable-versioned-macros" version = "0.11.1" -source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.119.0#ed84d456ff0b8324db3d7444659cb207564be8c9" +source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ffrom_docs#5d7902142fe5c7ab0a820117a80b5f4a4e34d5c9" dependencies = [ "convert_case", - "darling 0.24.0", + "darling 0.24.1", "indoc", "itertools 0.15.0", "k8s-openapi", @@ -3320,13 +3341,13 @@ dependencies = [ "kube", "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.6", ] [[package]] name = "stackable-webhook" version = "0.10.0" -source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.119.0#ed84d456ff0b8324db3d7444659cb207564be8c9" +source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ffrom_docs#5d7902142fe5c7ab0a820117a80b5f4a4e34d5c9" dependencies = [ "arc-swap", "async-trait", @@ -3339,7 +3360,7 @@ dependencies = [ "kube", "opentelemetry", "opentelemetry-semantic-conventions", - "rand 0.10.2", + "rand 0.10.3", "serde", "serde_json", "snafu 0.9.2", @@ -3349,7 +3370,7 @@ dependencies = [ "tokio", "tokio-rustls", "tower", - "tower-http 0.7.0", + "tower-http 0.7.1", "tracing", "tracing-opentelemetry", "x509-cert", @@ -3418,9 +3439,9 @@ dependencies = [ [[package]] name = "syn" -version = "3.0.3" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -3438,13 +3459,13 @@ dependencies = [ [[package]] name = "synstructure" -version = "0.13.2" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +checksum = "901704edd0dfe137f1987838ee4f259e4e063c31371bdb423f7ae38ec6f77f02" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.6", ] [[package]] @@ -3458,11 +3479,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.20" +version = "2.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" +checksum = "09e52cb86a36cede5cb101bf8908837b3e4c6e5e59fe7fd85c23fb56200d189e" dependencies = [ - "thiserror-impl 2.0.20", + "thiserror-impl 2.0.21", ] [[package]] @@ -3478,13 +3499,13 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.20" +version = "2.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" +checksum = "fe5197923287db20a58125f0bc85c062f7f2c892de97b18c356f9efb14b28524" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.6", ] [[package]] @@ -3559,9 +3580,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.53.1" +version = "1.53.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" +checksum = "e95f91fcc7a621e8b030f6aa23c71fe9838ae2fb4d8118b75602a328f5144044" dependencies = [ "bytes", "libc", @@ -3582,14 +3603,14 @@ checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.6", ] [[package]] name = "tokio-rustls" -version = "0.26.4" +version = "0.26.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" +checksum = "c9cc2678c2cdd569ef8215e2afd7954ada2ae20b4fdd2c5fe6139a3b02d105db" dependencies = [ "rustls", "tokio", @@ -3632,9 +3653,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.25.13+spec-1.1.0" +version = "0.25.15+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6975367e4d2ef766d86af01ffad14b622fecc8d4357a998fbc4deb6e9bacaf9b" +checksum = "1340ea94a5856333492c9064b02c778b191dd2c853778d9609debdcdfea3a614" dependencies = [ "indexmap", "toml_datetime", @@ -3726,7 +3747,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" dependencies = [ "base64 0.22.1", - "bitflags 2.13.1", + "bitflags 2.13.2", "bytes", "futures-util", "http", @@ -3742,11 +3763,11 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b11f75e912b0c2be01b63d8cf8057b8c3f97cf34abb3d431a3a4c8675498e233" +checksum = "08a05a66a4fdd61cbbe0a1d755ffe0ca6aba159dd4820936a0ff8a8278245b9c" dependencies = [ - "bitflags 2.13.1", + "bitflags 2.13.2", "bytes", "http", "http-body", @@ -3789,7 +3810,7 @@ checksum = "050686193eb999b4bb3bc2acfa891a13da00f79734704c4b8b4ef1a10b368a3c" dependencies = [ "crossbeam-channel", "symlink", - "thiserror 2.0.20", + "thiserror 2.0.21", "time", "tracing-subscriber", ] @@ -3893,9 +3914,9 @@ checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "unicode-segmentation" @@ -3954,9 +3975,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.24.1" +version = "1.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cefc03fd367c0c6d4305de1b312cf00248c4114f4a0418ce6a6af769e3b0bd9" +checksum = "97277d36b9c3ace13e58fa6e753f8b0bbbf302a18dd193240d70f9e29681059a" dependencies = [ "js-sys", "wasm-bindgen", @@ -3992,9 +4013,9 @@ dependencies = [ [[package]] name = "want" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +checksum = "ec4cdd0dd910afe868b7ef477227d8d538b46b3075031afee8a9f2acb0a2ed0b" dependencies = [ "try-lock", ] @@ -4016,9 +4037,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.127" +version = "0.2.129" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b70935747edd64d89de3efa29d73789b806c15798f8e7dca4d8ac356b50ce70" +checksum = "9bb54f33acc68fd454578d9820b0bde1a1a3d17aa17bb7b6595806d02886d409" dependencies = [ "cfg-if", "once_cell", @@ -4029,19 +4050,20 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.77" +version = "0.4.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b7777d5cc23d0e91404e53ce2d5e8ec7acae3026b16233dba62cd3246457950" +checksum = "3cbab34de2d982e9b48e18d216d04c4a6f641066ff19ffb699980f591ee3610e" dependencies = [ "js-sys", + "tokio", "wasm-bindgen", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.127" +version = "0.2.129" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77775f8f3f7217702089053b94958f8f54061a3f663417df76e19cbdcca29bc1" +checksum = "2e29d0c35b16e224a7eeb5cd2d25e3e1968fbd65604117b44d3b789d00ee8535" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4049,31 +4071,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.127" +version = "0.2.129" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e11d33f857dc2fb11b8bc75aee111aa9cbeb12cd9f25efd3d4c2a3dd4e235284" +checksum = "6f501a8bc3719dba86ef8ae4728879c08001bea749eb1333ac5b91e040e2a6b7" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.6", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.127" +version = "0.2.129" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef64dbcc55df09c7e5a46182d181c2cfa3e925f3da937ea764728b4bbb9dcbf" +checksum = "23f0c9c52aa7cd7d77769a4cfe2a9adb1b331f489a41d912ce14513d5ab995c6" dependencies = [ "unicode-ident", ] [[package]] name = "web-sys" -version = "0.3.104" +version = "0.3.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c435338968042f4f59a557f690a253676d47ce13ceb55d70100e7facf6620a30" +checksum = "88261b9deccee56594c11a3460c462c41f58d148598fe70ad77070126a68aba4" dependencies = [ "js-sys", "wasm-bindgen", @@ -4302,30 +4324,30 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.2" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" +checksum = "ec8ebde2db3681e8c9980cc27822030e68752690ddfa9473e739aeb4dbde6d71" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.6", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.56" +version = "0.8.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556764e583adb45a9f8d413c2a147fa7e8d821e48e12b14fd560b607998b75eb" +checksum = "6400fc4bb7426f6faac3fb07566122bb18622e3022bd2c36426a92ed489b1dbe" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.56" +version = "0.8.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ab42fc20575779bd240faa45f94a74256f755c0fa9e89f0ede20d91d0cdfc1" +checksum = "99c27cc7525bad4df59a45e073c45b2c2aa820efb588234cc23a547ec69a34db" dependencies = [ "proc-macro2", "quote", @@ -4343,13 +4365,13 @@ dependencies = [ [[package]] name = "zerofrom-derive" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" +checksum = "f75b4683f6c7f45248d4d64056a24298c6281e0993356d7d1b4a1a962ef10d4a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.6", "synstructure", ] @@ -4397,15 +4419,21 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.5" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f212a141d820099d57ffafb9569be9617a6f27d3dc881fbee8fb56642f917a9" +checksum = "34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.6", ] +[[package]] +name = "zlib-rs" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b268e58e7c693d7c271f93ffc4ba3b380412554231c85bf61ca7af91042a4112" + [[package]] name = "zmij" version = "1.0.23" diff --git a/Cargo.toml b/Cargo.toml index 525f2e4a5..d17e72383 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,7 +19,7 @@ clap = "4.6" const_format = "0.2" futures = { version = "0.3", features = ["compat"] } indoc = "2.0" -rstest = "0.26" +rstest = "0.27" semver = "1.0" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" @@ -28,7 +28,8 @@ snafu = "0.9" strum = { version = "0.28", features = ["derive"] } tokio = { version = "1.53", features = ["full"] } tracing = "0.1" +url = "2.5" [patch."https://github.com/stackabletech/operator-rs.git"] -# stackable-operator = { git = "https://github.com/stackabletech//operator-rs.git", branch = "main"} +stackable-operator = { git = "https://github.com/stackabletech//operator-rs.git", branch = "feat/from_docs" } # stackable-operator = { path = "../operator-rs/crates/stackable-operator" } diff --git a/extra/crds.yaml b/extra/crds.yaml index 901063b68..c964be412 100644 --- a/extra/crds.yaml +++ b/extra/crds.yaml @@ -4329,3 +4329,867 @@ spec: type: object served: true storage: true + - name: v1alpha2 + schema: + openAPIV3Schema: + description: The TrinoCatalog resource can be used to define catalogs in Kubernetes objects. + properties: + spec: + description: |- + The TrinoCatalog resource can be used to define catalogs in Kubernetes objects. + Read more about it in the [Trino operator concept docs](https://docs.stackable.tech/home/nightly/trino/concepts) + and the [Trino operator usage guide](https://docs.stackable.tech/home/nightly/trino/usage-guide/catalogs/). + The documentation also contains a list of all the supported backends. + properties: + configOverrides: + additionalProperties: + type: string + default: {} + description: |- + The `configOverrides` allow overriding arbitrary Trino settings. + For example, for Hive you could add `hive.metastore.username: trino`. + type: object + connector: + description: The `connector` defines which connector is used. + oneOf: + - required: + - blackHole + - required: + - deltaLake + - required: + - googleSheet + - required: + - generic + - required: + - hive + - required: + - iceberg + - required: + - postgresql + - required: + - tpcds + - required: + - tpch + properties: + blackHole: + description: A [Black Hole](https://docs.stackable.tech/home/nightly/trino/usage-guide/catalogs/black-hole) connector. + type: object + deltaLake: + description: An [Delta Lake](https://docs.stackable.tech/home/nightly/trino/usage-guide/catalogs/delta-lake) connector. + properties: + hdfs: + description: |- + Connection to an HDFS cluster. + Please make sure that the underlying Hive metastore also has access to the HDFS. + nullable: true + properties: + configMap: + description: Name of the [discovery ConfigMap](https://docs.stackable.tech/home/nightly/concepts/service_discovery) providing information about the HDFS cluster. + maxLength: 253 + minLength: 1 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ + type: string + required: + - configMap + type: object + metastore: + description: Mandatory connection to a Hive Metastore, which will be used as a storage for metadata. + properties: + configMap: + description: Name of the [discovery ConfigMap](https://docs.stackable.tech/home/nightly/concepts/service_discovery) providing information about the Hive metastore. + maxLength: 253 + minLength: 1 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ + type: string + required: + - configMap + type: object + s3: + description: |- + Connection to an S3 store. + Please make sure that the underlying Hive metastore also has access to the S3 store. + Learn more about S3 configuration in the [S3 concept docs](https://docs.stackable.tech/home/nightly/concepts/s3). + nullable: true + oneOf: + - required: + - inline + - required: + - reference + properties: + inline: + description: |- + S3 connection definition as a resource. + Learn more on the [S3 concept documentation](https://docs.stackable.tech/home/nightly/concepts/s3). + properties: + accessStyle: + default: VirtualHosted + description: |- + Which access style to use. + Defaults to virtual hosted-style as most of the data products out there. + Have a look at the [AWS documentation](https://docs.aws.amazon.com/AmazonS3/latest/userguide/VirtualHosting.html). + enum: + - Path + - VirtualHosted + type: string + credentials: + description: |- + If the S3 uses authentication you have to specify you S3 credentials. + In the most cases a [SecretClass](https://docs.stackable.tech/home/nightly/secret-operator/secretclass) + providing `accessKey` and `secretKey` is sufficient. + nullable: true + properties: + scope: + description: |- + [Scope](https://docs.stackable.tech/home/nightly/secret-operator/scope) of the + [SecretClass](https://docs.stackable.tech/home/nightly/secret-operator/secretclass). + nullable: true + properties: + listenerVolumes: + default: [] + description: |- + The listener volume scope allows Node and Service scopes to be inferred from the applicable listeners. + This must correspond to Volume names in the Pod that mount Listeners. + items: + type: string + type: array + node: + default: false + description: |- + The node scope is resolved to the name of the Kubernetes Node object that the Pod is running on. + This will typically be the DNS name of the node. + type: boolean + pod: + default: false + description: |- + The pod scope is resolved to the name of the Kubernetes Pod. + This allows the secret to differentiate between StatefulSet replicas. + type: boolean + services: + default: [] + description: |- + The service scope allows Pod objects to specify custom scopes. + This should typically correspond to Service objects that the Pod participates in. + items: + type: string + type: array + type: object + secretClass: + description: '[SecretClass](https://docs.stackable.tech/home/nightly/secret-operator/secretclass) providing the requested secrets.' + type: string + required: + - secretClass + type: object + host: + description: 'Host of the S3 server without any protocol or port. For example: `west1.my-cloud.com`.' + type: string + port: + description: |- + Port the S3 server listens on. + If not specified the product will determine the port to use. + format: uint16 + maximum: 65535.0 + minimum: 0.0 + nullable: true + type: integer + region: + default: + name: us-east-1 + description: |- + Bucket region used for signing headers (sigv4). + + This defaults to `us-east-1` which is compatible with other implementations such as Minio. + + WARNING: Some products use the Hadoop S3 implementation which falls back to us-east-2. + properties: + name: + default: us-east-1 + type: string + type: object + tls: + description: Use a TLS connection. If not specified no TLS will be used. + nullable: true + properties: + verification: + description: The verification method used to verify the certificates of the server and/or the client. + oneOf: + - required: + - none + - required: + - server + properties: + none: + description: Use TLS but don't verify certificates. + type: object + server: + description: Use TLS and a CA certificate to verify the server. + properties: + caCert: + description: CA cert to verify the server. + oneOf: + - required: + - webPki + - required: + - secretClass + properties: + secretClass: + description: |- + Name of the [SecretClass](https://docs.stackable.tech/home/nightly/secret-operator/secretclass) which will provide the CA certificate. + Note that a SecretClass does not need to have a key but can also work with just a CA certificate, + so if you got provided with a CA cert but don't have access to the key you can still use this method. + type: string + webPki: + description: |- + Use TLS and the CA certificates trusted by the common web browsers to verify the server. + This can be useful when you e.g. use public AWS S3 or other public available services. + type: object + type: object + required: + - caCert + type: object + type: object + required: + - verification + type: object + required: + - host + type: object + reference: + type: string + type: object + required: + - metastore + type: object + generic: + description: A [generic](https://docs.stackable.tech/home/nightly/trino/usage-guide/catalogs/generic) connector. + properties: + connectorName: + description: |- + Name of the Trino connector. + Will be passed to `connector.name`. + type: string + properties: + additionalProperties: + oneOf: + - required: + - value + - required: + - valueFromSecret + - required: + - valueFromConfigMap + properties: + value: + type: string + valueFromConfigMap: + description: Selects a key from a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + optional: + description: Specify whether the ConfigMap or its key must be defined + type: boolean + required: + - key + - name + type: object + valueFromSecret: + description: SecretKeySelector selects a key of a Secret. + properties: + key: + description: The key of the secret to select from. Must be a valid secret key. + type: string + name: + description: 'Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + optional: + description: Specify whether the Secret or its key must be defined + type: boolean + required: + - key + - name + type: object + type: object + default: {} + description: |- + A map of properties to put in the connector configuration file. + They can be specified either as a raw value or be read from a Secret or ConfigMap. + type: object + required: + - connectorName + type: object + googleSheet: + description: A [Google sheets](https://docs.stackable.tech/home/nightly/trino/usage-guide/catalogs/google-sheets) connector. + properties: + cache: + description: |- + Cache the contents of sheets. + This is used to reduce Google Sheets API usage and latency. + nullable: true + properties: + sheetsDataExpireAfterWrite: + description: How long to cache spreadsheet data or metadata, defaults to `5m`. + nullable: true + type: string + sheetsDataMaxCacheSize: + description: Maximum number of spreadsheets to cache, defaults to 1000. + nullable: true + type: string + type: object + credentialsSecret: + description: |- + The Secret containing the Google API JSON key file. + The key used from the Secret is `credentials`. + type: string + metadataSheetId: + description: Sheet ID of the spreadsheet, that contains the table mapping. + type: string + required: + - credentialsSecret + - metadataSheetId + type: object + hive: + description: An [Apache Hive](https://docs.stackable.tech/home/nightly/trino/usage-guide/catalogs/hive) connector. + properties: + hdfs: + description: |- + Connection to an HDFS cluster. + Please make sure that the underlying Hive metastore also has access to the HDFS. + nullable: true + properties: + configMap: + description: Name of the [discovery ConfigMap](https://docs.stackable.tech/home/nightly/concepts/service_discovery) providing information about the HDFS cluster. + maxLength: 253 + minLength: 1 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ + type: string + required: + - configMap + type: object + metastore: + description: Mandatory connection to a Hive Metastore, which will be used as a storage for metadata. + properties: + configMap: + description: Name of the [discovery ConfigMap](https://docs.stackable.tech/home/nightly/concepts/service_discovery) providing information about the Hive metastore. + maxLength: 253 + minLength: 1 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ + type: string + required: + - configMap + type: object + s3: + description: |- + Connection to an S3 store. + Please make sure that the underlying Hive metastore also has access to the S3 store. + Learn more about S3 configuration in the [S3 concept docs](https://docs.stackable.tech/home/nightly/concepts/s3). + nullable: true + oneOf: + - required: + - inline + - required: + - reference + properties: + inline: + description: |- + S3 connection definition as a resource. + Learn more on the [S3 concept documentation](https://docs.stackable.tech/home/nightly/concepts/s3). + properties: + accessStyle: + default: VirtualHosted + description: |- + Which access style to use. + Defaults to virtual hosted-style as most of the data products out there. + Have a look at the [AWS documentation](https://docs.aws.amazon.com/AmazonS3/latest/userguide/VirtualHosting.html). + enum: + - Path + - VirtualHosted + type: string + credentials: + description: |- + If the S3 uses authentication you have to specify you S3 credentials. + In the most cases a [SecretClass](https://docs.stackable.tech/home/nightly/secret-operator/secretclass) + providing `accessKey` and `secretKey` is sufficient. + nullable: true + properties: + scope: + description: |- + [Scope](https://docs.stackable.tech/home/nightly/secret-operator/scope) of the + [SecretClass](https://docs.stackable.tech/home/nightly/secret-operator/secretclass). + nullable: true + properties: + listenerVolumes: + default: [] + description: |- + The listener volume scope allows Node and Service scopes to be inferred from the applicable listeners. + This must correspond to Volume names in the Pod that mount Listeners. + items: + type: string + type: array + node: + default: false + description: |- + The node scope is resolved to the name of the Kubernetes Node object that the Pod is running on. + This will typically be the DNS name of the node. + type: boolean + pod: + default: false + description: |- + The pod scope is resolved to the name of the Kubernetes Pod. + This allows the secret to differentiate between StatefulSet replicas. + type: boolean + services: + default: [] + description: |- + The service scope allows Pod objects to specify custom scopes. + This should typically correspond to Service objects that the Pod participates in. + items: + type: string + type: array + type: object + secretClass: + description: '[SecretClass](https://docs.stackable.tech/home/nightly/secret-operator/secretclass) providing the requested secrets.' + type: string + required: + - secretClass + type: object + host: + description: 'Host of the S3 server without any protocol or port. For example: `west1.my-cloud.com`.' + type: string + port: + description: |- + Port the S3 server listens on. + If not specified the product will determine the port to use. + format: uint16 + maximum: 65535.0 + minimum: 0.0 + nullable: true + type: integer + region: + default: + name: us-east-1 + description: |- + Bucket region used for signing headers (sigv4). + + This defaults to `us-east-1` which is compatible with other implementations such as Minio. + + WARNING: Some products use the Hadoop S3 implementation which falls back to us-east-2. + properties: + name: + default: us-east-1 + type: string + type: object + tls: + description: Use a TLS connection. If not specified no TLS will be used. + nullable: true + properties: + verification: + description: The verification method used to verify the certificates of the server and/or the client. + oneOf: + - required: + - none + - required: + - server + properties: + none: + description: Use TLS but don't verify certificates. + type: object + server: + description: Use TLS and a CA certificate to verify the server. + properties: + caCert: + description: CA cert to verify the server. + oneOf: + - required: + - webPki + - required: + - secretClass + properties: + secretClass: + description: |- + Name of the [SecretClass](https://docs.stackable.tech/home/nightly/secret-operator/secretclass) which will provide the CA certificate. + Note that a SecretClass does not need to have a key but can also work with just a CA certificate, + so if you got provided with a CA cert but don't have access to the key you can still use this method. + type: string + webPki: + description: |- + Use TLS and the CA certificates trusted by the common web browsers to verify the server. + This can be useful when you e.g. use public AWS S3 or other public available services. + type: object + type: object + required: + - caCert + type: object + type: object + required: + - verification + type: object + required: + - host + type: object + reference: + type: string + type: object + required: + - metastore + type: object + iceberg: + description: An [Apache Iceberg](https://docs.stackable.tech/home/nightly/trino/usage-guide/catalogs/iceberg) connector. + properties: + catalog: + description: |- + Connection to a metadata catalog, which will be used as a storage for metadata. + + We support the following backends: + + * REST catalog + * Hive metastore + * User provided + + Details can be found on the corresponding documentation + oneOf: + - required: + - rest + - required: + - hiveMetastore + - required: + - userProvided + properties: + hiveMetastore: + description: Use a Hive metastore to store metadata. + properties: + configMap: + description: Name of the [discovery ConfigMap](https://docs.stackable.tech/home/nightly/concepts/service_discovery) providing information about the Hive metastore. + maxLength: 253 + minLength: 1 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ + type: string + required: + - configMap + type: object + rest: + description: (Recommended) use a REST catalog to store metadata. + properties: + security: + default: + none: {} + description: How to authenticate against the REST catalog. + oneOf: + - required: + - none + - required: + - oAuth2 + properties: + none: + description: Don't authenticate against the REST catalog (chosen by default). + type: object + oAuth2: + description: |- + Use OAuth2 to authenticate against the REST catalog. + + Note that we only support configuring a subset of Trino's properties, you might need to use + `configOverrides` to be able to set all [available properties](https://trino.io/docs/current/object-storage/metastores.html#iceberg-specific-metastores). + properties: + credential: + description: The credential to present to the REST catalog. + oneOf: + - required: + - tokenSecretName + - required: + - credentialSecretName + properties: + credentialSecretName: + description: The Secret needs to contain the `username` and `password` keys. + type: string + tokenSecretName: + description: |- + Authenticate using a bearer token. + + The Secret needs to contain the `token` key. + type: string + type: object + serverUri: + description: The endpoint to retrieve access token from OAuth2 Server. + format: uri + type: string + required: + - credential + - serverUri + type: object + type: object + uri: + description: URL of the rest catalog server. + format: uri + type: string + required: + - uri + type: object + userProvided: + description: |- + The operator doesn't configure any catalog, the user needs to do that, + e.g. using `configOverrides`. + type: object + type: object + hdfs: + description: |- + Connection to an HDFS cluster. + Please make sure that the underlying Hive metastore also has access to the HDFS. + nullable: true + properties: + configMap: + description: Name of the [discovery ConfigMap](https://docs.stackable.tech/home/nightly/concepts/service_discovery) providing information about the HDFS cluster. + maxLength: 253 + minLength: 1 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ + type: string + required: + - configMap + type: object + s3: + description: |- + Connection to an S3 store. + Please make sure that the underlying Hive metastore also has access to the S3 store. + Learn more about S3 configuration in the [S3 concept docs](https://docs.stackable.tech/home/nightly/concepts/s3). + nullable: true + oneOf: + - required: + - inline + - required: + - reference + properties: + inline: + description: |- + S3 connection definition as a resource. + Learn more on the [S3 concept documentation](https://docs.stackable.tech/home/nightly/concepts/s3). + properties: + accessStyle: + default: VirtualHosted + description: |- + Which access style to use. + Defaults to virtual hosted-style as most of the data products out there. + Have a look at the [AWS documentation](https://docs.aws.amazon.com/AmazonS3/latest/userguide/VirtualHosting.html). + enum: + - Path + - VirtualHosted + type: string + credentials: + description: |- + If the S3 uses authentication you have to specify you S3 credentials. + In the most cases a [SecretClass](https://docs.stackable.tech/home/nightly/secret-operator/secretclass) + providing `accessKey` and `secretKey` is sufficient. + nullable: true + properties: + scope: + description: |- + [Scope](https://docs.stackable.tech/home/nightly/secret-operator/scope) of the + [SecretClass](https://docs.stackable.tech/home/nightly/secret-operator/secretclass). + nullable: true + properties: + listenerVolumes: + default: [] + description: |- + The listener volume scope allows Node and Service scopes to be inferred from the applicable listeners. + This must correspond to Volume names in the Pod that mount Listeners. + items: + type: string + type: array + node: + default: false + description: |- + The node scope is resolved to the name of the Kubernetes Node object that the Pod is running on. + This will typically be the DNS name of the node. + type: boolean + pod: + default: false + description: |- + The pod scope is resolved to the name of the Kubernetes Pod. + This allows the secret to differentiate between StatefulSet replicas. + type: boolean + services: + default: [] + description: |- + The service scope allows Pod objects to specify custom scopes. + This should typically correspond to Service objects that the Pod participates in. + items: + type: string + type: array + type: object + secretClass: + description: '[SecretClass](https://docs.stackable.tech/home/nightly/secret-operator/secretclass) providing the requested secrets.' + type: string + required: + - secretClass + type: object + host: + description: 'Host of the S3 server without any protocol or port. For example: `west1.my-cloud.com`.' + type: string + port: + description: |- + Port the S3 server listens on. + If not specified the product will determine the port to use. + format: uint16 + maximum: 65535.0 + minimum: 0.0 + nullable: true + type: integer + region: + default: + name: us-east-1 + description: |- + Bucket region used for signing headers (sigv4). + + This defaults to `us-east-1` which is compatible with other implementations such as Minio. + + WARNING: Some products use the Hadoop S3 implementation which falls back to us-east-2. + properties: + name: + default: us-east-1 + type: string + type: object + tls: + description: Use a TLS connection. If not specified no TLS will be used. + nullable: true + properties: + verification: + description: The verification method used to verify the certificates of the server and/or the client. + oneOf: + - required: + - none + - required: + - server + properties: + none: + description: Use TLS but don't verify certificates. + type: object + server: + description: Use TLS and a CA certificate to verify the server. + properties: + caCert: + description: CA cert to verify the server. + oneOf: + - required: + - webPki + - required: + - secretClass + properties: + secretClass: + description: |- + Name of the [SecretClass](https://docs.stackable.tech/home/nightly/secret-operator/secretclass) which will provide the CA certificate. + Note that a SecretClass does not need to have a key but can also work with just a CA certificate, + so if you got provided with a CA cert but don't have access to the key you can still use this method. + type: string + webPki: + description: |- + Use TLS and the CA certificates trusted by the common web browsers to verify the server. + This can be useful when you e.g. use public AWS S3 or other public available services. + type: object + type: object + required: + - caCert + type: object + type: object + required: + - verification + type: object + required: + - host + type: object + reference: + type: string + type: object + required: + - catalog + type: object + postgresql: + description: An [PostgreSQL](https://docs.stackable.tech/home/nightly/trino/usage-guide/catalogs/postgresql) connector. + properties: + credentialsSecretName: + description: |- + Name of a Secret containing the `username` and `password` keys used to authenticate + against the PostgreSQL server. + type: string + database: + description: Name of the database (schema) to connect to. + type: string + host: + description: Hostname or IP address of the PostgreSQL server. + type: string + parameters: + additionalProperties: + type: string + default: {} + description: |- + Additional map of JDBC connection parameters to append to the connection URL. The given + `HashMap` will be converted to query parameters in the form of + `?param1=value1¶m2=value2`. + type: object + port: + default: 5432 + description: Port the PostgreSQL server is listening on. Defaults to `5432`. + format: uint16 + maximum: 65535.0 + minimum: 0.0 + type: integer + required: + - credentialsSecretName + - database + - host + type: object + tpcds: + description: A [TPC-DS](https://docs.stackable.tech/home/nightly/trino/usage-guide/catalogs/tpcds) connector. + type: object + tpch: + description: A [TPC-H](https://docs.stackable.tech/home/nightly/trino/usage-guide/catalogs/tpch) connector. + type: object + type: object + experimentalConfigRemovals: + default: [] + description: |- + List of config properties which should be removed. + + This is helpful, because Trino fails to start in case you have any unused config + properties. The removals are executed after the `configOverrides`. + + This field is experimental, and might be replaced by a more generic mechanism to edit config properties + items: + type: string + type: array + name: + default: + inferred: + replaceHyphensWithUnderscores: false + description: The name of the catalog + oneOf: + - required: + - inferred + properties: + inferred: + description: |- + Infer the catalog name from the `.metadata.name` of the TrinoCatalog resource. + + This ensures that no catalog names clash, as there can only be one TrinoCatalog with a + given name. + properties: + replaceHyphensWithUnderscores: + default: false + description: |- + Whether hyphens (`-`) in the name of the catalog should be replaced by underscores (`_`). + + This is recommended because Kubernetes only allows `a-z` and `-`, while Trino + requires quoting for catalogs containing `-` characters. This mechanism allows + you to use valid Kubernetes names, but keeps the convenience of using `_` in + catalog names. + type: boolean + type: object + type: object + required: + - connector + type: object + required: + - spec + title: TrinoCatalog + type: object + served: true + storage: false diff --git a/rust/operator-binary/Cargo.toml b/rust/operator-binary/Cargo.toml index bd8892701..cc22479e6 100644 --- a/rust/operator-binary/Cargo.toml +++ b/rust/operator-binary/Cargo.toml @@ -32,6 +32,7 @@ snafu.workspace = true strum.workspace = true tokio.workspace = true tracing.workspace = true +url.workspace = true [dev-dependencies] rstest.workspace = true diff --git a/rust/operator-binary/src/catalog/commons.rs b/rust/operator-binary/src/catalog/commons.rs index da6dbfee8..d4955c113 100644 --- a/rust/operator-binary/src/catalog/commons.rs +++ b/rust/operator-binary/src/catalog/commons.rs @@ -23,13 +23,13 @@ use crate::{ CONFIG_DIR_NAME, catalog::{ TrinoCatalogName, - commons::{HdfsConnection, MetastoreConnection}, + commons::{HdfsConnection, HiveMetastoreConnection}, }, }, }; #[async_trait] -impl ExtendCatalogConfig for MetastoreConnection { +impl ExtendCatalogConfig for HiveMetastoreConnection { async fn extend_catalog_config( &self, catalog_config: &mut CatalogConfig, diff --git a/rust/operator-binary/src/catalog/config.rs b/rust/operator-binary/src/catalog/config.rs index 851620a3a..2ca97bc78 100644 --- a/rust/operator-binary/src/catalog/config.rs +++ b/rust/operator-binary/src/catalog/config.rs @@ -10,7 +10,10 @@ use stackable_operator::{ use crate::{ catalog::{FromTrinoCatalogError, ToCatalogConfig}, - crd::catalog::{TrinoCatalogConnector, TrinoCatalogName, v1alpha1}, + crd::catalog::{ + TrinoCatalogName, + v1alpha2::{self, TrinoCatalogConnector}, + }, }; #[derive(Clone, Debug)] @@ -107,7 +110,7 @@ impl CatalogConfig { pub async fn from_catalog( catalog_name: &TrinoCatalogName, - catalog: &v1alpha1::TrinoCatalog, + catalog: &v1alpha2::TrinoCatalog, client: &Client, catalog_namespace: &NamespaceName, ) -> Result { @@ -144,7 +147,7 @@ impl CatalogConfig { } } -fn calculate_env_name(catalog_name: &TrinoCatalogName, property: impl Into) -> String { +pub fn calculate_env_name(catalog_name: &TrinoCatalogName, property: impl Into) -> String { let catalog = catalog_name.to_string().replace(['.', '-'], "_"); let property = property.into().replace(['.', '-'], "_"); format!("CATALOG_{catalog}_{property}").to_uppercase() diff --git a/rust/operator-binary/src/catalog/iceberg.rs b/rust/operator-binary/src/catalog/iceberg.rs index 2b18826dc..937c81044 100644 --- a/rust/operator-binary/src/catalog/iceberg.rs +++ b/rust/operator-binary/src/catalog/iceberg.rs @@ -1,9 +1,23 @@ use async_trait::async_trait; -use stackable_operator::{client::Client, v2::types::kubernetes::NamespaceName}; +use stackable_operator::{ + client::Client, + k8s_openapi::api::core::v1::{EnvVar, EnvVarSource, SecretKeySelector}, + v2::types::kubernetes::NamespaceName, +}; use crate::{ - catalog::{ExtendCatalogConfig, FromTrinoCatalogError, ToCatalogConfig, config::CatalogConfig}, - crd::catalog::{TrinoCatalogName, iceberg::IcebergConnector}, + catalog::{ + ExtendCatalogConfig, FromTrinoCatalogError, ToCatalogConfig, + config::{CatalogConfig, calculate_env_name}, + }, + crd::catalog::{ + TrinoCatalogName, + iceberg::{ + IcebergCatalogConnection, IcebergRestCatalogConnection, + IcebergRestCatalogOAuthCredential, IcebergRestCatalogSecurity, + }, + v1alpha2::IcebergConnector, + }, }; pub const CONNECTOR_NAME: &str = "iceberg"; @@ -25,10 +39,20 @@ impl ToCatalogConfig for IcebergConnector { // See https://trino.io/docs/current/connector/iceberg.html config.add_property("iceberg.security", "allow-all"); - if let Some(metastore) = &self.metastore { - metastore - .extend_catalog_config(&mut config, catalog_name, catalog_namespace, client) - .await?; + match &self.catalog { + IcebergCatalogConnection::Rest(iceberg_rest_catalog_connection) => { + iceberg_rest_catalog_connection + .extend_catalog_config(&mut config, catalog_name, catalog_namespace, client) + .await?; + } + IcebergCatalogConnection::HiveMetastore(hive_metastore_connection) => { + hive_metastore_connection + .extend_catalog_config(&mut config, catalog_name, catalog_namespace, client) + .await?; + } + IcebergCatalogConnection::UserProvided {} => { + // Nothing to do, the user will set it up + } } if let Some(ref s3) = self.s3 { @@ -44,3 +68,86 @@ impl ToCatalogConfig for IcebergConnector { Ok(config) } } + +#[async_trait] +impl ExtendCatalogConfig for IcebergRestCatalogConnection { + async fn extend_catalog_config( + &self, + catalog_config: &mut CatalogConfig, + catalog_name: &TrinoCatalogName, + _catalog_namespace: &NamespaceName, + _client: &Client, + ) -> Result<(), FromTrinoCatalogError> { + catalog_config.add_property("iceberg.catalog.type", "rest"); + catalog_config.add_property("iceberg.rest-catalog.uri", self.uri.as_str()); + + // We explicitly use a match here to catch further additions + match &self.security { + IcebergRestCatalogSecurity::None {} => { + catalog_config.add_property("iceberg.rest-catalog.security", "NONE"); + } + IcebergRestCatalogSecurity::OAuth2 { + server_uri, + credential, + } => { + catalog_config.add_property("iceberg.rest-catalog.security", "OAUTH2"); + catalog_config.add_property( + "iceberg.rest-catalog.oauth2.server-uri", + server_uri.as_str(), + ); + match credential { + IcebergRestCatalogOAuthCredential::TokenSecretName(secret_name) => { + // We can't use `add_env_property_from_secret`, as we need to concatenate + // user and password in the Trino configuration. So instead we come up with + // our own envs and bind them. + let property = "iceberg.rest-catalog.oauth2.credential"; + let base_env_name = calculate_env_name(catalog_name, property); + let username_env_name = format!("{base_env_name}_USERNAME"); + let password_env_name = format!("{base_env_name}_PASSWORD"); + catalog_config.add_property( + property, + format!("${{ENV:{username_env_name}}}:${{ENV:{password_env_name}}}"), + ); + + catalog_config.env_bindings.push(EnvVar { + name: username_env_name, + value_from: Some(EnvVarSource { + secret_key_ref: Some(SecretKeySelector { + name: secret_name.to_owned(), + key: "username".to_owned(), + ..Default::default() + }), + ..Default::default() + }), + ..Default::default() + }); + catalog_config.env_bindings.push(EnvVar { + name: password_env_name, + value_from: Some(EnvVarSource { + secret_key_ref: Some(SecretKeySelector { + name: secret_name.to_owned(), + key: "password".to_owned(), + ..Default::default() + }), + ..Default::default() + }), + ..Default::default() + }); + } + IcebergRestCatalogOAuthCredential::CredentialSecretName(secret_name) => { + catalog_config.add_env_property_from_secret( + "iceberg.rest-catalog.oauth2.token", + SecretKeySelector { + name: secret_name.to_owned(), + key: "token".to_owned(), + ..Default::default() + }, + ) + } + } + } + } + + Ok(()) + } +} diff --git a/rust/operator-binary/src/controller/dereference.rs b/rust/operator-binary/src/controller/dereference.rs index fe7af645e..78327964b 100644 --- a/rust/operator-binary/src/controller/dereference.rs +++ b/rust/operator-binary/src/controller/dereference.rs @@ -49,7 +49,7 @@ pub enum Error { #[snafu(display("failed to parse {catalog}"))] ParseCatalog { source: FromTrinoCatalogError, - catalog: ObjectRef, + catalog: ObjectRef, }, #[snafu(display("failed to configure fault tolerant execution"))] @@ -77,7 +77,7 @@ type Result = std::result::Result; /// Kubernetes objects referenced from the TrinoCluster spec, fetched from the cluster. pub struct DereferencedObjects { pub resolved_authentication_classes: Vec, - pub catalog_definitions: Vec, + pub catalog_definitions: Vec, pub catalogs: Vec, pub trino_opa_config: Option, pub resolved_fte_config: Option, @@ -97,7 +97,7 @@ pub async fn dereference( .context(AuthenticationClassRetrievalSnafu)?; let catalog_definitions = client - .list_with_label_selector::( + .list_with_label_selector::( namespace.as_ref(), &trino.spec.cluster_config.catalog_label_selector, ) @@ -168,12 +168,12 @@ pub async fn dereference( /// Determines the Trino catalog name based on user settings and the Kubernetes TrinoCatalog object /// name. fn determine_catalog_name( - catalog_name_spec: &catalog::v1alpha1::TrinoCatalogNameSpec, + catalog_name_spec: &catalog::v1alpha2::TrinoCatalogNameSpec, catalog_object_name: &str, ) -> Result { // A `match` is used because we might support other ways of naming (e.g. custom) later. match catalog_name_spec { - catalog::v1alpha1::TrinoCatalogNameSpec::Inferred { + catalog::v1alpha2::TrinoCatalogNameSpec::Inferred { replace_hyphens_with_underscores, } => { let mut catalog_name = catalog_object_name.to_owned(); @@ -194,7 +194,7 @@ mod tests { fn determine_catalog_name_replaces_hyphens() { let inferred = |replace_hyphens_with_underscores| { determine_catalog_name( - &catalog::v1alpha1::TrinoCatalogNameSpec::Inferred { + &catalog::v1alpha2::TrinoCatalogNameSpec::Inferred { replace_hyphens_with_underscores, }, "my-postgres", diff --git a/rust/operator-binary/src/controller/validate.rs b/rust/operator-binary/src/controller/validate.rs index f6dc77dd3..1c6b78f81 100644 --- a/rust/operator-binary/src/controller/validate.rs +++ b/rust/operator-binary/src/controller/validate.rs @@ -375,7 +375,7 @@ pub(crate) fn merged_role_group_config( trino: &v1alpha1::TrinoCluster, trino_role: &TrinoRole, role_group: &str, - trino_catalogs: &[crate::crd::catalog::v1alpha1::TrinoCatalog], + trino_catalogs: &[crate::crd::catalog::v1alpha2::TrinoCatalog], ) -> TrinoRoleGroupConfig { // The shared test clusters do not enable the Vector agent, so no aggregator ConfigMap name is // required here. diff --git a/rust/operator-binary/src/crd/affinity.rs b/rust/operator-binary/src/crd/affinity.rs index fdcb9f00f..c5484c13f 100644 --- a/rust/operator-binary/src/crd/affinity.rs +++ b/rust/operator-binary/src/crd/affinity.rs @@ -7,75 +7,86 @@ use stackable_operator::{ use crate::crd::{ APP_NAME, TrinoRole, - catalog::{self, TrinoCatalogConnector}, + catalog::{ + self, + commons::HiveMetastoreConnection, + iceberg::IcebergCatalogConnection, + v1alpha2::{IcebergConnector, TrinoCatalogConnector}, + }, v1alpha1, }; pub fn get_affinity( cluster_name: &str, role: &TrinoRole, - trino_catalogs: &[catalog::v1alpha1::TrinoCatalog], + trino_catalogs: &[catalog::v1alpha2::TrinoCatalog], opa_config: Option<&v1alpha1::TrinoAuthorizationOpaConfig>, ) -> StackableAffinityFragment { let affinity_between_cluster_pods = affinity_between_cluster_pods(APP_NAME, cluster_name, 20); let mut affinities = vec![affinity_between_cluster_pods]; - let additional_affinities: Vec<_> = match role { - TrinoRole::Coordinator => trino_catalogs - .iter() - .filter_map(|catalog| match &catalog.spec.connector { - TrinoCatalogConnector::Hive(hive) => Some(&hive.metastore.config_map), - TrinoCatalogConnector::Iceberg(iceberg) => iceberg - .metastore - .as_ref() - .map(|metastore| &metastore.config_map), - TrinoCatalogConnector::DeltaLake(delta_lake) => { - Some(&delta_lake.metastore.config_map) - } - TrinoCatalogConnector::BlackHole(_) - | TrinoCatalogConnector::Generic(_) - | TrinoCatalogConnector::GoogleSheet(_) - | TrinoCatalogConnector::Postgresql(_) - | TrinoCatalogConnector::Tpcds(_) - | TrinoCatalogConnector::Tpch(_) => None, - }) - .map(|hive_cluster_name| { - affinity_between_role_pods( - "hive", - hive_cluster_name.as_ref(), // The discovery cm has the same name as the HiveCluster itself - "metastore", - 50, - ) - }) - .collect(), - TrinoRole::Worker => trino_catalogs - .iter() - .filter_map(|catalog| match &catalog.spec.connector { - TrinoCatalogConnector::Hive(hive) => { - hive.hdfs.as_ref().map(|hdfs| &hdfs.config_map) - } - TrinoCatalogConnector::Iceberg(iceberg) => { - iceberg.hdfs.as_ref().map(|hdfs| &hdfs.config_map) - } - TrinoCatalogConnector::DeltaLake(delta_lake) => { - delta_lake.hdfs.as_ref().map(|hdfs| &hdfs.config_map) - } - TrinoCatalogConnector::BlackHole(_) - | TrinoCatalogConnector::Generic(_) - | TrinoCatalogConnector::GoogleSheet(_) - | TrinoCatalogConnector::Postgresql(_) - | TrinoCatalogConnector::Tpcds(_) - | TrinoCatalogConnector::Tpch(_) => None, - }) - .map(|hdfs_cluster_name| { - affinity_between_role_pods( - "hdfs", - hdfs_cluster_name.as_ref(), // The discovery cm has the same name as the HdfsCluster itself - "datanode", - 50, - ) - }) - .collect(), - }; + let additional_affinities: Vec<_> = + match role { + TrinoRole::Coordinator => trino_catalogs + .iter() + .filter_map(|catalog| match &catalog.spec.connector { + TrinoCatalogConnector::Hive(hive) => Some(&hive.metastore.config_map), + TrinoCatalogConnector::Iceberg(IcebergConnector { + catalog: + IcebergCatalogConnection::HiveMetastore(HiveMetastoreConnection { + config_map, + }), + .. + }) => Some(config_map), + // No Hive metastore is used + TrinoCatalogConnector::Iceberg(_) => None, + TrinoCatalogConnector::DeltaLake(delta_lake) => { + Some(&delta_lake.metastore.config_map) + } + TrinoCatalogConnector::BlackHole(_) + | TrinoCatalogConnector::Generic(_) + | TrinoCatalogConnector::GoogleSheet(_) + | TrinoCatalogConnector::Postgresql(_) + | TrinoCatalogConnector::Tpcds(_) + | TrinoCatalogConnector::Tpch(_) => None, + }) + .map(|hive_cluster_name| { + affinity_between_role_pods( + "hive", + hive_cluster_name.as_ref(), // The discovery cm has the same name as the HiveCluster itself + "metastore", + 50, + ) + }) + .collect(), + TrinoRole::Worker => trino_catalogs + .iter() + .filter_map(|catalog| match &catalog.spec.connector { + TrinoCatalogConnector::Hive(hive) => { + hive.hdfs.as_ref().map(|hdfs| &hdfs.config_map) + } + TrinoCatalogConnector::Iceberg(iceberg) => { + iceberg.hdfs.as_ref().map(|hdfs| &hdfs.config_map) + } + TrinoCatalogConnector::DeltaLake(delta_lake) => { + delta_lake.hdfs.as_ref().map(|hdfs| &hdfs.config_map) + } + TrinoCatalogConnector::BlackHole(_) + | TrinoCatalogConnector::Generic(_) + | TrinoCatalogConnector::GoogleSheet(_) + | TrinoCatalogConnector::Postgresql(_) + | TrinoCatalogConnector::Tpcds(_) + | TrinoCatalogConnector::Tpch(_) => None, + }) + .map(|hdfs_cluster_name| { + affinity_between_role_pods( + "hdfs", + hdfs_cluster_name.as_ref(), // The discovery cm has the same name as the HdfsCluster itself + "datanode", + 50, + ) + }) + .collect(), + }; affinities.extend(additional_affinities); // Only the coordinator talks to OPA (it does the authorization checks for the whole cluster), @@ -261,7 +272,7 @@ mod tests { hdfs: configMap: simple-hdfs "#; - let hive_catalog_1: catalog::v1alpha1::TrinoCatalog = + let hive_catalog_1: catalog::v1alpha2::TrinoCatalog = yaml_from_str_singleton_map(input).expect("illegal test input"); let input = r#" @@ -275,7 +286,7 @@ mod tests { connector: tpch: {} "#; - let tpch_catalog: catalog::v1alpha1::TrinoCatalog = + let tpch_catalog: catalog::v1alpha2::TrinoCatalog = yaml_from_str_singleton_map(input).expect("illegal test input"); let input = r#" @@ -293,7 +304,7 @@ mod tests { s3: reference: minio "#; - let hive_catalog_2: catalog::v1alpha1::TrinoCatalog = + let hive_catalog_2: catalog::v1alpha2::TrinoCatalog = yaml_from_str_singleton_map(input).expect("illegal test input"); let merged_config = crate::controller::validate::merged_role_group_config( diff --git a/rust/operator-binary/src/crd/catalog/commons.rs b/rust/operator-binary/src/crd/catalog/commons.rs index a4fe7c2ef..70e6a4aa1 100644 --- a/rust/operator-binary/src/crd/catalog/commons.rs +++ b/rust/operator-binary/src/crd/catalog/commons.rs @@ -6,7 +6,7 @@ use stackable_operator::{ #[derive(Clone, Debug, Deserialize, Eq, JsonSchema, PartialEq, Serialize)] #[serde(rename_all = "camelCase")] -pub struct MetastoreConnection { +pub struct HiveMetastoreConnection { /// Name of the [discovery ConfigMap](DOCS_BASE_URL_PLACEHOLDER/concepts/service_discovery) providing information about the Hive metastore. pub config_map: ConfigMapName, } diff --git a/rust/operator-binary/src/crd/catalog/delta_lake.rs b/rust/operator-binary/src/crd/catalog/delta_lake.rs index 1d200c0a6..7d915ceae 100644 --- a/rust/operator-binary/src/crd/catalog/delta_lake.rs +++ b/rust/operator-binary/src/crd/catalog/delta_lake.rs @@ -4,7 +4,7 @@ use stackable_operator::{ schemars::{self, JsonSchema}, }; -use super::commons::{HdfsConnection, MetastoreConnection}; +use super::commons::{HdfsConnection, HiveMetastoreConnection}; // This struct is similar to [`super::hive::HiveConnector`], but we do not `#[serde(flatten)]` it here, to avoid changing // stuff there and missing that these settings don't apply to other connectors (such as Iceberg or Delta Lake). @@ -12,7 +12,7 @@ use super::commons::{HdfsConnection, MetastoreConnection}; #[serde(rename_all = "camelCase")] pub struct DeltaLakeConnector { /// Mandatory connection to a Hive Metastore, which will be used as a storage for metadata. - pub metastore: MetastoreConnection, + pub metastore: HiveMetastoreConnection, /// Connection to an S3 store. /// Please make sure that the underlying Hive metastore also has access to the S3 store. diff --git a/rust/operator-binary/src/crd/catalog/generic.rs b/rust/operator-binary/src/crd/catalog/generic.rs index a83e6c78e..ea6d8ac99 100644 --- a/rust/operator-binary/src/crd/catalog/generic.rs +++ b/rust/operator-binary/src/crd/catalog/generic.rs @@ -38,7 +38,7 @@ pub enum Property { #[cfg(test)] mod tests { use super::*; - use crate::crd::catalog::{TrinoCatalogConnector, v1alpha1}; + use crate::crd::catalog::v1alpha1; #[test] fn test_cr_parsing() { @@ -71,7 +71,7 @@ mod tests { assert_eq!( catalog.spec.connector, - TrinoCatalogConnector::Generic(GenericConnector { + v1alpha1::TrinoCatalogConnector::Generic(GenericConnector { connector_name: "postgresql".to_string(), properties: BTreeMap::from([ ( diff --git a/rust/operator-binary/src/crd/catalog/hive.rs b/rust/operator-binary/src/crd/catalog/hive.rs index edd5cf717..dcc9c28a4 100644 --- a/rust/operator-binary/src/crd/catalog/hive.rs +++ b/rust/operator-binary/src/crd/catalog/hive.rs @@ -4,13 +4,13 @@ use stackable_operator::{ schemars::{self, JsonSchema}, }; -use super::commons::{HdfsConnection, MetastoreConnection}; +use super::commons::{HdfsConnection, HiveMetastoreConnection}; #[derive(Clone, Debug, Deserialize, Eq, JsonSchema, PartialEq, Serialize)] #[serde(rename_all = "camelCase")] pub struct HiveConnector { /// Mandatory connection to a Hive Metastore, which will be used as a storage for metadata. - pub metastore: MetastoreConnection, + pub metastore: HiveMetastoreConnection, /// Connection to an S3 store. /// Please make sure that the underlying Hive metastore also has access to the S3 store. diff --git a/rust/operator-binary/src/crd/catalog/iceberg.rs b/rust/operator-binary/src/crd/catalog/iceberg.rs index 1b0425aef..715e72cff 100644 --- a/rust/operator-binary/src/crd/catalog/iceberg.rs +++ b/rust/operator-binary/src/crd/catalog/iceberg.rs @@ -1,28 +1,70 @@ use serde::{Deserialize, Serialize}; -use stackable_operator::{ - crd::s3, - schemars::{self, JsonSchema}, -}; +use stackable_operator::schemars::{self, JsonSchema}; +use url::Url; -use super::commons::{HdfsConnection, MetastoreConnection}; +use super::commons::HiveMetastoreConnection; -// This struct is similar to [`super::hive::HiveConnector`], but we do not `#[serde(flatten)]` it here, to avoid changing -// stuff there and missing that these settings don't apply to other connectors (such as Iceberg or Delta Lake). #[derive(Clone, Debug, Deserialize, Eq, JsonSchema, PartialEq, Serialize)] #[serde(rename_all = "camelCase")] -pub struct IcebergConnector { - /// Optional connection to a Hive Metastore, which will be used as a storage for metadata. +pub enum IcebergCatalogConnection { + /// (Recommended) use a REST catalog to store metadata. + Rest(IcebergRestCatalogConnection), + + /// Use a Hive metastore to store metadata. + HiveMetastore(HiveMetastoreConnection), + + /// The operator doesn't configure any catalog, the user needs to do that, + /// e.g. using `configOverrides`. + UserProvided {}, +} + +#[derive(Clone, Debug, Deserialize, Eq, JsonSchema, PartialEq, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct IcebergRestCatalogConnection { + /// URL of the rest catalog server. + pub uri: Url, + + /// How to authenticate against the REST catalog. + #[serde(default)] + pub security: IcebergRestCatalogSecurity, +} + +#[derive(Clone, Debug, Deserialize, Eq, JsonSchema, PartialEq, Serialize)] +#[serde(rename_all = "camelCase")] +pub enum IcebergRestCatalogSecurity { + /// Don't authenticate against the REST catalog (chosen by default). + None {}, + + /// Use OAuth2 to authenticate against the REST catalog. + /// + /// Note that we only support configuring a subset of Trino's properties, you might need to use + /// `configOverrides` to be able to set all [available properties](https://trino.io/docs/current/object-storage/metastores.html#iceberg-specific-metastores). + #[serde(rename_all = "camelCase")] + OAuth2 { + /// The endpoint to retrieve access token from OAuth2 Server. + server_uri: Url, + + /// The credential to present to the REST catalog. + credential: IcebergRestCatalogOAuthCredential, + }, +} + +impl Default for IcebergRestCatalogSecurity { + fn default() -> Self { + Self::None {} + } +} + +#[derive(Clone, Debug, Deserialize, Eq, JsonSchema, PartialEq, Serialize)] +#[serde(rename_all = "camelCase")] +pub enum IcebergRestCatalogOAuthCredential { + /// Authenticate using a bearer token. + /// + /// The Secret needs to contain the `token` key. + TokenSecretName(String), + + // The credential to exchange for a token in the OAuth2 client credentials flow with the server. /// - /// The connection is optional, as Iceberg also supports other catalogs, such as a REST catalog, - /// which (currently) can only be added using configOverrides. - pub metastore: Option, - - /// Connection to an S3 store. - /// Please make sure that the underlying Hive metastore also has access to the S3 store. - /// Learn more about S3 configuration in the [S3 concept docs](DOCS_BASE_URL_PLACEHOLDER/concepts/s3). - pub s3: Option, - - /// Connection to an HDFS cluster. - /// Please make sure that the underlying Hive metastore also has access to the HDFS. - pub hdfs: Option, + /// The Secret needs to contain the `username` and `password` keys. + CredentialSecretName(String), } diff --git a/rust/operator-binary/src/crd/catalog/mod.rs b/rust/operator-binary/src/crd/catalog/mod.rs index e65004257..6a3913ad1 100644 --- a/rust/operator-binary/src/crd/catalog/mod.rs +++ b/rust/operator-binary/src/crd/catalog/mod.rs @@ -15,7 +15,6 @@ use black_hole::BlackHoleConnector; use generic::GenericConnector; use google_sheet::GoogleSheetConnector; use hive::HiveConnector; -use iceberg::IcebergConnector; use serde::{Deserialize, Serialize}; use stackable_operator::{ attributed_string_type, @@ -26,19 +25,23 @@ use stackable_operator::{ use tpcds::TpcdsConnector; use tpch::TpchConnector; -use self::delta_lake::DeltaLakeConnector; -use crate::crd::catalog::postgresql::PostgresqlConnector; +use crate::crd::catalog::{ + commons::{HdfsConnection, HiveMetastoreConnection}, + delta_lake::DeltaLakeConnector, + iceberg::IcebergCatalogConnection, + postgresql::PostgresqlConnector, +}; #[versioned( version(name = "v1alpha1"), + version(name = "v1alpha2"), crates( kube_core = "stackable_operator::kube::core", kube_client = "stackable_operator::kube::client", k8s_openapi = "stackable_operator::k8s_openapi", schemars = "stackable_operator::schemars", versioned = "stackable_operator::versioned", - ), - skip(from) + ) )] pub mod versioned { /// The TrinoCatalog resource can be used to define catalogs in Kubernetes objects. @@ -97,6 +100,74 @@ pub mod versioned { replace_hyphens_with_underscores: bool, }, } + + #[derive(Clone, Debug, Deserialize, JsonSchema, PartialEq, Serialize)] + #[serde(rename_all = "camelCase")] + pub enum TrinoCatalogConnector { + /// A [Black Hole](DOCS_BASE_URL_PLACEHOLDER/trino/usage-guide/catalogs/black-hole) connector. + BlackHole(BlackHoleConnector), + + /// An [Delta Lake](DOCS_BASE_URL_PLACEHOLDER/trino/usage-guide/catalogs/delta-lake) connector. + DeltaLake(DeltaLakeConnector), + + /// A [Google sheets](DOCS_BASE_URL_PLACEHOLDER/trino/usage-guide/catalogs/google-sheets) connector. + GoogleSheet(GoogleSheetConnector), + + /// A [generic](DOCS_BASE_URL_PLACEHOLDER/trino/usage-guide/catalogs/generic) connector. + Generic(GenericConnector), + + /// An [Apache Hive](DOCS_BASE_URL_PLACEHOLDER/trino/usage-guide/catalogs/hive) connector. + Hive(HiveConnector), + + /// An [Apache Iceberg](DOCS_BASE_URL_PLACEHOLDER/trino/usage-guide/catalogs/iceberg) connector. + Iceberg(IcebergConnector), + + /// An [PostgreSQL](DOCS_BASE_URL_PLACEHOLDER/trino/usage-guide/catalogs/postgresql) connector. + Postgresql(PostgresqlConnector), + + /// A [TPC-DS](DOCS_BASE_URL_PLACEHOLDER/trino/usage-guide/catalogs/tpcds) connector. + Tpcds(TpcdsConnector), + + /// A [TPC-H](DOCS_BASE_URL_PLACEHOLDER/trino/usage-guide/catalogs/tpch) connector. + Tpch(TpchConnector), + } + + // Note that this struct needs to live here (instead of in `iceberg.rs`), so that it's part of + // the same `versioned` module as the struct that reference it. + #[derive(Clone, Debug, Deserialize, Eq, JsonSchema, PartialEq, Serialize)] + #[serde(rename_all = "camelCase")] + pub struct IcebergConnector { + /// Connection to a metadata catalog, which will be used as a storage for metadata. + /// + /// We support the following backends: + /// + /// * REST catalog + /// * Hive metastore + /// * User provided + /// + /// Details can be found on the corresponding documentation + #[versioned(changed( + since = "v1alpha2", + from_name = "metastore", + from_type = "Option", + from_docs = r#" + Optional connection to a Hive Metastore, which will be used as a storage for metadata. + + The connection is optional, as Iceberg also supports other catalogs, such as a REST catalog, + which (currently) can only be added using configOverrides. + "# + ))] + pub catalog: IcebergCatalogConnection, + + /// Connection to an S3 store. + /// Please make sure that the underlying Hive metastore also has access to the S3 store. + /// Learn more about S3 configuration in the [S3 concept docs](DOCS_BASE_URL_PLACEHOLDER/concepts/s3). + pub s3: Option, + + /// Connection to an HDFS cluster. + /// Please make sure that the underlying Hive metastore also has access to the HDFS. + pub hdfs: Option, + } } impl Default for v1alpha1::TrinoCatalogNameSpec { @@ -107,35 +178,37 @@ impl Default for v1alpha1::TrinoCatalogNameSpec { } } -#[derive(Clone, Debug, Deserialize, JsonSchema, PartialEq, Serialize)] -#[serde(rename_all = "camelCase")] -pub enum TrinoCatalogConnector { - /// A [Black Hole](DOCS_BASE_URL_PLACEHOLDER/trino/usage-guide/catalogs/black-hole) connector. - BlackHole(BlackHoleConnector), - - /// An [Delta Lake](DOCS_BASE_URL_PLACEHOLDER/trino/usage-guide/catalogs/delta-lake) connector. - DeltaLake(DeltaLakeConnector), - - /// A [Google sheets](DOCS_BASE_URL_PLACEHOLDER/trino/usage-guide/catalogs/google-sheets) connector. - GoogleSheet(GoogleSheetConnector), - - /// A [generic](DOCS_BASE_URL_PLACEHOLDER/trino/usage-guide/catalogs/generic) connector. - Generic(GenericConnector), - - /// An [Apache Hive](DOCS_BASE_URL_PLACEHOLDER/trino/usage-guide/catalogs/hive) connector. - Hive(HiveConnector), - - /// An [Apache Iceberg](DOCS_BASE_URL_PLACEHOLDER/trino/usage-guide/catalogs/iceberg) connector. - Iceberg(IcebergConnector), - - /// An [PostgreSQL](DOCS_BASE_URL_PLACEHOLDER/trino/usage-guide/catalogs/postgresql) connector. - Postgresql(PostgresqlConnector), +impl Default for v1alpha2::TrinoCatalogNameSpec { + fn default() -> Self { + Self::Inferred { + replace_hyphens_with_underscores: false, + } + } +} - /// A [TPC-DS](DOCS_BASE_URL_PLACEHOLDER/trino/usage-guide/catalogs/tpcds) connector. - Tpcds(TpcdsConnector), +impl From for Option { + fn from(value: IcebergCatalogConnection) -> Self { + match value { + IcebergCatalogConnection::Rest(_iceberg_rest_catalog_connection) => { + todo!("Puh, how should we map REST to old?") + } + IcebergCatalogConnection::HiveMetastore(hive_metastore_connection) => { + Some(hive_metastore_connection) + } + // Earlier the metastore connection was optional, so that users could bring their ow + // (e.g. REST catalog, as the operator didn't support that back than). + IcebergCatalogConnection::UserProvided {} => None, + } + } +} - /// A [TPC-H](DOCS_BASE_URL_PLACEHOLDER/trino/usage-guide/catalogs/tpch) connector. - Tpch(TpchConnector), +impl From> for IcebergCatalogConnection { + fn from(value: Option) -> Self { + match value { + Some(hive_metastore_connection) => Self::HiveMetastore(hive_metastore_connection), + None => Self::UserProvided {}, + } + } } attributed_string_type! { @@ -155,7 +228,7 @@ attributed_string_type! { mod tests { use stackable_operator::versioned::test_utils::RoundtripTestData; - use super::{TrinoCatalog, TrinoCatalogVersion, v1alpha1}; + use super::{TrinoCatalog, TrinoCatalogVersion, v1alpha1, v1alpha2}; #[test] fn test_crd_generation() { @@ -223,6 +296,101 @@ mod tests { accessStyle: Path credentials: secretClass: minio-credentials + - connector: + iceberg: {} + - connector: + tpcds: {} + - name: + inferred: + replaceHyphensWithUnderscores: true + connector: + tpch: {} + "}) + .expect("Failed to parse TrinoCatalogSpec YAML") + } + } + + impl RoundtripTestData for v1alpha2::TrinoCatalogSpec { + fn roundtrip_test_data() -> Vec { + stackable_operator::utils::yaml_from_str_singleton_map(indoc::indoc! {" + - connector: + blackHole: {} + - connector: + deltaLake: + metastore: + configMap: simple-hive + s3: + inline: + host: test-minio + port: 9000 + accessStyle: Path + credentials: + secretClass: minio-credentials + - connector: + generic: + connectorName: postgresql + properties: # optional + connection-url: + value: jdbc:postgresql://example.net:5432/database + connection-user: + valueFromSecret: + name: my-postgresql-credentials-secret + key: user + connection-password: + valueFromSecret: + name: my-postgresql-credentials-secret + key: password + - connector: + googleSheet: + credentialsSecret: gsheet-credentials + metadataSheetId: 1dT4dRWo9tAKBk5GdH-a54dcizuoxOTn98X8igZcnYr8 + cache: # optional + sheetsDataMaxCacheSize: 1000 + sheetsDataExpireAfterWrite: 5m + - connector: + hive: + metastore: + configMap: simple-hive + s3: + inline: + host: test-minio + port: 9000 + accessStyle: Path + credentials: + secretClass: minio-credentials + configOverrides: + hive.metastore.username: trino + - connector: + iceberg: + catalog: + hiveMetastore: + configMap: simple-hive + s3: + inline: + host: test-minio + port: 9000 + accessStyle: Path + credentials: + secretClass: minio-credentials + - connector: + iceberg: + catalog: + rest: + uri: https://my.rest.com/iceberg + - connector: + iceberg: + catalog: + rest: + uri: https://my.secure.rest + security: + oAuth2: + serverUri: https://keycloak.default.svc.cluster.local:8443/realms/test/protocol/openid-connect/token + credential: + credentialSecretName: my-keycloak-credentials + - connector: + iceberg: + catalog: + userProvided: {} - connector: tpcds: {} - name: diff --git a/rust/operator-binary/src/crd/mod.rs b/rust/operator-binary/src/crd/mod.rs index c567fd42d..1f4032400 100644 --- a/rust/operator-binary/src/crd/mod.rs +++ b/rust/operator-binary/src/crd/mod.rs @@ -476,7 +476,7 @@ impl v1alpha1::TrinoConfig { pub(crate) fn default_config( cluster_name: &str, role: &TrinoRole, - trino_catalogs: &[catalog::v1alpha1::TrinoCatalog], + trino_catalogs: &[catalog::v1alpha2::TrinoCatalog], opa_config: Option<&v1alpha1::TrinoAuthorizationOpaConfig>, ) -> v1alpha1::TrinoConfigFragment { let (cpu_min, cpu_max, memory) = match role { From 3c6dd889260885978c58c2570be09d1d2078a7bf Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Thu, 8 Oct 2026 12:29:00 +0200 Subject: [PATCH 02/34] fix: Accidential token/credentials swap --- rust/operator-binary/src/catalog/iceberg.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rust/operator-binary/src/catalog/iceberg.rs b/rust/operator-binary/src/catalog/iceberg.rs index 937c81044..d0733e99a 100644 --- a/rust/operator-binary/src/catalog/iceberg.rs +++ b/rust/operator-binary/src/catalog/iceberg.rs @@ -96,7 +96,7 @@ impl ExtendCatalogConfig for IcebergRestCatalogConnection { server_uri.as_str(), ); match credential { - IcebergRestCatalogOAuthCredential::TokenSecretName(secret_name) => { + IcebergRestCatalogOAuthCredential::CredentialSecretName(secret_name) => { // We can't use `add_env_property_from_secret`, as we need to concatenate // user and password in the Trino configuration. So instead we come up with // our own envs and bind them. @@ -134,7 +134,7 @@ impl ExtendCatalogConfig for IcebergRestCatalogConnection { ..Default::default() }); } - IcebergRestCatalogOAuthCredential::CredentialSecretName(secret_name) => { + IcebergRestCatalogOAuthCredential::TokenSecretName(secret_name) => { catalog_config.add_env_property_from_secret( "iceberg.rest-catalog.oauth2.token", SecretKeySelector { From 36b1189abf04a8833d81cac1d6d37f39076be671 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Thu, 8 Oct 2026 12:29:27 +0200 Subject: [PATCH 03/34] chore: nix stuff --- Cargo.nix | 647 ++++++++++++++++++++++++++-------------------- crate-hashes.json | 18 +- 2 files changed, 380 insertions(+), 285 deletions(-) diff --git a/Cargo.nix b/Cargo.nix index ac9ca84bd..92908019c 100644 --- a/Cargo.nix +++ b/Cargo.nix @@ -508,7 +508,7 @@ rec { } { name = "syn"; - packageId = "syn 3.0.3"; + packageId = "syn 3.0.6"; usesDefaultFeatures = false; features = [ "clone-impls" "full" "parsing" "printing" "proc-macro" "visit-mut" ]; } @@ -891,11 +891,11 @@ rec { }; resolvedDefaultFeatures = [ "default" ]; }; - "bitflags 2.13.1" = rec { + "bitflags 2.13.2" = rec { crateName = "bitflags"; - version = "2.13.1"; + version = "2.13.2"; edition = "2021"; - sha256 = "1nl76mpykmwmb8rq1l5vw1azdh1wvxdrnsk4sy3rdrzx01nvg25m"; + sha256 = "01hbgjwvid66850fzi76mvn5f2bqycx6sf165ng1kfjqq9bl1v9x"; authors = [ "The Rust Project Developers" ]; @@ -989,9 +989,9 @@ rec { }; "cc" = rec { crateName = "cc"; - version = "1.4.3"; + version = "1.6.0"; edition = "2021"; - sha256 = "0v9b5arr047vbihfbh3fmbd3aj9vf1i7dbdgfpvlwzynpjvr35ah"; + sha256 = "0c3n82hdi355xa6z9x4zgnpjwsh1szkkcs0zl8q8nl5ggk874j7p"; dependencies = [ { name = "find-msvc-tools"; @@ -1022,9 +1022,9 @@ rec { }; "cfg-if" = rec { crateName = "cfg-if"; - version = "1.0.4"; + version = "1.0.5"; edition = "2018"; - sha256 = "008q28ajc546z5p2hcwdnckmg0hia7rnx52fni04bwqkzyrghc4k"; + sha256 = "0026j56901nzjraap3da0a8njw42j66zcxnn6s2s9aa5bcblhxjf"; libName = "cfg_if"; authors = [ "Alex Crichton " @@ -1049,7 +1049,7 @@ rec { } { name = "cpufeatures"; - packageId = "cpufeatures 0.3.0"; + packageId = "cpufeatures 0.3.1"; target = { target, features }: (("x86_64" == target."arch" or null) || ("x86" == target."arch" or null)); } { @@ -1120,10 +1120,10 @@ rec { }; "clap" = rec { crateName = "clap"; - version = "4.6.6"; + version = "4.6.7"; edition = "2024"; crateBin = []; - sha256 = "1jmx5z8d6jbvxdz6dybh599s4rd7ns6sl90p2rrdga09yh3pwg27"; + sha256 = "0il98y2rfw75984ck59znd4n592p07bxz8yy3a9blddb02rpd25a"; dependencies = [ { name = "clap_builder"; @@ -1162,9 +1162,9 @@ rec { }; "clap_builder" = rec { crateName = "clap_builder"; - version = "4.6.6"; + version = "4.6.7"; edition = "2024"; - sha256 = "12cqg25zpjc3k82cpqa2v9h7s3vk1vydpgnwl8lfg6lfm2jzwj3v"; + sha256 = "0kbhai5rv1vj9r4np52g2b9fmhvy3y82digs9v40c57bgbxrf1zc"; dependencies = [ { name = "anstream"; @@ -1201,9 +1201,9 @@ rec { }; "clap_derive" = rec { crateName = "clap_derive"; - version = "4.6.4"; + version = "4.6.7"; edition = "2024"; - sha256 = "0qd0v7pa2arwxjjinmjim6xrjy61bc28m1yryhc7zjjssswx44nh"; + sha256 = "1q36bgbkfb9rdz7jcvd0ffv0wwlyw0lg3z6iwdcybm0mjjvm3izr"; procMacro = true; dependencies = [ { @@ -1220,7 +1220,7 @@ rec { } { name = "syn"; - packageId = "syn 3.0.3"; + packageId = "syn 3.0.6"; features = [ "full" ]; } ]; @@ -1233,9 +1233,9 @@ rec { }; "clap_lex" = rec { crateName = "clap_lex"; - version = "1.1.0"; + version = "1.1.1"; edition = "2024"; - sha256 = "1ycqkpygnlqnndghhcxjb44lzl0nmgsia64x9581030yifxs7m68"; + sha256 = "11k4m4ngn39iz39lnq6nn6kyxzp62mnm1d86qfad3q0vlk33n4qw"; }; "colorchoice" = rec { @@ -1247,9 +1247,9 @@ rec { }; "combine" = rec { crateName = "combine"; - version = "4.6.7"; + version = "4.6.8"; edition = "2018"; - sha256 = "1z8rh8wp59gf8k23ar010phgs0wgf5i8cx4fg01gwcnzfn5k0nms"; + sha256 = "0ppwzwdmszpan9ybx1myc6ldg5zih2sazf9idckdxrh9gn9j1hyg"; authors = [ "Markus Westerlind " ]; @@ -1435,6 +1435,18 @@ rec { }; resolvedDefaultFeatures = [ "default" "link" ]; }; + "core_detect" = rec { + crateName = "core_detect"; + version = "1.0.0"; + edition = "2018"; + sha256 = "0j0xp1j6f9lrp4ybylc3d0zdg8jq2hkmr1122qyil14qk84q13vz"; + authors = [ + "Thom Chiovoloni " + ]; + features = { + }; + resolvedDefaultFeatures = [ "default" ]; + }; "cpufeatures 0.2.17" = rec { crateName = "cpufeatures"; version = "0.2.17"; @@ -1471,11 +1483,11 @@ rec { ]; }; - "cpufeatures 0.3.0" = rec { + "cpufeatures 0.3.1" = rec { crateName = "cpufeatures"; - version = "0.3.0"; + version = "0.3.1"; edition = "2024"; - sha256 = "00fjhygsqmh4kbxxlb99mcsbspxcai6hjydv4c46pwb67wwl2alb"; + sha256 = "0rkm1l35jy1z1yfg723fddsxc7vr0gc1hhfvc138hnqiwc58p8jw"; authors = [ "RustCrypto Developers" ]; @@ -1509,9 +1521,9 @@ rec { }; "crc32fast" = rec { crateName = "crc32fast"; - version = "1.5.0"; + version = "1.5.2"; edition = "2021"; - sha256 = "04d51liy8rbssra92p0qnwjw8i9rm9c4m3bwy19wjamz1k4w30cl"; + sha256 = "0y0f955n2hr5a8rd9nw9sr23nhjc42ddx3bjc47dnlmqssgpk9q1"; authors = [ "Sam Rijs " "Alex Crichton " @@ -1525,13 +1537,13 @@ rec { features = { "default" = [ "std" ]; }; - resolvedDefaultFeatures = [ "default" "std" ]; + resolvedDefaultFeatures = [ "std" ]; }; "crossbeam-channel" = rec { crateName = "crossbeam-channel"; - version = "0.5.16"; + version = "0.5.17"; edition = "2021"; - sha256 = "17k72dh5qqkh0xvqzr27wny7gl1l7fgzlvh2xxx71jmfgz1n6lyq"; + sha256 = "1wcy7y77hw7z5m140114iqxb90gsq062djd9zpkndisvgcrcrc4q"; libName = "crossbeam_channel"; dependencies = [ { @@ -1548,9 +1560,9 @@ rec { }; "crossbeam-utils" = rec { crateName = "crossbeam-utils"; - version = "0.8.22"; + version = "0.8.23"; edition = "2021"; - sha256 = "05vwf7pmjq8c8f3fp5qqdm0z3cnk4p62wi8spf0jms5yjnh3v031"; + sha256 = "1ilan2nw7fvka8hki80fr57a5dgd4mvcsvwq60437j6yvlwyw7m3"; libName = "crossbeam_utils"; features = { "default" = [ "std" ]; @@ -1662,22 +1674,22 @@ rec { }; resolvedDefaultFeatures = [ "default" "suggestions" ]; }; - "darling 0.24.0" = rec { + "darling 0.24.1" = rec { crateName = "darling"; - version = "0.24.0"; + version = "0.24.1"; edition = "2021"; - sha256 = "08vx6iikfg7nz88ljnvnb5rqx819ys3si2mclym7xn4hp7qhnjc8"; + sha256 = "1v625grpyqddgaslgc0kzha41vzqy91yyg80ra9vjc363f8ga5zd"; authors = [ "Ted Driggs " ]; dependencies = [ { name = "darling_core"; - packageId = "darling_core 0.24.0"; + packageId = "darling_core 0.24.1"; } { name = "darling_macro"; - packageId = "darling_macro 0.24.0"; + packageId = "darling_macro 0.24.1"; } ]; features = { @@ -1727,11 +1739,11 @@ rec { }; resolvedDefaultFeatures = [ "strsim" "suggestions" ]; }; - "darling_core 0.24.0" = rec { + "darling_core 0.24.1" = rec { crateName = "darling_core"; - version = "0.24.0"; + version = "0.24.1"; edition = "2021"; - sha256 = "1i38i1vwm2a2p3knsyqd0rm7frkfil5lxqz1600ji0n4j57jfkh8"; + sha256 = "1zyxlb9ypzb3pzm0l8jy09x2kvd7x7qd50b1z0caxal5fk7y4dv8"; authors = [ "Ted Driggs " ]; @@ -1755,7 +1767,7 @@ rec { } { name = "syn"; - packageId = "syn 3.0.3"; + packageId = "syn 3.0.6"; features = [ "full" "extra-traits" ]; } ]; @@ -1791,11 +1803,11 @@ rec { ]; }; - "darling_macro 0.24.0" = rec { + "darling_macro 0.24.1" = rec { crateName = "darling_macro"; - version = "0.24.0"; + version = "0.24.1"; edition = "2021"; - sha256 = "0pimi94crlpzw72s18vi96ysw3il197sdzz0bhrd476ll0ppkxb8"; + sha256 = "1197l1qqsxssys3nnz58x36nv5kzpbjipsxv6dw2yazh7rf17ira"; procMacro = true; authors = [ "Ted Driggs " @@ -1803,7 +1815,7 @@ rec { dependencies = [ { name = "darling_core"; - packageId = "darling_core 0.24.0"; + packageId = "darling_core 0.24.1"; } { name = "quote"; @@ -1811,7 +1823,7 @@ rec { } { name = "syn"; - packageId = "syn 3.0.3"; + packageId = "syn 3.0.6"; } ]; @@ -1884,7 +1896,7 @@ rec { dependencies = [ { name = "thiserror"; - packageId = "thiserror 2.0.20"; + packageId = "thiserror 2.0.21"; } ]; features = { @@ -2179,7 +2191,7 @@ rec { } { name = "syn"; - packageId = "syn 3.0.3"; + packageId = "syn 3.0.6"; } ]; features = { @@ -2387,7 +2399,7 @@ rec { } { name = "syn"; - packageId = "syn 3.0.3"; + packageId = "syn 3.0.6"; features = [ "visit" "visit-mut" ]; } ]; @@ -2399,9 +2411,9 @@ rec { }; "either" = rec { crateName = "either"; - version = "1.17.0"; + version = "1.18.0"; edition = "2021"; - sha256 = "07dagpwcfdzpkb1n7fxkx0q3nv80rnf81v7gwlz9ljx22mn8yply"; + sha256 = "0d7dx31sf8rakcgp63070ngb2vkjynrni866pnx879pawndgnai5"; features = { "default" = [ "std" ]; "serde" = [ "dep:serde" ]; @@ -2509,9 +2521,9 @@ rec { }; "encoding_rs" = rec { crateName = "encoding_rs"; - version = "0.8.35"; - edition = "2018"; - sha256 = "1wv64xdrr9v37rqqdjsyb8l8wzlcbab80ryxhrszvnj59wy0y0vm"; + version = "0.8.42"; + edition = "2024"; + sha256 = "0ycnbndly2jw5j69jl1r1lm512h2w9vb1dnjp0px46l7a425x64f"; authors = [ "Henri Sivonen " ]; @@ -2520,13 +2532,47 @@ rec { name = "cfg-if"; packageId = "cfg-if"; } + { + name = "core_detect"; + packageId = "core_detect"; + target = { target, features }: (("x86_64" == target."arch" or null) || ("x86" == target."arch" or null)); + } + { + name = "multiversion_no_op"; + packageId = "multiversion_no_op"; + } + { + name = "rustversion"; + packageId = "rustversion"; + optional = true; + } + { + name = "scopeguard"; + packageId = "scopeguard"; + usesDefaultFeatures = false; + } + { + name = "simdutf8"; + packageId = "simdutf8"; + usesDefaultFeatures = false; + target = { target, features }: (("x86_64" == target."arch" or null) || ("x86" == target."arch" or null) || ("aarch64" == target."arch" or null) || (("wasm32" == target."arch" or null) && (builtins.elem "simd128" targetFeatures))); + features = [ "aarch64_neon" "public_imp" ]; + } + ]; + buildDependencies = [ + { + name = "rustversion"; + packageId = "rustversion"; + } ]; features = { "any_all_workaround" = [ "dep:any_all_workaround" ]; "default" = [ "alloc" ]; "fast-legacy-encode" = [ "fast-hangul-encode" "fast-hanja-encode" "fast-kanji-encode" "fast-gb-hanzi-encode" "fast-big5-hanzi-encode" ]; + "rustversion" = [ "dep:rustversion" ]; "serde" = [ "dep:serde" ]; - "simd-accel" = [ "any_all_workaround" ]; + "simd-accel" = [ "any_all_workaround" "rustversion" ]; + "std" = [ "dep:multiversion" ]; }; resolvedDefaultFeatures = [ "alloc" "default" ]; }; @@ -2601,7 +2647,7 @@ rec { } { name = "syn"; - packageId = "syn 3.0.3"; + packageId = "syn 3.0.6"; } ]; features = { @@ -2769,9 +2815,9 @@ rec { }; "find-msvc-tools" = rec { crateName = "find-msvc-tools"; - version = "0.1.11"; + version = "0.1.14"; edition = "2021"; - sha256 = "145qpfb9r4ml2klr8v4byvrkikp61qyiks9n69b8z0vbscbb0pfl"; + sha256 = "112ljldlv150fpl8xr2jl5czg51k3kdfn6cy5fqdsvkl14sgpp5f"; libName = "find_msvc_tools"; }; @@ -2789,9 +2835,9 @@ rec { }; "flate2" = rec { crateName = "flate2"; - version = "1.1.9"; + version = "1.1.10"; edition = "2018"; - sha256 = "0g2pb7cxnzcbzrj8bw4v6gpqqp21aycmf6d84rzb6j748qkvlgw4"; + sha256 = "1jvd2cl8j5hyf8imi62y1x7gwzz1hajirni0801yxhds1qp4wqvf"; authors = [ "Alex Crichton " "Josh Triplett " @@ -2801,33 +2847,33 @@ rec { name = "crc32fast"; packageId = "crc32fast"; optional = true; + usesDefaultFeatures = false; } { name = "miniz_oxide"; packageId = "miniz_oxide"; optional = true; - usesDefaultFeatures = false; - features = [ "with-alloc" "simd" ]; + features = [ "simd" ]; } { - name = "miniz_oxide"; - packageId = "miniz_oxide"; + name = "zlib-rs"; + packageId = "zlib-rs"; + optional = true; usesDefaultFeatures = false; - target = { target, features }: (("wasm32" == target."arch" or null) && (!("emscripten" == target."os" or null))); - features = [ "with-alloc" "simd" ]; + features = [ "rust-allocator" ]; } ]; features = { "any_c_zlib" = [ "any_zlib" ]; "any_zlib" = [ "any_impl" ]; - "cloudflare-zlib-sys" = [ "dep:cloudflare-zlib-sys" ]; - "cloudflare_zlib" = [ "any_c_zlib" "cloudflare-zlib-sys" "dep:crc32fast" ]; - "default" = [ "rust_backend" ]; + "cloudflare_zlib" = [ "zlib" ]; + "default" = [ "rust_backend" "runtime_detection" ]; "document-features" = [ "dep:document-features" ]; "libz-ng-sys" = [ "dep:libz-ng-sys" ]; "libz-sys" = [ "dep:libz-sys" ]; "miniz-sys" = [ "rust_backend" ]; "miniz_oxide" = [ "any_impl" "dep:miniz_oxide" "dep:crc32fast" ]; + "runtime_detection" = [ "zlib-rs?/std" "crc32fast?/std" ]; "rust_backend" = [ "miniz_oxide" "any_impl" ]; "zlib" = [ "any_c_zlib" "libz-sys" "dep:crc32fast" ]; "zlib-default" = [ "any_c_zlib" "libz-sys/default" "dep:crc32fast" ]; @@ -2835,7 +2881,7 @@ rec { "zlib-ng-compat" = [ "zlib" "libz-sys/zlib-ng" "dep:crc32fast" ]; "zlib-rs" = [ "any_zlib" "dep:zlib-rs" ]; }; - resolvedDefaultFeatures = [ "any_impl" "default" "miniz_oxide" "rust_backend" ]; + resolvedDefaultFeatures = [ "any_impl" "default" "miniz_oxide" "runtime_detection" "rust_backend" ]; }; "fnv" = rec { crateName = "fnv"; @@ -3060,7 +3106,7 @@ rec { } { name = "syn"; - packageId = "syn 3.0.3"; + packageId = "syn 3.0.6"; features = [ "full" ]; } ]; @@ -3458,7 +3504,7 @@ rec { dependencies = [ { name = "bitflags"; - packageId = "bitflags 2.13.1"; + packageId = "bitflags 2.13.2"; } { name = "libc"; @@ -3596,9 +3642,9 @@ rec { }; "h2" = rec { crateName = "h2"; - version = "0.4.17"; + version = "0.4.19"; edition = "2021"; - sha256 = "0jblh2mscahvbz42d1sp5702ib444rcxswm5a3n2g64yydspx1wz"; + sha256 = "05mw60jmsq97vjgj607nxjkx8dl6rxv6jj9i4r2z92056id5x3pg"; authors = [ "Carl Lerche " "Sean McArthur " @@ -3907,9 +3953,9 @@ rec { }; "hyper" = rec { crateName = "hyper"; - version = "1.11.0"; + version = "1.11.1"; edition = "2021"; - sha256 = "0wha96biivgpj0fpf80a2aar5dfbff1lk62i9x9i2bl53wl5686j"; + sha256 = "0hxyikj5livhmw5q3x3ifyhphh1g2cjsc32nsg1jcyhflpx03d97"; authors = [ "Sean McArthur " ]; @@ -4012,9 +4058,9 @@ rec { }; "hyper-rustls" = rec { crateName = "hyper-rustls"; - version = "0.27.9"; + version = "0.27.10"; edition = "2021"; - sha256 = "03vfnsm873wsp1dk0q85nxvk7w6syp8c2m5bcdjcyfgg4786ijik"; + sha256 = "0lvz2bxpphyxmkws5ysfnydvsd0q4smbwgy254g92irjf1afda6z"; libName = "hyper_rustls"; dependencies = [ { @@ -4151,9 +4197,9 @@ rec { }; "hyper-util" = rec { crateName = "hyper-util"; - version = "0.1.20"; - edition = "2021"; - sha256 = "186zdc58hmm663csmjvrzgkr6jdh93sfmi3q2pxi57gcaqjpqm4n"; + version = "0.1.21"; + edition = "2024"; + sha256 = "1zwbrhqr9js6r7db3zd8bsmm6ys1i0abgkc7lyw2d4jgd2b3vh6x"; libName = "hyper_util"; authors = [ "Sean McArthur " @@ -4161,7 +4207,7 @@ rec { dependencies = [ { name = "base64"; - packageId = "base64 0.22.1"; + packageId = "base64 0.23.1"; optional = true; } { @@ -4187,6 +4233,11 @@ rec { name = "http-body"; packageId = "http-body"; } + { + name = "httparse"; + packageId = "httparse"; + optional = true; + } { name = "hyper"; packageId = "hyper"; @@ -4254,18 +4305,19 @@ rec { { name = "tokio"; packageId = "tokio"; - features = [ "macros" "test-util" "signal" ]; + features = [ "macros" "test-util" "signal" "net" "io-util" ]; } ]; features = { - "client" = [ "hyper/client" "tokio/net" "dep:tracing" "dep:futures-channel" "dep:tower-service" ]; - "client-legacy" = [ "client" "dep:socket2" "tokio/sync" "dep:libc" "dep:futures-util" ]; - "client-pool" = [ "client" "dep:futures-util" "dep:tower-layer" ]; + "client" = [ "hyper/client" "dep:tracing" "dep:futures-channel" "dep:tower-service" ]; + "client-legacy" = [ "client" "tokio/net" "dep:socket2" "tokio/sync" "dep:libc" "dep:futures-util" "dep:httparse" ]; + "client-pool" = [ "client" "dep:futures-util" "dep:tower-layer" "tokio/sync" ]; "client-proxy" = [ "client" "dep:base64" "dep:ipnet" "dep:percent-encoding" ]; "client-proxy-system" = [ "dep:system-configuration" "dep:windows-registry" ]; "full" = [ "client" "client-legacy" "client-pool" "client-proxy" "client-proxy-system" "server" "server-auto" "server-graceful" "service" "http1" "http2" "tokio" "tracing" ]; "http1" = [ "hyper/http1" ]; "http2" = [ "hyper/http2" ]; + "rt-tracing-exec-force" = [ "tokio" "tracing" ]; "server" = [ "hyper/server" ]; "server-auto" = [ "server" "http1" "http2" ]; "server-graceful" = [ "server" "tokio/sync" ]; @@ -4583,9 +4635,9 @@ rec { }; "icu_provider" = rec { crateName = "icu_provider"; - version = "2.3.0"; + version = "2.3.1"; edition = "2024"; - sha256 = "0a343jlrb7jlb20xv1airslzv63559wf38jihrx81bba39kyv9wj"; + sha256 = "0wrydhwprwgyka3r3sw6276syjnlw6fpqr2zsm2srvxv7afvnyyj"; authors = [ "The ICU4X Project Developers" ]; @@ -4711,9 +4763,9 @@ rec { }; "indexmap" = rec { crateName = "indexmap"; - version = "2.14.0"; + version = "2.14.2"; edition = "2024"; - sha256 = "1na9z6f0d5pkjr1lgsni470v98gv2r7c41j8w48skr089x2yjrnl"; + sha256 = "0mf86hbjkkcd82cpq683bblbs0zwa8ndla96ci8p1ji6bl7ijknc"; dependencies = [ { name = "equivalent"; @@ -4762,9 +4814,9 @@ rec { }; "ipnet" = rec { crateName = "ipnet"; - version = "2.12.1"; + version = "2.12.2"; edition = "2018"; - sha256 = "0y6xssyvfy85k90pnnanxv9phayxalhp8bacy61rw4vkmhznqxba"; + sha256 = "1h65hw16sqv8nrrmqp0g8drv5wh98n4z7a4h1lb76n8d7js306br"; authors = [ "Kris Price " ]; @@ -4870,9 +4922,9 @@ rec { }; "jiff" = rec { crateName = "jiff"; - version = "0.2.35"; + version = "0.2.37"; edition = "2021"; - sha256 = "1k1d1n8k46192xz6ph8km43lcg68ql65phzmhm49mbq7pn1p32v6"; + sha256 = "1nxgdj2wajw9ml8fcc2zq858k6v9618m22864vh6sy885zvvmc8a"; authors = [ "Andrew Gallant " ]; @@ -4943,6 +4995,7 @@ rec { ]; features = { "alloc" = [ "jcore/alloc" "serde_core?/alloc" "portable-atomic-util/alloc" "defmt?/alloc" ]; + "arbitrary" = [ "dep:arbitrary" "jcore/arbitrary" "std" ]; "default" = [ "std" "tz-system" "tz-fat" "tzdb-bundle-platform" "tzdb-zoneinfo" "tzdb-concatenated" "perf-inline" ]; "defmt" = [ "dep:defmt" "jcore/defmt" ]; "js" = [ "dep:wasm-bindgen" "dep:js-sys" ]; @@ -4962,9 +5015,9 @@ rec { }; "jiff-core" = rec { crateName = "jiff-core"; - version = "0.1.0"; + version = "0.1.1"; edition = "2021"; - sha256 = "02axx56pkh2w4bw5rp94qlvcpwzd3n2w2025fnikvrgg762aiv3z"; + sha256 = "130jqxlbrmll1ahvm9lwr06grmzpmnx5wc6j0n8crkiw0ivgwljy"; libName = "jiff_core"; authors = [ "Andrew Gallant " @@ -4975,21 +5028,28 @@ rec { packageId = "defmt"; optional = true; } + { + name = "log"; + packageId = "log"; + optional = true; + usesDefaultFeatures = false; + } ]; features = { "alloc" = [ "defmt?/alloc" ]; + "arbitrary" = [ "dep:arbitrary" "std" ]; "default" = [ "std" "tz-fat" ]; "defmt" = [ "dep:defmt" ]; "logging" = [ "dep:log" ]; - "std" = [ "alloc" ]; + "std" = [ "alloc" "log?/std" ]; }; resolvedDefaultFeatures = [ "alloc" "default" "std" "tz-fat" ]; }; "jiff-static" = rec { crateName = "jiff-static"; - version = "0.2.35"; + version = "0.2.37"; edition = "2021"; - sha256 = "014jli8v46c8hzkndmvdfvq4la6a6y9icmnh3k735yqwlarxqs9s"; + sha256 = "04kjdzg4h4wy38ghm91qva7xg4glr65120c74bk7mmka26hni0ip"; procMacro = true; libName = "jiff_static"; authors = [ @@ -5084,7 +5144,7 @@ rec { } { name = "thiserror"; - packageId = "thiserror 2.0.20"; + packageId = "thiserror 2.0.21"; } { name = "windows-link"; @@ -5202,9 +5262,9 @@ rec { }; "js-sys" = rec { crateName = "js-sys"; - version = "0.3.104"; + version = "0.3.106"; edition = "2021"; - sha256 = "0fjsgady7wbv7bbyy6c8qhrd93bnx11qbl83l1g7bb9a4601030f"; + sha256 = "1icwmpjw54lb7vg5926k5y4y5jbiih0zxhwgjwnzn475v90xk0vq"; libName = "js_sys"; authors = [ "The wasm-bindgen Developers" @@ -5219,7 +5279,6 @@ rec { packageId = "futures-util"; optional = true; usesDefaultFeatures = false; - features = [ "std" ]; } { name = "wasm-bindgen"; @@ -5230,7 +5289,7 @@ rec { features = { "default" = [ "std" "unsafe-eval" ]; "futures-core-03-stream" = [ "dep:futures-util" "dep:futures-core" ]; - "std" = [ "wasm-bindgen/std" "dep:futures-util" ]; + "std" = [ "wasm-bindgen/std" "futures-util/std" ]; }; resolvedDefaultFeatures = [ "default" "std" "unsafe-eval" ]; }; @@ -5264,7 +5323,7 @@ rec { } { name = "thiserror"; - packageId = "thiserror 2.0.20"; + packageId = "thiserror 2.0.21"; } ]; devDependencies = [ @@ -5287,9 +5346,9 @@ rec { }; "jsonpath-rust" = rec { crateName = "jsonpath-rust"; - version = "1.0.8"; + version = "1.0.11"; edition = "2021"; - sha256 = "19q6pgjp51wn3227c0n9vxp2dsdmjxwblrxh25v8k7y0xwg041rf"; + sha256 = "0l8y689h8km6wyd6f0bw9zv1rn06wksfjl42amd340x1rba94f6j"; libName = "jsonpath_rust"; authors = [ "BorisZhguchev " @@ -5313,7 +5372,7 @@ rec { } { name = "thiserror"; - packageId = "thiserror 2.0.20"; + packageId = "thiserror 2.0.21"; } ]; @@ -5410,9 +5469,9 @@ rec { edition = "2024"; workspace_member = null; src = pkgs.fetchgit { - url = "https://github.com/stackabletech/operator-rs.git"; - rev = "ed84d456ff0b8324db3d7444659cb207564be8c9"; - sha256 = "1ra6n0mi633sipsgrli7hhxv64khhs00l448mqg61gxsjc4y02r0"; + url = "https://github.com/stackabletech//operator-rs.git"; + rev = "5d7902142fe5c7ab0a820117a80b5f4a4e34d5c9"; + sha256 = "07h2vqgm28576l46w03pfv7sxi8cw2v1lj78mi5j40kqyikn03by"; }; libName = "k8s_version"; authors = [ @@ -5421,7 +5480,7 @@ rec { dependencies = [ { name = "darling"; - packageId = "darling 0.24.0"; + packageId = "darling 0.24.1"; optional = true; } { @@ -5690,7 +5749,7 @@ rec { } { name = "thiserror"; - packageId = "thiserror 2.0.20"; + packageId = "thiserror 2.0.21"; } { name = "tokio"; @@ -5856,7 +5915,7 @@ rec { } { name = "thiserror"; - packageId = "thiserror 2.0.20"; + packageId = "thiserror 2.0.21"; } ]; devDependencies = [ @@ -6008,7 +6067,7 @@ rec { } { name = "thiserror"; - packageId = "thiserror 2.0.20"; + packageId = "thiserror 2.0.21"; } { name = "tokio"; @@ -6048,9 +6107,9 @@ rec { }; "lazy_static" = rec { crateName = "lazy_static"; - version = "1.5.0"; + version = "1.5.1"; edition = "2015"; - sha256 = "1zk6dqqni0193xg6iijh7i3i44sryglwgvx20spdvwk3r6sbrlmv"; + sha256 = "1yqaqmp510xw2ldpw88mx9b5s5qj8flb4rw0wd9ks1zpk9j0z1r0"; authors = [ "Marvin Löbel " ]; @@ -6071,9 +6130,9 @@ rec { }; "libc" = rec { crateName = "libc"; - version = "0.2.189"; + version = "0.2.190"; edition = "2021"; - sha256 = "1whjfs375vlng2q6yrbzs73cvp5lm3w1n2gfqajb2vgf7zg3xbry"; + sha256 = "0y5yap4bfp7rfsldcbk9pb5alcgygca5xn1n2pmh181zdpf3spff"; features = { "default" = [ "std" ]; "rustc-dep-of-std" = [ "align" "rustc-std-workspace-core" ]; @@ -6084,10 +6143,10 @@ rec { }; "libgit2-sys" = rec { crateName = "libgit2-sys"; - version = "0.18.7+1.9.6"; + version = "0.18.8+1.9.7"; edition = "2021"; links = "git2"; - sha256 = "12ad5zmffzbivn57d47lg2kgjprqsz0kq8i4lsqzlkwz9cg3kir3"; + sha256 = "0l3vm5g59zl7r7aw7zpms922j78imdlyv219zg1rnj6p4n5mcz3z"; libName = "libgit2_sys"; libPath = "lib.rs"; authors = [ @@ -6225,9 +6284,9 @@ rec { }; "log" = rec { crateName = "log"; - version = "0.4.33"; + version = "0.4.34"; edition = "2021"; - sha256 = "1bd9dmk22pxgnf0h0slba6rz99zb0a0b2mdhpk8p92bp26ycbvhc"; + sha256 = "1ihkzn0m33ab79fcl4mkb04n5iwqzbxzyw7l7hazqkffaqzbvy7r"; authors = [ "The Rust Project Developers" ]; @@ -6241,11 +6300,12 @@ rec { "kv_unstable_sval" = [ "kv_sval" "kv_unstable" ]; "serde" = [ "serde_core" ]; "serde_core" = [ "dep:serde_core" ]; + "std" = [ "alloc" ]; "sval" = [ "dep:sval" ]; "sval_ref" = [ "dep:sval_ref" ]; "value-bag" = [ "dep:value-bag" ]; }; - resolvedDefaultFeatures = [ "std" ]; + resolvedDefaultFeatures = [ "alloc" "std" ]; }; "matchers" = rec { crateName = "matchers"; @@ -6310,9 +6370,9 @@ rec { }; "miniz_oxide" = rec { crateName = "miniz_oxide"; - version = "0.8.9"; + version = "0.9.1"; edition = "2021"; - sha256 = "05k3pdg8bjjzayq3rf0qhpirq9k37pxnasfn4arbs17phqn6m9qz"; + sha256 = "0k2bgjzk2sbsynpsv4wizwxbqp6vs7g08y5anbkrh3l6a15bqgxn"; authors = [ "Frommi " "oyvindln " @@ -6339,14 +6399,15 @@ rec { "serde" = [ "dep:serde" ]; "simd" = [ "simd-adler32" ]; "simd-adler32" = [ "dep:simd-adler32" ]; + "std" = [ "serde?/std" ]; }; - resolvedDefaultFeatures = [ "simd" "simd-adler32" "with-alloc" ]; + resolvedDefaultFeatures = [ "default" "simd" "simd-adler32" "with-alloc" ]; }; "mio" = rec { crateName = "mio"; - version = "1.2.2"; + version = "1.2.4"; edition = "2021"; - sha256 = "09y4b7gc42ymgssshh8sz6gs3y5r8bbigqaw2c4snh6fy5qmrmih"; + sha256 = "1vl6px9zy0pwhlwnw3cknsqyzkg8bcpiwiq4cgicf2fwgywfv20p"; authors = [ "Carl Lerche " "Thomas de Zeeuw " @@ -6377,6 +6438,17 @@ rec { }; resolvedDefaultFeatures = [ "net" "os-ext" "os-poll" ]; }; + "multiversion_no_op" = rec { + crateName = "multiversion_no_op"; + version = "1.0.0"; + edition = "2021"; + sha256 = "03d2k7xk7vky38q48h08miw4jca34ymckggnrqggn60vlddvagvl"; + procMacro = true; + authors = [ + "Henri Sivonen " + ]; + + }; "nohash-hasher" = rec { crateName = "nohash-hasher"; version = "0.2.0"; @@ -6459,7 +6531,7 @@ rec { } { name = "rand"; - packageId = "rand 0.8.7"; + packageId = "rand 0.8.8"; optional = true; usesDefaultFeatures = false; } @@ -6478,7 +6550,7 @@ rec { devDependencies = [ { name = "rand"; - packageId = "rand 0.8.7"; + packageId = "rand 0.8.8"; features = [ "small_rng" ]; } ]; @@ -6651,7 +6723,7 @@ rec { } { name = "thiserror"; - packageId = "thiserror 2.0.20"; + packageId = "thiserror 2.0.21"; optional = true; usesDefaultFeatures = false; } @@ -6825,7 +6897,7 @@ rec { } { name = "thiserror"; - packageId = "thiserror 2.0.20"; + packageId = "thiserror 2.0.21"; usesDefaultFeatures = false; } { @@ -7029,7 +7101,7 @@ rec { } { name = "thiserror"; - packageId = "thiserror 2.0.20"; + packageId = "thiserror 2.0.21"; optional = true; usesDefaultFeatures = false; } @@ -7332,9 +7404,9 @@ rec { }; "pest" = rec { crateName = "pest"; - version = "2.9.0"; + version = "2.9.2"; edition = "2021"; - sha256 = "1kwvhc5hyrfpxpmp0jw0wr891xyjs44mcs2wz68hrl54qw6ac1ss"; + sha256 = "1a11k95dyrpfrn2ql5lprdh4k31k4hksg83w67vfdlps62iarls5"; authors = [ "DragoÈ™ Tiselice " ]; @@ -7361,9 +7433,9 @@ rec { }; "pest_derive" = rec { crateName = "pest_derive"; - version = "2.9.0"; + version = "2.9.2"; edition = "2021"; - sha256 = "13f8ihi8928s9mc13pcbhxy382kqc89h7i8d7s5mnif8lm23ga5k"; + sha256 = "1ky22vlsbqha1jhx5l31d95gm8l54va38b9zmmr2wjicgxan0jr8"; procMacro = true; authors = [ "DragoÈ™ Tiselice " @@ -7389,9 +7461,9 @@ rec { }; "pest_generator" = rec { crateName = "pest_generator"; - version = "2.9.0"; + version = "2.9.2"; edition = "2021"; - sha256 = "0jihcdnmdban4bqjd02r2wbb79nywj2nhwqyk95hvrixm98k9kg0"; + sha256 = "029igkh6nsw62bn4325gkjm5c3lf4bjqbkv8jblrwc0ml441z78x"; authors = [ "DragoÈ™ Tiselice " ]; @@ -7427,9 +7499,9 @@ rec { }; "pest_meta" = rec { crateName = "pest_meta"; - version = "2.9.0"; + version = "2.9.2"; edition = "2021"; - sha256 = "15jly0r7r4m15fhm3pg814h65j7dqnqq6k43rvgxfhg29443lkg0"; + sha256 = "1jxd8gbm328lsl3m0z2b1pq9ri60h4f7122i189k5jpwkwdbm4zd"; authors = [ "DragoÈ™ Tiselice " ]; @@ -7584,9 +7656,9 @@ rec { }; "portable-atomic-util" = rec { crateName = "portable-atomic-util"; - version = "0.2.7"; + version = "0.2.8"; edition = "2018"; - sha256 = "0616j0fhy6y71hyxg3n86f6hng0fmsc269s3wp4gl8ww4p8hd8f2"; + sha256 = "059729m166s1ccvqfyj6lv0wz5kr4qh6yb2gphf3mk5yyfvkxaqh"; libName = "portable_atomic_util"; dependencies = [ { @@ -7630,9 +7702,9 @@ rec { }; "powerfmt" = rec { crateName = "powerfmt"; - version = "0.2.0"; + version = "0.2.1"; edition = "2021"; - sha256 = "14ckj2xdpkhv3h6l5sdmb9f1d57z8hbfpdldjc2vl5givq2y77j3"; + sha256 = "0n293rvnpisjmxdqhq6zmrvcdql7j1c4zrcy5053vrv5x6wr8qsa"; authors = [ "Jacob Pratt " ]; @@ -7865,11 +7937,11 @@ rec { "rustc-dep-of-std" = [ "core" ]; }; }; - "rand 0.10.2" = rec { + "rand 0.10.3" = rec { crateName = "rand"; - version = "0.10.2"; + version = "0.10.3"; edition = "2024"; - sha256 = "105yqkdzqbgggd3r1yjm9jg0zvibfdsmxylvxxkmblwc0lxgmxf7"; + sha256 = "1bxlhj4m9zrgfgk1yirf0nny86izrngscydfx9w387n9rfbgpjb5"; authors = [ "The Rand Project Developers" "The Rust Project Developers" @@ -7904,11 +7976,11 @@ rec { }; resolvedDefaultFeatures = [ "alloc" "default" "std" "std_rng" "sys_rng" "thread_rng" ]; }; - "rand 0.8.7" = rec { + "rand 0.8.8" = rec { crateName = "rand"; - version = "0.8.7"; + version = "0.8.8"; edition = "2018"; - sha256 = "06iaf16fr0z8zly7anmn8ky0p80xnx9yv0gdcm30fwn9vqmigxi2"; + sha256 = "0k3d9psya5icpiylff1w1wjbnc3q4pb1953n1iw7gbr61ggcfn70"; authors = [ "The Rand Project Developers" "The Rust Project Developers" @@ -8105,7 +8177,7 @@ rec { dependencies = [ { name = "bitflags"; - packageId = "bitflags 2.13.1"; + packageId = "bitflags 2.13.2"; } ]; features = { @@ -8153,7 +8225,7 @@ rec { } { name = "syn"; - packageId = "syn 3.0.3"; + packageId = "syn 3.0.6"; } ]; @@ -8310,16 +8382,16 @@ rec { }; "reqwest" = rec { crateName = "reqwest"; - version = "0.13.4"; + version = "0.13.5"; edition = "2021"; - sha256 = "1hy1plns9krbh3h1dy2sdjygsfkdcnxm6pbxdi0ya9b5vq8mi711"; + sha256 = "0ac0n0g7xaffc6q3dhn9rixr4h1f0h7533l1smrxv1n1bjkwz88n"; authors = [ "Sean McArthur " ]; dependencies = [ { name = "base64"; - packageId = "base64 0.22.1"; + packageId = "base64 0.23.1"; } { name = "bytes"; @@ -8437,7 +8509,7 @@ rec { name = "web-sys"; packageId = "web-sys"; target = { target, features }: (("wasm32" == target."arch" or null) && (("unknown" == target."os" or null) || ("none" == target."os" or null))); - features = [ "AbortController" "AbortSignal" "Headers" "Request" "RequestInit" "RequestMode" "Response" "Window" "FormData" "Blob" "BlobPropertyBag" "ServiceWorkerGlobalScope" "RequestCredentials" "File" "ReadableStream" "RequestCache" ]; + features = [ "AbortController" "AbortSignal" "Headers" "Request" "RequestInit" "RequestMode" "Response" "Window" "FormData" "Blob" "BlobPropertyBag" "ServiceWorkerGlobalScope" "RequestCredentials" "File" "ReadableStream" "ReferrerPolicy" "RequestCache" ]; } ]; devDependencies = [ @@ -8713,9 +8785,9 @@ rec { }; "rstest" = rec { crateName = "rstest"; - version = "0.26.1"; + version = "0.27.0"; edition = "2021"; - sha256 = "0jcxhg9mxlr2p9an14algbcq6ax7r0sk1w1kbals5aiv0qy1k8zm"; + sha256 = "174vs0myprq6yc02z42b7zr6a04asmnj7kypj0dfb0rvs7k070ll"; authors = [ "Michele d'Amico " ]; @@ -8729,6 +8801,7 @@ rec { name = "futures-util"; packageId = "futures-util"; optional = true; + usesDefaultFeatures = false; } { name = "rstest_macros"; @@ -8745,9 +8818,9 @@ rec { }; "rstest_macros" = rec { crateName = "rstest_macros"; - version = "0.26.1"; + version = "0.27.0"; edition = "2021"; - sha256 = "185v185wn2x3llp3nn1i7h44vi5ffnnsj8b1a32m2ygzy08m714w"; + sha256 = "190dghbjh4dvrym9jh747mbm2wcfc1rdq7fpf4jf2lbfgfpjxnd8"; procMacro = true; authors = [ "Michele d'Amico " @@ -8941,9 +9014,9 @@ rec { }; "rustls-platform-verifier" = rec { crateName = "rustls-platform-verifier"; - version = "0.7.0"; + version = "0.7.1"; edition = "2021"; - sha256 = "181v4d0vl53vdh2wq56vghal1zyhdgqvy4xa8r45zwz4di9y5l96"; + sha256 = "164gb7kn9a8c0yrpqv879wf20z611qcfi4xjzf5qpcg2j5j5hrqi"; libName = "rustls_platform_verifier"; dependencies = [ { @@ -9047,7 +9120,7 @@ rec { name = "rustls"; packageId = "rustls"; usesDefaultFeatures = false; - features = [ "ring" ]; + features = [ "aws-lc-rs" ]; } { name = "webpki-root-certs"; @@ -9059,24 +9132,24 @@ rec { "base64" = [ "dep:base64" ]; "cert-logging" = [ "base64" ]; "docsrs" = [ "jni" "once_cell" ]; - "ffi-testing" = [ "android_logger" "rustls/ring" ]; + "ffi-testing" = [ "android_logger" "rustls/aws-lc-rs" ]; "jni" = [ "dep:jni" ]; "once_cell" = [ "dep:once_cell" ]; }; }; "rustls-platform-verifier-android" = rec { crateName = "rustls-platform-verifier-android"; - version = "0.1.1"; + version = "0.2.0"; edition = "2021"; - sha256 = "13vq6sxsgz9547xm2zbdxiw8x7ad1g8n8ax6xvxsjqszk7q6awgq"; + sha256 = "0pqsbv8656sr3h9jmq0q9848g03irccncywplmc29zs0pk08kipf"; libName = "rustls_platform_verifier_android"; }; "rustls-webpki" = rec { crateName = "rustls-webpki"; - version = "0.103.14"; + version = "0.103.15"; edition = "2021"; - sha256 = "0njk28gvbqrsfg1b5r35y4f80n37kcjylj72fpc0k0g60n3529q5"; + sha256 = "1hhanq3lz384v4nccacnjfwsyy99n3yc6m6iw8kljz8yicfwzhzk"; libName = "webpki"; dependencies = [ { @@ -9277,13 +9350,13 @@ rec { } { name = "syn"; - packageId = "syn 3.0.3"; + packageId = "syn 3.0.6"; } ]; devDependencies = [ { name = "syn"; - packageId = "syn 3.0.3"; + packageId = "syn 3.0.6"; features = [ "extra-traits" ]; } ]; @@ -9394,7 +9467,7 @@ rec { dependencies = [ { name = "bitflags"; - packageId = "bitflags 2.13.1"; + packageId = "bitflags 2.13.2"; } { name = "core-foundation"; @@ -9665,7 +9738,7 @@ rec { } { name = "syn"; - packageId = "syn 3.0.3"; + packageId = "syn 3.0.6"; usesDefaultFeatures = false; features = [ "clone-impls" "derive" "parsing" "printing" "proc-macro" ]; } @@ -9697,7 +9770,7 @@ rec { } { name = "syn"; - packageId = "syn 3.0.3"; + packageId = "syn 3.0.6"; usesDefaultFeatures = false; features = [ "clone-impls" "derive" "parsing" "printing" ]; } @@ -10066,7 +10139,7 @@ rec { features = { "default" = [ "std" ]; }; - resolvedDefaultFeatures = [ "std" ]; + resolvedDefaultFeatures = [ "aarch64_neon" "public_imp" "std" ]; }; "slab" = rec { crateName = "slab"; @@ -10327,9 +10400,9 @@ rec { edition = "2024"; workspace_member = null; src = pkgs.fetchgit { - url = "https://github.com/stackabletech/operator-rs.git"; - rev = "ed84d456ff0b8324db3d7444659cb207564be8c9"; - sha256 = "1ra6n0mi633sipsgrli7hhxv64khhs00l448mqg61gxsjc4y02r0"; + url = "https://github.com/stackabletech//operator-rs.git"; + rev = "5d7902142fe5c7ab0a820117a80b5f4a4e34d5c9"; + sha256 = "07h2vqgm28576l46w03pfv7sxi8cw2v1lj78mi5j40kqyikn03by"; }; libName = "stackable_certs"; authors = [ @@ -10365,7 +10438,7 @@ rec { } { name = "rand"; - packageId = "rand 0.10.2"; + packageId = "rand 0.10.3"; } { name = "rand_core"; @@ -10430,9 +10503,9 @@ rec { edition = "2024"; workspace_member = null; src = pkgs.fetchgit { - url = "https://github.com/stackabletech/operator-rs.git"; - rev = "ed84d456ff0b8324db3d7444659cb207564be8c9"; - sha256 = "1ra6n0mi633sipsgrli7hhxv64khhs00l448mqg61gxsjc4y02r0"; + url = "https://github.com/stackabletech//operator-rs.git"; + rev = "5d7902142fe5c7ab0a820117a80b5f4a4e34d5c9"; + sha256 = "07h2vqgm28576l46w03pfv7sxi8cw2v1lj78mi5j40kqyikn03by"; }; libName = "stackable_operator"; authors = [ @@ -10509,7 +10582,7 @@ rec { } { name = "rand"; - packageId = "rand 0.10.2"; + packageId = "rand 0.10.3"; } { name = "regex"; @@ -10629,9 +10702,9 @@ rec { edition = "2024"; workspace_member = null; src = pkgs.fetchgit { - url = "https://github.com/stackabletech/operator-rs.git"; - rev = "ed84d456ff0b8324db3d7444659cb207564be8c9"; - sha256 = "1ra6n0mi633sipsgrli7hhxv64khhs00l448mqg61gxsjc4y02r0"; + url = "https://github.com/stackabletech//operator-rs.git"; + rev = "5d7902142fe5c7ab0a820117a80b5f4a4e34d5c9"; + sha256 = "07h2vqgm28576l46w03pfv7sxi8cw2v1lj78mi5j40kqyikn03by"; }; procMacro = true; libName = "stackable_operator_derive"; @@ -10641,7 +10714,7 @@ rec { dependencies = [ { name = "darling"; - packageId = "darling 0.24.0"; + packageId = "darling 0.24.1"; } { name = "proc-macro2"; @@ -10653,7 +10726,7 @@ rec { } { name = "syn"; - packageId = "syn 3.0.3"; + packageId = "syn 3.0.6"; } ]; @@ -10664,9 +10737,9 @@ rec { edition = "2024"; workspace_member = null; src = pkgs.fetchgit { - url = "https://github.com/stackabletech/operator-rs.git"; - rev = "ed84d456ff0b8324db3d7444659cb207564be8c9"; - sha256 = "1ra6n0mi633sipsgrli7hhxv64khhs00l448mqg61gxsjc4y02r0"; + url = "https://github.com/stackabletech//operator-rs.git"; + rev = "5d7902142fe5c7ab0a820117a80b5f4a4e34d5c9"; + sha256 = "07h2vqgm28576l46w03pfv7sxi8cw2v1lj78mi5j40kqyikn03by"; }; libName = "stackable_shared"; authors = [ @@ -10745,9 +10818,9 @@ rec { edition = "2024"; workspace_member = null; src = pkgs.fetchgit { - url = "https://github.com/stackabletech/operator-rs.git"; - rev = "ed84d456ff0b8324db3d7444659cb207564be8c9"; - sha256 = "1ra6n0mi633sipsgrli7hhxv64khhs00l448mqg61gxsjc4y02r0"; + url = "https://github.com/stackabletech//operator-rs.git"; + rev = "5d7902142fe5c7ab0a820117a80b5f4a4e34d5c9"; + sha256 = "07h2vqgm28576l46w03pfv7sxi8cw2v1lj78mi5j40kqyikn03by"; }; libName = "stackable_telemetry"; authors = [ @@ -10930,6 +11003,10 @@ rec { name = "tracing"; packageId = "tracing"; } + { + name = "url"; + packageId = "url"; + } ]; buildDependencies = [ { @@ -10958,9 +11035,9 @@ rec { edition = "2024"; workspace_member = null; src = pkgs.fetchgit { - url = "https://github.com/stackabletech/operator-rs.git"; - rev = "ed84d456ff0b8324db3d7444659cb207564be8c9"; - sha256 = "1ra6n0mi633sipsgrli7hhxv64khhs00l448mqg61gxsjc4y02r0"; + url = "https://github.com/stackabletech//operator-rs.git"; + rev = "5d7902142fe5c7ab0a820117a80b5f4a4e34d5c9"; + sha256 = "07h2vqgm28576l46w03pfv7sxi8cw2v1lj78mi5j40kqyikn03by"; }; libName = "stackable_versioned"; authors = [ @@ -11008,9 +11085,9 @@ rec { edition = "2024"; workspace_member = null; src = pkgs.fetchgit { - url = "https://github.com/stackabletech/operator-rs.git"; - rev = "ed84d456ff0b8324db3d7444659cb207564be8c9"; - sha256 = "1ra6n0mi633sipsgrli7hhxv64khhs00l448mqg61gxsjc4y02r0"; + url = "https://github.com/stackabletech//operator-rs.git"; + rev = "5d7902142fe5c7ab0a820117a80b5f4a4e34d5c9"; + sha256 = "07h2vqgm28576l46w03pfv7sxi8cw2v1lj78mi5j40kqyikn03by"; }; procMacro = true; libName = "stackable_versioned_macros"; @@ -11024,7 +11101,7 @@ rec { } { name = "darling"; - packageId = "darling 0.24.0"; + packageId = "darling 0.24.1"; } { name = "indoc"; @@ -11061,7 +11138,7 @@ rec { } { name = "syn"; - packageId = "syn 3.0.3"; + packageId = "syn 3.0.6"; } ]; @@ -11072,9 +11149,9 @@ rec { edition = "2024"; workspace_member = null; src = pkgs.fetchgit { - url = "https://github.com/stackabletech/operator-rs.git"; - rev = "ed84d456ff0b8324db3d7444659cb207564be8c9"; - sha256 = "1ra6n0mi633sipsgrli7hhxv64khhs00l448mqg61gxsjc4y02r0"; + url = "https://github.com/stackabletech//operator-rs.git"; + rev = "5d7902142fe5c7ab0a820117a80b5f4a4e34d5c9"; + sha256 = "07h2vqgm28576l46w03pfv7sxi8cw2v1lj78mi5j40kqyikn03by"; }; libName = "stackable_webhook"; authors = [ @@ -11133,7 +11210,7 @@ rec { } { name = "rand"; - packageId = "rand 0.10.2"; + packageId = "rand 0.10.3"; } { name = "serde"; @@ -11179,7 +11256,7 @@ rec { } { name = "tower-http"; - packageId = "tower-http 0.7.0"; + packageId = "tower-http 0.7.1"; features = [ "trace" ]; } { @@ -11351,13 +11428,13 @@ rec { "proc-macro" = [ "proc-macro2/proc-macro" "quote?/proc-macro" ]; "test" = [ "syn-test-suite/all-features" ]; }; - resolvedDefaultFeatures = [ "clone-impls" "default" "derive" "extra-traits" "fold" "full" "parsing" "printing" "proc-macro" "visit" "visit-mut" ]; + resolvedDefaultFeatures = [ "clone-impls" "default" "derive" "extra-traits" "full" "parsing" "printing" "proc-macro" "visit" "visit-mut" ]; }; - "syn 3.0.3" = rec { + "syn 3.0.6" = rec { crateName = "syn"; - version = "3.0.3"; + version = "3.0.6"; edition = "2021"; - sha256 = "18srnql3cd39j9q6hf1az02p67rlr1rf6njx9zx4vxj9i3jvmsak"; + sha256 = "1vmw7s58rzrs926nv5m06x7qbgswm1aa9iw3s1bj5var47kyi4w5"; authors = [ "David Tolnay " ]; @@ -11384,7 +11461,7 @@ rec { "proc-macro" = [ "proc-macro2/proc-macro" "quote?/proc-macro" ]; "test" = [ "syn-test-suite/all-features" ]; }; - resolvedDefaultFeatures = [ "clone-impls" "default" "derive" "extra-traits" "full" "parsing" "printing" "proc-macro" "visit" "visit-mut" ]; + resolvedDefaultFeatures = [ "clone-impls" "default" "derive" "extra-traits" "fold" "full" "parsing" "printing" "proc-macro" "visit" "visit-mut" ]; }; "sync_wrapper" = rec { crateName = "sync_wrapper"; @@ -11410,9 +11487,9 @@ rec { }; "synstructure" = rec { crateName = "synstructure"; - version = "0.13.2"; + version = "0.14.0"; edition = "2018"; - sha256 = "1lh9lx3r3jb18f8sbj29am5hm9jymvbwh6jb1izsnnxgvgrp12kj"; + sha256 = "00kzyz38xqvs7x1dn6rp64y0ckly4m7ywf3qk3qkgqfzs3nh85wh"; authors = [ "Nika Layzell " ]; @@ -11429,7 +11506,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.119"; + packageId = "syn 3.0.6"; usesDefaultFeatures = false; features = [ "derive" "parsing" "printing" "clone-impls" "visit" "extra-traits" ]; } @@ -11456,18 +11533,18 @@ rec { ]; }; - "thiserror 2.0.20" = rec { + "thiserror 2.0.21" = rec { crateName = "thiserror"; - version = "2.0.20"; + version = "2.0.21"; edition = "2021"; - sha256 = "0kxs6p295jffxhzaxpxv1dwaaf5iqlm6sx8h0djp6ancbxgj71pc"; + sha256 = "17hq1lh5dyr3bkc7zzjrbrp4qgkvhc48kgq1n5fdxkindaw2rr89"; authors = [ "David Tolnay " ]; dependencies = [ { name = "thiserror-impl"; - packageId = "thiserror-impl 2.0.20"; + packageId = "thiserror-impl 2.0.21"; } ]; features = { @@ -11501,11 +11578,11 @@ rec { ]; }; - "thiserror-impl 2.0.20" = rec { + "thiserror-impl 2.0.21" = rec { crateName = "thiserror-impl"; - version = "2.0.20"; + version = "2.0.21"; edition = "2021"; - sha256 = "1bwjc94gi0xn5jz26h1a8bjj1wdkvvr6jifamyc4mp9n28zcs15w"; + sha256 = "0945n8agp7kg6n6b35yyjb4g5xv2q22vrw15h6jj1nw76a99flgy"; procMacro = true; libName = "thiserror_impl"; authors = [ @@ -11522,7 +11599,7 @@ rec { } { name = "syn"; - packageId = "syn 3.0.3"; + packageId = "syn 3.0.6"; } ]; @@ -11746,9 +11823,9 @@ rec { }; "tokio" = rec { crateName = "tokio"; - version = "1.53.1"; + version = "1.53.2"; edition = "2021"; - sha256 = "1v8b3b45pkpbibls75yniqbvx5dlks2708141ljni5mnf6lawb10"; + sha256 = "0i202ksji8q2asvii0adzgi8m0z93z3j7apn62qfh8d6qzy92pz9"; authors = [ "Tokio Contributors " ]; @@ -11886,7 +11963,7 @@ rec { } { name = "syn"; - packageId = "syn 3.0.3"; + packageId = "syn 3.0.6"; features = [ "full" ]; } ]; @@ -11894,9 +11971,9 @@ rec { }; "tokio-rustls" = rec { crateName = "tokio-rustls"; - version = "0.26.4"; + version = "0.26.6"; edition = "2021"; - sha256 = "0qggwknz9w4bbsv1z158hlnpkm97j3w8v31586jipn99byaala8p"; + sha256 = "1nq5s413p6hkwrgjrpag1gi2mnjajpbszqhmhbpnkmfdq9w2dk69"; libName = "tokio_rustls"; dependencies = [ { @@ -12067,9 +12144,9 @@ rec { }; "toml_edit" = rec { crateName = "toml_edit"; - version = "0.25.13+spec-1.1.0"; + version = "0.25.15+spec-1.1.0"; edition = "2024"; - sha256 = "16xgmjdnxssdpj7rjyimsk4fqbv29g8zl7zhdbc6dxrf9mz3cxb9"; + sha256 = "0556lgzcvgfy16b8sxskr391s6cbfwnb0r4h5i4k6qw5lnaflh0k"; dependencies = [ { name = "indexmap"; @@ -12437,7 +12514,7 @@ rec { } { name = "bitflags"; - packageId = "bitflags 2.13.1"; + packageId = "bitflags 2.13.2"; } { name = "bytes"; @@ -12550,11 +12627,11 @@ rec { }; resolvedDefaultFeatures = [ "auth" "base64" "default" "follow-redirect" "futures-util" "map-response-body" "mime" "tower" "trace" "tracing" "util" "validate-request" ]; }; - "tower-http 0.7.0" = rec { + "tower-http 0.7.1" = rec { crateName = "tower-http"; - version = "0.7.0"; + version = "0.7.1"; edition = "2018"; - sha256 = "0cz2k1a6gj54lcqx9cxb6k7rfgwcgc2zi31xnq0vxhmh2blpa7xi"; + sha256 = "172v4iw852pzl0v0k0nlklavlsnaw3zmbmx1w2xirmpxlik5m808"; libName = "tower_http"; authors = [ "Tower Maintainers " @@ -12562,7 +12639,7 @@ rec { dependencies = [ { name = "bitflags"; - packageId = "bitflags 2.13.1"; + packageId = "bitflags 2.13.2"; } { name = "bytes"; @@ -12737,7 +12814,7 @@ rec { } { name = "thiserror"; - packageId = "thiserror 2.0.20"; + packageId = "thiserror 2.0.21"; } { name = "time"; @@ -13113,9 +13190,9 @@ rec { }; "unicode-ident" = rec { crateName = "unicode-ident"; - version = "1.0.24"; + version = "1.0.26"; edition = "2021"; - sha256 = "0xfs8y1g7syl2iykji8zk5hgfi5jw819f5zsrbaxmlzwsly33r76"; + sha256 = "0m3915ipi4zz7isncf5k1dz47ys0nq9j7l4l2n2rm03zaxwg8ifj"; libName = "unicode_ident"; authors = [ "David Tolnay " @@ -13272,9 +13349,9 @@ rec { }; "uuid" = rec { crateName = "uuid"; - version = "1.24.1"; + version = "1.27.0"; edition = "2021"; - sha256 = "1n8b7fg7dbx6ws64387l2i0qq900rw9b7qax63acdh37sczw1vrc"; + sha256 = "16h5h6bf5ybh1lj97lcdl41g7fqbiczpavpsb0zf3b63p4v7s9wp"; authors = [ "Ashley Mannix" "Dylan DPC" @@ -13386,9 +13463,9 @@ rec { }; "want" = rec { crateName = "want"; - version = "0.3.1"; + version = "0.3.2"; edition = "2018"; - sha256 = "03hbfrnvqqdchb5kgxyavb9jabwza0dmh2vw5kg0dq8rxl57d9xz"; + sha256 = "02zdlaqarwm9x3z1l0vm61mv8f6mv0kp4izgnxlfibqhv46xsk7c"; authors = [ "Sean McArthur " ]; @@ -13438,9 +13515,9 @@ rec { }; "wasm-bindgen" = rec { crateName = "wasm-bindgen"; - version = "0.2.127"; + version = "0.2.129"; edition = "2021"; - sha256 = "0w6fa1mkbb6qlkffgy4qaz0hdf496zbjkyiyvs4lvmpd8xbr6w0v"; + sha256 = "02flhqld01jqb6vbfyx1gb8s78g1pnq2164daxad93y6mhrlzdcv"; libName = "wasm_bindgen"; authors = [ "The wasm-bindgen Developers" @@ -13471,12 +13548,6 @@ rec { rename = "rustversion-compat"; } ]; - devDependencies = [ - { - name = "once_cell"; - packageId = "once_cell"; - } - ]; features = { "default" = [ "std" ]; "enable-interning" = [ "std" ]; @@ -13489,9 +13560,9 @@ rec { }; "wasm-bindgen-futures" = rec { crateName = "wasm-bindgen-futures"; - version = "0.4.77"; + version = "0.4.79"; edition = "2021"; - sha256 = "0l3r8m335kb2p8yj65kb0biwlypcx3ay4g750hafkl13rkapfxvb"; + sha256 = "03k1wcg5j3wqk6vgy6gzcq868vsa9k81dlhqissfk0nrw96v7fiw"; libName = "wasm_bindgen_futures"; authors = [ "The wasm-bindgen Developers" @@ -13502,6 +13573,13 @@ rec { packageId = "js-sys"; usesDefaultFeatures = false; } + { + name = "tokio"; + packageId = "tokio"; + usesDefaultFeatures = false; + target = { target, features }: (("emscripten" == target."os" or null) && (target."wasm_bindgen_unstable_tokio" or false)); + features = [ "rt" "time" ]; + } { name = "wasm-bindgen"; packageId = "wasm-bindgen"; @@ -13517,9 +13595,9 @@ rec { }; "wasm-bindgen-macro" = rec { crateName = "wasm-bindgen-macro"; - version = "0.2.127"; + version = "0.2.129"; edition = "2021"; - sha256 = "1hcvlb6bv771fvgifd367wd0cm4giyar8fq5i4h705vj7y7myxvp"; + sha256 = "0dc5xq09sy1v9ns1fhb0cnyqz5p1wcjjvkdmxskj9qhnbg1x0a9f"; procMacro = true; libName = "wasm_bindgen_macro"; authors = [ @@ -13541,9 +13619,9 @@ rec { }; "wasm-bindgen-macro-support" = rec { crateName = "wasm-bindgen-macro-support"; - version = "0.2.127"; + version = "0.2.129"; edition = "2021"; - sha256 = "112j4d7dv8y2sk9yy9czrl9fpjx9388ywnn7icdv2bywazw367g1"; + sha256 = "1dx6w90f14avmhri7ss9lyz03060g6475r4axy3bm7biqf5ill3g"; libName = "wasm_bindgen_macro_support"; authors = [ "The wasm-bindgen Developers" @@ -13563,7 +13641,7 @@ rec { } { name = "syn"; - packageId = "syn 2.0.119"; + packageId = "syn 3.0.6"; features = [ "visit" "visit-mut" "full" "extra-traits" ]; } { @@ -13577,10 +13655,10 @@ rec { }; "wasm-bindgen-shared" = rec { crateName = "wasm-bindgen-shared"; - version = "0.2.127"; + version = "0.2.129"; edition = "2021"; links = "wasm_bindgen"; - sha256 = "1gywp6xv8a27fvm3ga9xby93xyic3hc2s626b9z9rw2xqny4vxky"; + sha256 = "1ilmp5d3sl8lrq9djhcs90gk66yvk8mgwk4sfrvpvkd75b2wkw13"; libName = "wasm_bindgen_shared"; authors = [ "The wasm-bindgen Developers" @@ -13595,9 +13673,9 @@ rec { }; "web-sys" = rec { crateName = "web-sys"; - version = "0.3.104"; + version = "0.3.106"; edition = "2021"; - sha256 = "0c0acbvaqzqf21q5vdff2g74fvb7afi91xjplmclybq4d24k6df4"; + sha256 = "195bd1m14w3hsw5fg3sr938mh7y4cb260d0sq6a6brffxjfin9l8"; libName = "web_sys"; authors = [ "The wasm-bindgen Developers" @@ -14092,7 +14170,7 @@ rec { "default" = [ "std" ]; "std" = [ "wasm-bindgen/std" "js-sys/std" ]; }; - resolvedDefaultFeatures = [ "AbortController" "AbortSignal" "Blob" "BlobPropertyBag" "EventTarget" "File" "FormData" "Headers" "ReadableStream" "Request" "RequestCache" "RequestCredentials" "RequestInit" "RequestMode" "Response" "ServiceWorkerGlobalScope" "Window" "WorkerGlobalScope" "default" "std" ]; + resolvedDefaultFeatures = [ "AbortController" "AbortSignal" "Blob" "BlobPropertyBag" "EventTarget" "File" "FormData" "Headers" "ReadableStream" "ReferrerPolicy" "Request" "RequestCache" "RequestCredentials" "RequestInit" "RequestMode" "Response" "ServiceWorkerGlobalScope" "Window" "WorkerGlobalScope" "default" "std" ]; }; "web-time" = rec { crateName = "web-time"; @@ -15094,9 +15172,9 @@ rec { }; "yoke-derive" = rec { crateName = "yoke-derive"; - version = "0.8.2"; + version = "0.8.4"; edition = "2021"; - sha256 = "13l5y5sz4lqm7rmyakjbh6vwgikxiql51xfff9hq2j485hk4r16y"; + sha256 = "0wbdvvdv9birwxrr9ynxj0k7as0f0ci7ihhck34yi09nvgibv3pc"; procMacro = true; libName = "yoke_derive"; authors = [ @@ -15113,8 +15191,8 @@ rec { } { name = "syn"; - packageId = "syn 2.0.119"; - features = [ "fold" ]; + packageId = "syn 3.0.6"; + features = [ "fold" "visit" ]; } { name = "synstructure"; @@ -15125,9 +15203,9 @@ rec { }; "zerocopy" = rec { crateName = "zerocopy"; - version = "0.8.56"; + version = "0.8.60"; edition = "2021"; - sha256 = "1svmifchgdk0sm7v24lfwhhxis57gwa2lg21ingmmd5dhgjn8rsm"; + sha256 = "1ghxkd4fv4ka88v2rg9260p6465v49hmc1zvqfm6yvs2nx5zq034"; dependencies = [ { name = "zerocopy-derive"; @@ -15157,9 +15235,9 @@ rec { }; "zerocopy-derive" = rec { crateName = "zerocopy-derive"; - version = "0.8.56"; + version = "0.8.60"; edition = "2021"; - sha256 = "1hfz1hfxj86y1sgyia8gbisny9bl9bwlbahg4jypjmsp43y45azj"; + sha256 = "1nrlkb37wm1sq962725mxwhahaicbg277q25kbslvbavab3prhlr"; procMacro = true; libName = "zerocopy_derive"; dependencies = [ @@ -15210,9 +15288,9 @@ rec { }; "zerofrom-derive" = rec { crateName = "zerofrom-derive"; - version = "0.1.7"; + version = "0.1.8"; edition = "2021"; - sha256 = "18c4wsnznhdxx6m80piil1lbyszdiwsshgjrybqcm4b6qic22lqi"; + sha256 = "0jhdy4p9c6ja3dynsdck14g2iilq8ai5ch6nsi455x67ys1lcnzp"; procMacro = true; libName = "zerofrom_derive"; authors = [ @@ -15229,8 +15307,8 @@ rec { } { name = "syn"; - packageId = "syn 2.0.119"; - features = [ "fold" ]; + packageId = "syn 3.0.6"; + features = [ "fold" "visit" ]; } { name = "synstructure"; @@ -15377,9 +15455,9 @@ rec { }; "zerovec-derive" = rec { crateName = "zerovec-derive"; - version = "0.11.5"; + version = "0.11.6"; edition = "2021"; - sha256 = "1a8pz516ddcgxvxq3j1xgprac5wnprlrbyzsgzarj0423la2l8cz"; + sha256 = "1ni5j8v99x3fcf3l8kp64b7aq4vf8y22jshfq74xs9mxkp1nzprl"; procMacro = true; libName = "zerovec_derive"; authors = [ @@ -15396,12 +15474,29 @@ rec { } { name = "syn"; - packageId = "syn 3.0.3"; + packageId = "syn 3.0.6"; features = [ "extra-traits" ]; } ]; }; + "zlib-rs" = rec { + crateName = "zlib-rs"; + version = "0.6.8"; + edition = "2021"; + sha256 = "04j158293bx73kv5pj1i89ai411q7fxc9zwk3wkpqgb9gj7fas5j"; + libName = "zlib_rs"; + features = { + "__internal-fuzz" = [ "arbitrary" ]; + "__internal-test" = [ "quickcheck" ]; + "arbitrary" = [ "dep:arbitrary" ]; + "avx512" = [ "vpclmulqdq" ]; + "default" = [ "std" "c-allocator" ]; + "quickcheck" = [ "dep:quickcheck" ]; + "std" = [ "rust-allocator" ]; + }; + resolvedDefaultFeatures = [ "rust-allocator" "std" ]; + }; "zmij" = rec { crateName = "zmij"; version = "1.0.23"; diff --git a/crate-hashes.json b/crate-hashes.json index 2046087d1..a2b7d4666 100644 --- a/crate-hashes.json +++ b/crate-hashes.json @@ -1,11 +1,11 @@ { - "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.119.0#k8s-version@0.1.3": "1ra6n0mi633sipsgrli7hhxv64khhs00l448mqg61gxsjc4y02r0", - "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.119.0#stackable-certs@0.4.1": "1ra6n0mi633sipsgrli7hhxv64khhs00l448mqg61gxsjc4y02r0", - "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.119.0#stackable-operator-derive@0.3.1": "1ra6n0mi633sipsgrli7hhxv64khhs00l448mqg61gxsjc4y02r0", - "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.119.0#stackable-operator@0.119.0": "1ra6n0mi633sipsgrli7hhxv64khhs00l448mqg61gxsjc4y02r0", - "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.119.0#stackable-shared@0.1.2": "1ra6n0mi633sipsgrli7hhxv64khhs00l448mqg61gxsjc4y02r0", - "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.119.0#stackable-telemetry@0.6.5": "1ra6n0mi633sipsgrli7hhxv64khhs00l448mqg61gxsjc4y02r0", - "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.119.0#stackable-versioned-macros@0.11.1": "1ra6n0mi633sipsgrli7hhxv64khhs00l448mqg61gxsjc4y02r0", - "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.119.0#stackable-versioned@0.11.1": "1ra6n0mi633sipsgrli7hhxv64khhs00l448mqg61gxsjc4y02r0", - "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.119.0#stackable-webhook@0.10.0": "1ra6n0mi633sipsgrli7hhxv64khhs00l448mqg61gxsjc4y02r0" + "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ffrom_docs#k8s-version@0.1.3": "07h2vqgm28576l46w03pfv7sxi8cw2v1lj78mi5j40kqyikn03by", + "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ffrom_docs#stackable-certs@0.4.1": "07h2vqgm28576l46w03pfv7sxi8cw2v1lj78mi5j40kqyikn03by", + "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ffrom_docs#stackable-operator-derive@0.3.1": "07h2vqgm28576l46w03pfv7sxi8cw2v1lj78mi5j40kqyikn03by", + "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ffrom_docs#stackable-operator@0.119.0": "07h2vqgm28576l46w03pfv7sxi8cw2v1lj78mi5j40kqyikn03by", + "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ffrom_docs#stackable-shared@0.1.2": "07h2vqgm28576l46w03pfv7sxi8cw2v1lj78mi5j40kqyikn03by", + "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ffrom_docs#stackable-telemetry@0.6.5": "07h2vqgm28576l46w03pfv7sxi8cw2v1lj78mi5j40kqyikn03by", + "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ffrom_docs#stackable-versioned-macros@0.11.1": "07h2vqgm28576l46w03pfv7sxi8cw2v1lj78mi5j40kqyikn03by", + "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ffrom_docs#stackable-versioned@0.11.1": "07h2vqgm28576l46w03pfv7sxi8cw2v1lj78mi5j40kqyikn03by", + "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ffrom_docs#stackable-webhook@0.10.0": "07h2vqgm28576l46w03pfv7sxi8cw2v1lj78mi5j40kqyikn03by" } \ No newline at end of file From 9b935458c5fcca04d9ed70e93e29bedcd086ddb2 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Thu, 8 Oct 2026 12:29:45 +0200 Subject: [PATCH 04/34] fix: Store as v1alpha2 --- extra/crds.yaml | 230 +++++++++--------- rust/operator-binary/src/main.rs | 2 +- .../src/webhooks/conversion.rs | 2 +- 3 files changed, 117 insertions(+), 117 deletions(-) diff --git a/extra/crds.yaml b/extra/crds.yaml index c964be412..a843c4e4f 100644 --- a/extra/crds.yaml +++ b/extra/crds.yaml @@ -3544,7 +3544,7 @@ spec: singular: trinocatalog scope: Namespaced versions: - - name: v1alpha1 + - name: v1alpha2 schema: openAPIV3Schema: description: The TrinoCatalog resource can be used to define catalogs in Kubernetes objects. @@ -4053,6 +4053,100 @@ spec: iceberg: description: An [Apache Iceberg](https://docs.stackable.tech/home/nightly/trino/usage-guide/catalogs/iceberg) connector. properties: + catalog: + description: |- + Connection to a metadata catalog, which will be used as a storage for metadata. + + We support the following backends: + + * REST catalog + * Hive metastore + * User provided + + Details can be found on the corresponding documentation + oneOf: + - required: + - rest + - required: + - hiveMetastore + - required: + - userProvided + properties: + hiveMetastore: + description: Use a Hive metastore to store metadata. + properties: + configMap: + description: Name of the [discovery ConfigMap](https://docs.stackable.tech/home/nightly/concepts/service_discovery) providing information about the Hive metastore. + maxLength: 253 + minLength: 1 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ + type: string + required: + - configMap + type: object + rest: + description: (Recommended) use a REST catalog to store metadata. + properties: + security: + default: + none: {} + description: How to authenticate against the REST catalog. + oneOf: + - required: + - none + - required: + - oAuth2 + properties: + none: + description: Don't authenticate against the REST catalog (chosen by default). + type: object + oAuth2: + description: |- + Use OAuth2 to authenticate against the REST catalog. + + Note that we only support configuring a subset of Trino's properties, you might need to use + `configOverrides` to be able to set all [available properties](https://trino.io/docs/current/object-storage/metastores.html#iceberg-specific-metastores). + properties: + credential: + description: The credential to present to the REST catalog. + oneOf: + - required: + - tokenSecretName + - required: + - credentialSecretName + properties: + credentialSecretName: + description: The Secret needs to contain the `username` and `password` keys. + type: string + tokenSecretName: + description: |- + Authenticate using a bearer token. + + The Secret needs to contain the `token` key. + type: string + type: object + serverUri: + description: The endpoint to retrieve access token from OAuth2 Server. + format: uri + type: string + required: + - credential + - serverUri + type: object + type: object + uri: + description: URL of the rest catalog server. + format: uri + type: string + required: + - uri + type: object + userProvided: + description: |- + The operator doesn't configure any catalog, the user needs to do that, + e.g. using `configOverrides`. + type: object + type: object hdfs: description: |- Connection to an HDFS cluster. @@ -4068,23 +4162,6 @@ spec: required: - configMap type: object - metastore: - description: |- - Optional connection to a Hive Metastore, which will be used as a storage for metadata. - - The connection is optional, as Iceberg also supports other catalogs, such as a REST catalog, - which (currently) can only be added using configOverrides. - nullable: true - properties: - configMap: - description: Name of the [discovery ConfigMap](https://docs.stackable.tech/home/nightly/concepts/service_discovery) providing information about the Hive metastore. - maxLength: 253 - minLength: 1 - pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ - type: string - required: - - configMap - type: object s3: description: |- Connection to an S3 store. @@ -4237,6 +4314,8 @@ spec: reference: type: string type: object + required: + - catalog type: object postgresql: description: An [PostgreSQL](https://docs.stackable.tech/home/nightly/trino/usage-guide/catalogs/postgresql) connector. @@ -4329,7 +4408,7 @@ spec: type: object served: true storage: true - - name: v1alpha2 + - name: v1alpha1 schema: openAPIV3Schema: description: The TrinoCatalog resource can be used to define catalogs in Kubernetes objects. @@ -4838,100 +4917,6 @@ spec: iceberg: description: An [Apache Iceberg](https://docs.stackable.tech/home/nightly/trino/usage-guide/catalogs/iceberg) connector. properties: - catalog: - description: |- - Connection to a metadata catalog, which will be used as a storage for metadata. - - We support the following backends: - - * REST catalog - * Hive metastore - * User provided - - Details can be found on the corresponding documentation - oneOf: - - required: - - rest - - required: - - hiveMetastore - - required: - - userProvided - properties: - hiveMetastore: - description: Use a Hive metastore to store metadata. - properties: - configMap: - description: Name of the [discovery ConfigMap](https://docs.stackable.tech/home/nightly/concepts/service_discovery) providing information about the Hive metastore. - maxLength: 253 - minLength: 1 - pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ - type: string - required: - - configMap - type: object - rest: - description: (Recommended) use a REST catalog to store metadata. - properties: - security: - default: - none: {} - description: How to authenticate against the REST catalog. - oneOf: - - required: - - none - - required: - - oAuth2 - properties: - none: - description: Don't authenticate against the REST catalog (chosen by default). - type: object - oAuth2: - description: |- - Use OAuth2 to authenticate against the REST catalog. - - Note that we only support configuring a subset of Trino's properties, you might need to use - `configOverrides` to be able to set all [available properties](https://trino.io/docs/current/object-storage/metastores.html#iceberg-specific-metastores). - properties: - credential: - description: The credential to present to the REST catalog. - oneOf: - - required: - - tokenSecretName - - required: - - credentialSecretName - properties: - credentialSecretName: - description: The Secret needs to contain the `username` and `password` keys. - type: string - tokenSecretName: - description: |- - Authenticate using a bearer token. - - The Secret needs to contain the `token` key. - type: string - type: object - serverUri: - description: The endpoint to retrieve access token from OAuth2 Server. - format: uri - type: string - required: - - credential - - serverUri - type: object - type: object - uri: - description: URL of the rest catalog server. - format: uri - type: string - required: - - uri - type: object - userProvided: - description: |- - The operator doesn't configure any catalog, the user needs to do that, - e.g. using `configOverrides`. - type: object - type: object hdfs: description: |- Connection to an HDFS cluster. @@ -4947,6 +4932,23 @@ spec: required: - configMap type: object + metastore: + description: |- + Optional connection to a Hive Metastore, which will be used as a storage for metadata. + + The connection is optional, as Iceberg also supports other catalogs, such as a REST catalog, + which (currently) can only be added using configOverrides. + nullable: true + properties: + configMap: + description: Name of the [discovery ConfigMap](https://docs.stackable.tech/home/nightly/concepts/service_discovery) providing information about the Hive metastore. + maxLength: 253 + minLength: 1 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ + type: string + required: + - configMap + type: object s3: description: |- Connection to an S3 store. @@ -5099,8 +5101,6 @@ spec: reference: type: string type: object - required: - - catalog type: object postgresql: description: An [PostgreSQL](https://docs.stackable.tech/home/nightly/trino/usage-guide/catalogs/postgresql) connector. diff --git a/rust/operator-binary/src/main.rs b/rust/operator-binary/src/main.rs index e5c5672ec..496be38aa 100644 --- a/rust/operator-binary/src/main.rs +++ b/rust/operator-binary/src/main.rs @@ -78,7 +78,7 @@ async fn main() -> anyhow::Result<()> { Command::Crd => { TrinoCluster::merged_crd(TrinoClusterVersion::V1Alpha1)? .print_yaml_schema(built_info::PKG_VERSION, &SerializeOptions::default())?; - TrinoCatalog::merged_crd(TrinoCatalogVersion::V1Alpha1)? + TrinoCatalog::merged_crd(TrinoCatalogVersion::V1Alpha2)? .print_yaml_schema(built_info::PKG_VERSION, &SerializeOptions::default())?; } Command::Run(RunArguments { diff --git a/rust/operator-binary/src/webhooks/conversion.rs b/rust/operator-binary/src/webhooks/conversion.rs index 88d5649df..ad857763b 100644 --- a/rust/operator-binary/src/webhooks/conversion.rs +++ b/rust/operator-binary/src/webhooks/conversion.rs @@ -36,7 +36,7 @@ pub async fn create_webhook_server( ) -> Result { let crds_and_handlers = vec![ ( - TrinoCatalog::merged_crd(TrinoCatalogVersion::V1Alpha1).context(MergeCrdSnafu)?, + TrinoCatalog::merged_crd(TrinoCatalogVersion::V1Alpha2).context(MergeCrdSnafu)?, TrinoCatalog::try_convert as fn(_) -> _, ), ( From d80e9e5956bec102333a40e517b9e48617a3a343 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Thu, 8 Oct 2026 12:30:16 +0200 Subject: [PATCH 05/34] chore: Use v1alpha2 everywhere --- deploy/helm/trino-operator/Chart.yaml | 2 +- .../examples/usage-guide/fault-tolerant-execution.yaml | 2 +- .../trino/examples/usage-guide/trino-insecure.yaml | 2 +- .../examples/usage-guide/trino-secure-internal-tls.yaml | 2 +- .../trino/examples/usage-guide/trino-secure-tls-only.yaml | 2 +- .../trino/examples/usage-guide/trino-secure-tls.yaml | 2 +- .../trino/pages/usage-guide/catalogs/black-hole.adoc | 2 +- .../trino/pages/usage-guide/catalogs/delta-lake.adoc | 2 +- .../modules/trino/pages/usage-guide/catalogs/generic.adoc | 2 +- .../trino/pages/usage-guide/catalogs/google-sheets.adoc | 2 +- docs/modules/trino/pages/usage-guide/catalogs/hive.adoc | 4 ++-- .../modules/trino/pages/usage-guide/catalogs/iceberg.adoc | 2 +- docs/modules/trino/pages/usage-guide/catalogs/index.adoc | 7 ++++--- .../trino/pages/usage-guide/catalogs/postgresql.adoc | 2 +- docs/modules/trino/pages/usage-guide/catalogs/tpcds.adoc | 2 +- docs/modules/trino/pages/usage-guide/catalogs/tpch.adoc | 2 +- rust/operator-binary/src/crd/affinity.rs | 6 +++--- rust/operator-binary/src/crd/catalog/generic.rs | 2 +- tests/templates/kuttl/client-spooling/02-assert.yaml | 2 +- .../kuttl/client-spooling/02-install-trino.yaml.j2 | 2 +- tests/templates/kuttl/delta/10-install-trino.yaml.j2 | 2 +- .../kuttl/fault-tolerant-execution/02-assert.yaml | 2 +- .../fault-tolerant-execution/02-install-trino.yaml.j2 | 2 +- .../kuttl/opa-authorization/20-install-trino.yaml.j2 | 8 ++++---- tests/templates/kuttl/smoke/10-install-trino.yaml.j2 | 8 ++++---- tests/templates/kuttl/smoke_aws/10-install-trino.yaml.j2 | 6 +++--- 26 files changed, 40 insertions(+), 39 deletions(-) diff --git a/deploy/helm/trino-operator/Chart.yaml b/deploy/helm/trino-operator/Chart.yaml index 2508bd3ab..40f4c4450 100644 --- a/deploy/helm/trino-operator/Chart.yaml +++ b/deploy/helm/trino-operator/Chart.yaml @@ -32,7 +32,7 @@ annotations: displayName: TrinoCluster description: A Trino cluster stacklet. This resource is managed by the Stackable operator for Trino. - kind: TrinoCatalog - version: v1alpha1 + version: v1alpha2 name: trinocatalogs.trino.stackable.tech displayName: TrinoCatalog description: The TrinoCatalog resource can be used to define catalogs in Kubernetes objects. diff --git a/docs/modules/trino/examples/usage-guide/fault-tolerant-execution.yaml b/docs/modules/trino/examples/usage-guide/fault-tolerant-execution.yaml index 57555102d..16b677c93 100644 --- a/docs/modules/trino/examples/usage-guide/fault-tolerant-execution.yaml +++ b/docs/modules/trino/examples/usage-guide/fault-tolerant-execution.yaml @@ -96,7 +96,7 @@ stringData: accessKey: minio-access-key secretKey: minio-secret-key --- -apiVersion: trino.stackable.tech/v1alpha1 +apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: name: tpch diff --git a/docs/modules/trino/examples/usage-guide/trino-insecure.yaml b/docs/modules/trino/examples/usage-guide/trino-insecure.yaml index 277499734..6256f5db1 100644 --- a/docs/modules/trino/examples/usage-guide/trino-insecure.yaml +++ b/docs/modules/trino/examples/usage-guide/trino-insecure.yaml @@ -1,5 +1,5 @@ --- -apiVersion: trino.stackable.tech/v1alpha1 +apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: name: hive diff --git a/docs/modules/trino/examples/usage-guide/trino-secure-internal-tls.yaml b/docs/modules/trino/examples/usage-guide/trino-secure-internal-tls.yaml index 104b84900..71aae109d 100644 --- a/docs/modules/trino/examples/usage-guide/trino-secure-internal-tls.yaml +++ b/docs/modules/trino/examples/usage-guide/trino-secure-internal-tls.yaml @@ -1,5 +1,5 @@ --- -apiVersion: trino.stackable.tech/v1alpha1 +apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: name: hive diff --git a/docs/modules/trino/examples/usage-guide/trino-secure-tls-only.yaml b/docs/modules/trino/examples/usage-guide/trino-secure-tls-only.yaml index 834cf0bf4..298f8716e 100644 --- a/docs/modules/trino/examples/usage-guide/trino-secure-tls-only.yaml +++ b/docs/modules/trino/examples/usage-guide/trino-secure-tls-only.yaml @@ -1,5 +1,5 @@ --- -apiVersion: trino.stackable.tech/v1alpha1 +apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: name: hive diff --git a/docs/modules/trino/examples/usage-guide/trino-secure-tls.yaml b/docs/modules/trino/examples/usage-guide/trino-secure-tls.yaml index badd9a6ea..8a882bae1 100644 --- a/docs/modules/trino/examples/usage-guide/trino-secure-tls.yaml +++ b/docs/modules/trino/examples/usage-guide/trino-secure-tls.yaml @@ -1,5 +1,5 @@ --- -apiVersion: trino.stackable.tech/v1alpha1 +apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: name: hive diff --git a/docs/modules/trino/pages/usage-guide/catalogs/black-hole.adoc b/docs/modules/trino/pages/usage-guide/catalogs/black-hole.adoc index 8b48ec056..594121636 100644 --- a/docs/modules/trino/pages/usage-guide/catalogs/black-hole.adoc +++ b/docs/modules/trino/pages/usage-guide/catalogs/black-hole.adoc @@ -7,7 +7,7 @@ It works like the `/dev/null` device on Unix-like operating systems for data wri [source,yaml] ---- -apiVersion: trino.stackable.tech/v1alpha1 +apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: # The name of the catalog as it will appear in Trino diff --git a/docs/modules/trino/pages/usage-guide/catalogs/delta-lake.adoc b/docs/modules/trino/pages/usage-guide/catalogs/delta-lake.adoc index ea1a0cf4e..7826260dd 100644 --- a/docs/modules/trino/pages/usage-guide/catalogs/delta-lake.adoc +++ b/docs/modules/trino/pages/usage-guide/catalogs/delta-lake.adoc @@ -7,7 +7,7 @@ It depends on a Hive metastore being present and makes use of the same metastore [source,yaml] ---- -apiVersion: trino.stackable.tech/v1alpha1 +apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: # The name of the catalog as it will appear in Trino diff --git a/docs/modules/trino/pages/usage-guide/catalogs/generic.adoc b/docs/modules/trino/pages/usage-guide/catalogs/generic.adoc index 427d0b3a4..cfea8c27d 100644 --- a/docs/modules/trino/pages/usage-guide/catalogs/generic.adoc +++ b/docs/modules/trino/pages/usage-guide/catalogs/generic.adoc @@ -11,7 +11,7 @@ This is how you can e.g. use the {trino-psql-connector}[PostgreSQL connector]: [source,yaml] ---- -apiVersion: trino.stackable.tech/v1alpha1 +apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: # The name of the catalog as it appears in Trino diff --git a/docs/modules/trino/pages/usage-guide/catalogs/google-sheets.adoc b/docs/modules/trino/pages/usage-guide/catalogs/google-sheets.adoc index cb77ca63f..e951f7392 100644 --- a/docs/modules/trino/pages/usage-guide/catalogs/google-sheets.adoc +++ b/docs/modules/trino/pages/usage-guide/catalogs/google-sheets.adoc @@ -9,7 +9,7 @@ Consult the {trino-google-sheets-connector}[official documentation] on how to us [source,yaml] ---- -apiVersion: trino.stackable.tech/v1alpha1 +apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: name: gsheet diff --git a/docs/modules/trino/pages/usage-guide/catalogs/hive.adoc b/docs/modules/trino/pages/usage-guide/catalogs/hive.adoc index 4581b2112..2c77a1932 100644 --- a/docs/modules/trino/pages/usage-guide/catalogs/hive.adoc +++ b/docs/modules/trino/pages/usage-guide/catalogs/hive.adoc @@ -8,7 +8,7 @@ Deploy a Hive Stacklet with the xref:hive:index.adoc[]. [source,yaml] ---- -apiVersion: trino.stackable.tech/v1alpha1 +apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: name: hive-catalog # <1> @@ -143,7 +143,7 @@ To use the unmanaged Hive metastore we define a TrinoCatalog object in the same [source,yaml] ---- -apiVersion: trino.stackable.tech/v1alpha1 +apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: name: clouderahive diff --git a/docs/modules/trino/pages/usage-guide/catalogs/iceberg.adoc b/docs/modules/trino/pages/usage-guide/catalogs/iceberg.adoc index 4152f2fb8..f8c32182d 100644 --- a/docs/modules/trino/pages/usage-guide/catalogs/iceberg.adoc +++ b/docs/modules/trino/pages/usage-guide/catalogs/iceberg.adoc @@ -9,7 +9,7 @@ You can deploy a Hive Metastore Stacklet with the xref:hive:index.adoc[]. [source,yaml] ---- -apiVersion: trino.stackable.tech/v1alpha1 +apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: name: iceberg # <1> diff --git a/docs/modules/trino/pages/usage-guide/catalogs/index.adoc b/docs/modules/trino/pages/usage-guide/catalogs/index.adoc index 7d1d1c513..6ed71e8d8 100644 --- a/docs/modules/trino/pages/usage-guide/catalogs/index.adoc +++ b/docs/modules/trino/pages/usage-guide/catalogs/index.adoc @@ -14,7 +14,7 @@ You can create a catalog using the `TrinoCatalog` object as follows. [source,yaml] ---- -apiVersion: trino.stackable.tech/v1alpha1 +apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: name: hive-catalog @@ -33,7 +33,7 @@ spec: credentials: secretClass: minio-credentials --- -apiVersion: trino.stackable.tech/v1alpha1 +apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: name: iceberg @@ -70,7 +70,7 @@ This example illustrates how to use config overrides and config removals [source,yaml] ---- -apiVersion: trino.stackable.tech/v1alpha1 +apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog spec: # Add some properties @@ -118,6 +118,7 @@ The Trino catalog will be called `my_postgres`: [source,yaml] ---- +apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: name: my-postgres diff --git a/docs/modules/trino/pages/usage-guide/catalogs/postgresql.adoc b/docs/modules/trino/pages/usage-guide/catalogs/postgresql.adoc index 185649170..305ef1f54 100644 --- a/docs/modules/trino/pages/usage-guide/catalogs/postgresql.adoc +++ b/docs/modules/trino/pages/usage-guide/catalogs/postgresql.adoc @@ -6,7 +6,7 @@ The https://trino.io/docs/current/connector/postgresql.html[PostgreSQL connector [source,yaml] ---- -apiVersion: trino.stackable.tech/v1alpha1 +apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: # The name of the catalog as it will appear in Trino diff --git a/docs/modules/trino/pages/usage-guide/catalogs/tpcds.adoc b/docs/modules/trino/pages/usage-guide/catalogs/tpcds.adoc index b7623011a..b50afa60a 100644 --- a/docs/modules/trino/pages/usage-guide/catalogs/tpcds.adoc +++ b/docs/modules/trino/pages/usage-guide/catalogs/tpcds.adoc @@ -7,7 +7,7 @@ This is not a stored data set and is instead a virtual data set generated at que [source,yaml] ---- -apiVersion: trino.stackable.tech/v1alpha1 +apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: # The name of the catalog as it will appear in Trino diff --git a/docs/modules/trino/pages/usage-guide/catalogs/tpch.adoc b/docs/modules/trino/pages/usage-guide/catalogs/tpch.adoc index 963c9bfd0..f0bd07698 100644 --- a/docs/modules/trino/pages/usage-guide/catalogs/tpch.adoc +++ b/docs/modules/trino/pages/usage-guide/catalogs/tpch.adoc @@ -7,7 +7,7 @@ This is not a stored data set and is instead a virtual data set generated at que [source,yaml] ---- -apiVersion: trino.stackable.tech/v1alpha1 +apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: # The name of the catalog as it will appear in Trino diff --git a/rust/operator-binary/src/crd/affinity.rs b/rust/operator-binary/src/crd/affinity.rs index c5484c13f..d9072a37f 100644 --- a/rust/operator-binary/src/crd/affinity.rs +++ b/rust/operator-binary/src/crd/affinity.rs @@ -258,7 +258,7 @@ mod tests { yaml_from_str_singleton_map(input).expect("illegal test input"); let input = r#" - apiVersion: trino.stackable.tech/v1alpha1 + apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: name: hive-1 @@ -276,7 +276,7 @@ mod tests { yaml_from_str_singleton_map(input).expect("illegal test input"); let input = r#" - apiVersion: trino.stackable.tech/v1alpha1 + apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: name: tpch @@ -290,7 +290,7 @@ mod tests { yaml_from_str_singleton_map(input).expect("illegal test input"); let input = r#" - apiVersion: trino.stackable.tech/v1alpha1 + apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: name: hive-2 diff --git a/rust/operator-binary/src/crd/catalog/generic.rs b/rust/operator-binary/src/crd/catalog/generic.rs index ea6d8ac99..e83500b12 100644 --- a/rust/operator-binary/src/crd/catalog/generic.rs +++ b/rust/operator-binary/src/crd/catalog/generic.rs @@ -43,7 +43,7 @@ mod tests { #[test] fn test_cr_parsing() { let input = r#" - apiVersion: trino.stackable.tech/v1alpha1 + apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: name: postgres diff --git a/tests/templates/kuttl/client-spooling/02-assert.yaml b/tests/templates/kuttl/client-spooling/02-assert.yaml index 77a5cac09..3521f53e4 100644 --- a/tests/templates/kuttl/client-spooling/02-assert.yaml +++ b/tests/templates/kuttl/client-spooling/02-assert.yaml @@ -19,7 +19,7 @@ status: readyReplicas: 2 replicas: 2 --- -apiVersion: trino.stackable.tech/v1alpha1 +apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: name: tpch diff --git a/tests/templates/kuttl/client-spooling/02-install-trino.yaml.j2 b/tests/templates/kuttl/client-spooling/02-install-trino.yaml.j2 index 5608e6cbe..1cc998025 100644 --- a/tests/templates/kuttl/client-spooling/02-install-trino.yaml.j2 +++ b/tests/templates/kuttl/client-spooling/02-install-trino.yaml.j2 @@ -44,7 +44,7 @@ spec: replicas: 2 config: {} --- -apiVersion: trino.stackable.tech/v1alpha1 +apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: name: tpch diff --git a/tests/templates/kuttl/delta/10-install-trino.yaml.j2 b/tests/templates/kuttl/delta/10-install-trino.yaml.j2 index ac1c93635..6825e8c54 100644 --- a/tests/templates/kuttl/delta/10-install-trino.yaml.j2 +++ b/tests/templates/kuttl/delta/10-install-trino.yaml.j2 @@ -1,5 +1,5 @@ --- -apiVersion: trino.stackable.tech/v1alpha1 +apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: # The name of the catalog as it will appear in Trino diff --git a/tests/templates/kuttl/fault-tolerant-execution/02-assert.yaml b/tests/templates/kuttl/fault-tolerant-execution/02-assert.yaml index d4947eeb9..886fd4fdb 100644 --- a/tests/templates/kuttl/fault-tolerant-execution/02-assert.yaml +++ b/tests/templates/kuttl/fault-tolerant-execution/02-assert.yaml @@ -19,7 +19,7 @@ status: readyReplicas: 2 replicas: 2 --- -apiVersion: trino.stackable.tech/v1alpha1 +apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: name: tpch diff --git a/tests/templates/kuttl/fault-tolerant-execution/02-install-trino.yaml.j2 b/tests/templates/kuttl/fault-tolerant-execution/02-install-trino.yaml.j2 index 1cbc298e1..fddb347c4 100644 --- a/tests/templates/kuttl/fault-tolerant-execution/02-install-trino.yaml.j2 +++ b/tests/templates/kuttl/fault-tolerant-execution/02-install-trino.yaml.j2 @@ -46,7 +46,7 @@ spec: replicas: 2 config: {} --- -apiVersion: trino.stackable.tech/v1alpha1 +apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: name: tpch diff --git a/tests/templates/kuttl/opa-authorization/20-install-trino.yaml.j2 b/tests/templates/kuttl/opa-authorization/20-install-trino.yaml.j2 index 888d7159e..1b4faf6d6 100644 --- a/tests/templates/kuttl/opa-authorization/20-install-trino.yaml.j2 +++ b/tests/templates/kuttl/opa-authorization/20-install-trino.yaml.j2 @@ -21,7 +21,7 @@ stringData: lakehouse: lakehouse iceberg: iceberg --- -apiVersion: trino.stackable.tech/v1alpha1 +apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: name: lakehouse @@ -31,7 +31,7 @@ spec: connector: tpch: {} --- -apiVersion: trino.stackable.tech/v1alpha1 +apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: name: tpch @@ -41,7 +41,7 @@ spec: connector: tpch: {} --- -apiVersion: trino.stackable.tech/v1alpha1 +apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: name: tpcds @@ -51,7 +51,7 @@ spec: connector: tpcds: {} --- -apiVersion: trino.stackable.tech/v1alpha1 +apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: name: iceberg diff --git a/tests/templates/kuttl/smoke/10-install-trino.yaml.j2 b/tests/templates/kuttl/smoke/10-install-trino.yaml.j2 index 3b085475f..4357eb53c 100644 --- a/tests/templates/kuttl/smoke/10-install-trino.yaml.j2 +++ b/tests/templates/kuttl/smoke/10-install-trino.yaml.j2 @@ -19,7 +19,7 @@ stringData: alice: alice bob: bob --- -apiVersion: trino.stackable.tech/v1alpha1 +apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: name: hive @@ -35,7 +35,7 @@ spec: hdfs: configMap: hdfs --- -apiVersion: trino.stackable.tech/v1alpha1 +apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: name: iceberg @@ -51,7 +51,7 @@ spec: hdfs: configMap: hdfs --- -apiVersion: trino.stackable.tech/v1alpha1 +apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: name: tpch @@ -61,7 +61,7 @@ spec: connector: tpch: {} --- -apiVersion: trino.stackable.tech/v1alpha1 +apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: name: postgresql diff --git a/tests/templates/kuttl/smoke_aws/10-install-trino.yaml.j2 b/tests/templates/kuttl/smoke_aws/10-install-trino.yaml.j2 index 824111b34..883cbf89d 100644 --- a/tests/templates/kuttl/smoke_aws/10-install-trino.yaml.j2 +++ b/tests/templates/kuttl/smoke_aws/10-install-trino.yaml.j2 @@ -70,7 +70,7 @@ stringData: alice: alice bob: bob --- -apiVersion: trino.stackable.tech/v1alpha1 +apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: name: hive @@ -86,7 +86,7 @@ spec: hdfs: configMap: hdfs --- -apiVersion: trino.stackable.tech/v1alpha1 +apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: name: iceberg @@ -102,7 +102,7 @@ spec: hdfs: configMap: hdfs --- -apiVersion: trino.stackable.tech/v1alpha1 +apiVersion: trino.stackable.tech/v1alpha2 kind: TrinoCatalog metadata: name: tpch From 5af8d9e2b0f955c85f4c50e575d9128219f0282e Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Thu, 8 Oct 2026 12:45:20 +0200 Subject: [PATCH 06/34] user & pass -> clientId & clientSecret --- rust/operator-binary/src/catalog/iceberg.rs | 18 +++++++++--------- .../operator-binary/src/crd/catalog/iceberg.rs | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/rust/operator-binary/src/catalog/iceberg.rs b/rust/operator-binary/src/catalog/iceberg.rs index d0733e99a..f25e17352 100644 --- a/rust/operator-binary/src/catalog/iceberg.rs +++ b/rust/operator-binary/src/catalog/iceberg.rs @@ -98,23 +98,23 @@ impl ExtendCatalogConfig for IcebergRestCatalogConnection { match credential { IcebergRestCatalogOAuthCredential::CredentialSecretName(secret_name) => { // We can't use `add_env_property_from_secret`, as we need to concatenate - // user and password in the Trino configuration. So instead we come up with - // our own envs and bind them. + // clientId and clientSecret in the Trino configuration. So instead we come + // up with our own envs and bind them. let property = "iceberg.rest-catalog.oauth2.credential"; let base_env_name = calculate_env_name(catalog_name, property); - let username_env_name = format!("{base_env_name}_USERNAME"); - let password_env_name = format!("{base_env_name}_PASSWORD"); + let client_id_env_name = format!("{base_env_name}_CLIENT_ID"); + let client_secret_env_name = format!("{base_env_name}_CLIENT_SECRET"); catalog_config.add_property( property, - format!("${{ENV:{username_env_name}}}:${{ENV:{password_env_name}}}"), + format!("${{ENV:{client_id_env_name}}}:${{ENV:{client_secret_env_name}}}"), ); catalog_config.env_bindings.push(EnvVar { - name: username_env_name, + name: client_id_env_name, value_from: Some(EnvVarSource { secret_key_ref: Some(SecretKeySelector { name: secret_name.to_owned(), - key: "username".to_owned(), + key: "clientId".to_owned(), ..Default::default() }), ..Default::default() @@ -122,11 +122,11 @@ impl ExtendCatalogConfig for IcebergRestCatalogConnection { ..Default::default() }); catalog_config.env_bindings.push(EnvVar { - name: password_env_name, + name: client_secret_env_name, value_from: Some(EnvVarSource { secret_key_ref: Some(SecretKeySelector { name: secret_name.to_owned(), - key: "password".to_owned(), + key: "clientSecret".to_owned(), ..Default::default() }), ..Default::default() diff --git a/rust/operator-binary/src/crd/catalog/iceberg.rs b/rust/operator-binary/src/crd/catalog/iceberg.rs index 715e72cff..9c2ff5559 100644 --- a/rust/operator-binary/src/crd/catalog/iceberg.rs +++ b/rust/operator-binary/src/crd/catalog/iceberg.rs @@ -65,6 +65,6 @@ pub enum IcebergRestCatalogOAuthCredential { // The credential to exchange for a token in the OAuth2 client credentials flow with the server. /// - /// The Secret needs to contain the `username` and `password` keys. + /// The Secret needs to contain the `clientId` and `clientSecret` keys. CredentialSecretName(String), } From 8d8c7503bed14b9df3eb0de12f171280e8a2906f Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Thu, 8 Oct 2026 16:08:32 +0200 Subject: [PATCH 07/34] test: Add variant --- rust/operator-binary/src/crd/catalog/mod.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/rust/operator-binary/src/crd/catalog/mod.rs b/rust/operator-binary/src/crd/catalog/mod.rs index 6a3913ad1..2c36a4f34 100644 --- a/rust/operator-binary/src/crd/catalog/mod.rs +++ b/rust/operator-binary/src/crd/catalog/mod.rs @@ -387,6 +387,16 @@ mod tests { serverUri: https://keycloak.default.svc.cluster.local:8443/realms/test/protocol/openid-connect/token credential: credentialSecretName: my-keycloak-credentials + - connector: + iceberg: + catalog: + rest: + uri: https://my.secure.rest + security: + oAuth2: + serverUri: https://keycloak.default.svc.cluster.local:8443/realms/test/protocol/openid-connect/token + credential: + tokenSecretName: my-keycloak-token - connector: iceberg: catalog: From 2baa4f410f7150254c66deb3731ed7a2157ac400 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Thu, 8 Oct 2026 16:08:59 +0200 Subject: [PATCH 08/34] regenerate charts --- extra/crds.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/crds.yaml b/extra/crds.yaml index a843c4e4f..068d15fb0 100644 --- a/extra/crds.yaml +++ b/extra/crds.yaml @@ -4116,7 +4116,7 @@ spec: - credentialSecretName properties: credentialSecretName: - description: The Secret needs to contain the `username` and `password` keys. + description: The Secret needs to contain the `clientId` and `clientSecret` keys. type: string tokenSecretName: description: |- From b3e3e546d0602f747d9e5b351e323db2b06dd190 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Fri, 9 Oct 2026 11:22:57 +0200 Subject: [PATCH 09/34] Rename security -> authentication --- extra/crds.yaml | 2 +- rust/operator-binary/src/catalog/iceberg.rs | 8 ++++---- rust/operator-binary/src/crd/catalog/iceberg.rs | 6 +++--- rust/operator-binary/src/crd/catalog/mod.rs | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/extra/crds.yaml b/extra/crds.yaml index 068d15fb0..dd17ec2fa 100644 --- a/extra/crds.yaml +++ b/extra/crds.yaml @@ -4087,7 +4087,7 @@ spec: rest: description: (Recommended) use a REST catalog to store metadata. properties: - security: + authentication: default: none: {} description: How to authenticate against the REST catalog. diff --git a/rust/operator-binary/src/catalog/iceberg.rs b/rust/operator-binary/src/catalog/iceberg.rs index f25e17352..498556d3d 100644 --- a/rust/operator-binary/src/catalog/iceberg.rs +++ b/rust/operator-binary/src/catalog/iceberg.rs @@ -14,7 +14,7 @@ use crate::{ TrinoCatalogName, iceberg::{ IcebergCatalogConnection, IcebergRestCatalogConnection, - IcebergRestCatalogOAuthCredential, IcebergRestCatalogSecurity, + IcebergRestCatalogOAuthCredential, IcebergRestCatalogAuthentication, }, v1alpha2::IcebergConnector, }, @@ -82,11 +82,11 @@ impl ExtendCatalogConfig for IcebergRestCatalogConnection { catalog_config.add_property("iceberg.rest-catalog.uri", self.uri.as_str()); // We explicitly use a match here to catch further additions - match &self.security { - IcebergRestCatalogSecurity::None {} => { + match &self.authentication { + IcebergRestCatalogAuthentication::None {} => { catalog_config.add_property("iceberg.rest-catalog.security", "NONE"); } - IcebergRestCatalogSecurity::OAuth2 { + IcebergRestCatalogAuthentication::OAuth2 { server_uri, credential, } => { diff --git a/rust/operator-binary/src/crd/catalog/iceberg.rs b/rust/operator-binary/src/crd/catalog/iceberg.rs index 9c2ff5559..3afcdc5eb 100644 --- a/rust/operator-binary/src/crd/catalog/iceberg.rs +++ b/rust/operator-binary/src/crd/catalog/iceberg.rs @@ -26,12 +26,12 @@ pub struct IcebergRestCatalogConnection { /// How to authenticate against the REST catalog. #[serde(default)] - pub security: IcebergRestCatalogSecurity, + pub authentication: IcebergRestCatalogAuthentication, } #[derive(Clone, Debug, Deserialize, Eq, JsonSchema, PartialEq, Serialize)] #[serde(rename_all = "camelCase")] -pub enum IcebergRestCatalogSecurity { +pub enum IcebergRestCatalogAuthentication { /// Don't authenticate against the REST catalog (chosen by default). None {}, @@ -49,7 +49,7 @@ pub enum IcebergRestCatalogSecurity { }, } -impl Default for IcebergRestCatalogSecurity { +impl Default for IcebergRestCatalogAuthentication { fn default() -> Self { Self::None {} } diff --git a/rust/operator-binary/src/crd/catalog/mod.rs b/rust/operator-binary/src/crd/catalog/mod.rs index 2c36a4f34..3f1658a35 100644 --- a/rust/operator-binary/src/crd/catalog/mod.rs +++ b/rust/operator-binary/src/crd/catalog/mod.rs @@ -382,7 +382,7 @@ mod tests { catalog: rest: uri: https://my.secure.rest - security: + authentication: oAuth2: serverUri: https://keycloak.default.svc.cluster.local:8443/realms/test/protocol/openid-connect/token credential: @@ -392,7 +392,7 @@ mod tests { catalog: rest: uri: https://my.secure.rest - security: + authentication: oAuth2: serverUri: https://keycloak.default.svc.cluster.local:8443/realms/test/protocol/openid-connect/token credential: From a4e1d8384ba086deeccabb1f15f6ede7b5305ec8 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Fri, 9 Oct 2026 11:38:42 +0200 Subject: [PATCH 10/34] credentialSecretName -> credentialsSecretName for consistency --- extra/crds.yaml | 4 ++-- rust/operator-binary/src/catalog/iceberg.rs | 2 +- rust/operator-binary/src/crd/catalog/iceberg.rs | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/extra/crds.yaml b/extra/crds.yaml index dd17ec2fa..6564d0358 100644 --- a/extra/crds.yaml +++ b/extra/crds.yaml @@ -4113,9 +4113,9 @@ spec: - required: - tokenSecretName - required: - - credentialSecretName + - credentialsSecretName properties: - credentialSecretName: + credentialsSecretName: description: The Secret needs to contain the `clientId` and `clientSecret` keys. type: string tokenSecretName: diff --git a/rust/operator-binary/src/catalog/iceberg.rs b/rust/operator-binary/src/catalog/iceberg.rs index 498556d3d..62b7e38e6 100644 --- a/rust/operator-binary/src/catalog/iceberg.rs +++ b/rust/operator-binary/src/catalog/iceberg.rs @@ -96,7 +96,7 @@ impl ExtendCatalogConfig for IcebergRestCatalogConnection { server_uri.as_str(), ); match credential { - IcebergRestCatalogOAuthCredential::CredentialSecretName(secret_name) => { + IcebergRestCatalogOAuthCredential::CredentialsSecretName(secret_name) => { // We can't use `add_env_property_from_secret`, as we need to concatenate // clientId and clientSecret in the Trino configuration. So instead we come // up with our own envs and bind them. diff --git a/rust/operator-binary/src/crd/catalog/iceberg.rs b/rust/operator-binary/src/crd/catalog/iceberg.rs index 3afcdc5eb..4198c19d4 100644 --- a/rust/operator-binary/src/crd/catalog/iceberg.rs +++ b/rust/operator-binary/src/crd/catalog/iceberg.rs @@ -63,8 +63,8 @@ pub enum IcebergRestCatalogOAuthCredential { /// The Secret needs to contain the `token` key. TokenSecretName(String), - // The credential to exchange for a token in the OAuth2 client credentials flow with the server. + // The credentials to exchange for a token in the OAuth2 client credentials flow with the server. /// /// The Secret needs to contain the `clientId` and `clientSecret` keys. - CredentialSecretName(String), + CredentialsSecretName(String), } From 96844a576d23ff254df402e5390c56e1b7d2c677 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Fri, 9 Oct 2026 14:10:56 +0200 Subject: [PATCH 11/34] test: Fix test --- rust/operator-binary/src/crd/catalog/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/operator-binary/src/crd/catalog/mod.rs b/rust/operator-binary/src/crd/catalog/mod.rs index 3f1658a35..e8c0139e8 100644 --- a/rust/operator-binary/src/crd/catalog/mod.rs +++ b/rust/operator-binary/src/crd/catalog/mod.rs @@ -386,7 +386,7 @@ mod tests { oAuth2: serverUri: https://keycloak.default.svc.cluster.local:8443/realms/test/protocol/openid-connect/token credential: - credentialSecretName: my-keycloak-credentials + credentialsSecretName: my-keycloak-credentials - connector: iceberg: catalog: From eec3c717d5f47277b1801aac349d02acd47d8949 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Fri, 9 Oct 2026 16:37:49 +0200 Subject: [PATCH 12/34] fix: Try to get roundtrips to work --- Cargo.lock | 19 +++++++++---------- Cargo.toml | 2 +- rust/operator-binary/src/catalog/iceberg.rs | 8 +++++--- rust/operator-binary/src/crd/catalog/mod.rs | 12 ++++++++---- 4 files changed, 23 insertions(+), 18 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a495b3bce..dc9e1a155 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1720,7 +1720,7 @@ dependencies = [ [[package]] name = "k8s-version" version = "0.1.3" -source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ffrom_docs#5d7902142fe5c7ab0a820117a80b5f4a4e34d5c9" +source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#b9cbd8ca60ce17a737f5e3eeb3f449fd2d2f61ec" dependencies = [ "darling 0.24.1", "regex", @@ -3172,7 +3172,7 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "stackable-certs" version = "0.4.1" -source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ffrom_docs#5d7902142fe5c7ab0a820117a80b5f4a4e34d5c9" +source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#b9cbd8ca60ce17a737f5e3eeb3f449fd2d2f61ec" dependencies = [ "const-oid", "ecdsa", @@ -3196,7 +3196,7 @@ dependencies = [ [[package]] name = "stackable-operator" version = "0.119.0" -source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ffrom_docs#5d7902142fe5c7ab0a820117a80b5f4a4e34d5c9" +source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#b9cbd8ca60ce17a737f5e3eeb3f449fd2d2f61ec" dependencies = [ "base64 0.23.1", "clap", @@ -3240,7 +3240,7 @@ dependencies = [ [[package]] name = "stackable-operator-derive" version = "0.3.1" -source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ffrom_docs#5d7902142fe5c7ab0a820117a80b5f4a4e34d5c9" +source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#b9cbd8ca60ce17a737f5e3eeb3f449fd2d2f61ec" dependencies = [ "darling 0.24.1", "proc-macro2", @@ -3251,7 +3251,7 @@ dependencies = [ [[package]] name = "stackable-shared" version = "0.1.2" -source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ffrom_docs#5d7902142fe5c7ab0a820117a80b5f4a4e34d5c9" +source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#b9cbd8ca60ce17a737f5e3eeb3f449fd2d2f61ec" dependencies = [ "jiff", "k8s-openapi", @@ -3268,7 +3268,7 @@ dependencies = [ [[package]] name = "stackable-telemetry" version = "0.6.5" -source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ffrom_docs#5d7902142fe5c7ab0a820117a80b5f4a4e34d5c9" +source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#b9cbd8ca60ce17a737f5e3eeb3f449fd2d2f61ec" dependencies = [ "axum", "clap", @@ -3316,13 +3316,12 @@ dependencies = [ [[package]] name = "stackable-versioned" version = "0.11.1" -source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ffrom_docs#5d7902142fe5c7ab0a820117a80b5f4a4e34d5c9" +source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#b9cbd8ca60ce17a737f5e3eeb3f449fd2d2f61ec" dependencies = [ "kube", "schemars", "serde", "serde_json", - "serde_yaml", "snafu 0.9.2", "stackable-versioned-macros", ] @@ -3330,7 +3329,7 @@ dependencies = [ [[package]] name = "stackable-versioned-macros" version = "0.11.1" -source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ffrom_docs#5d7902142fe5c7ab0a820117a80b5f4a4e34d5c9" +source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#b9cbd8ca60ce17a737f5e3eeb3f449fd2d2f61ec" dependencies = [ "convert_case", "darling 0.24.1", @@ -3347,7 +3346,7 @@ dependencies = [ [[package]] name = "stackable-webhook" version = "0.10.0" -source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ffrom_docs#5d7902142fe5c7ab0a820117a80b5f4a4e34d5c9" +source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#b9cbd8ca60ce17a737f5e3eeb3f449fd2d2f61ec" dependencies = [ "arc-swap", "async-trait", diff --git a/Cargo.toml b/Cargo.toml index d17e72383..9e4fbc7b9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,5 +31,5 @@ tracing = "0.1" url = "2.5" [patch."https://github.com/stackabletech/operator-rs.git"] -stackable-operator = { git = "https://github.com/stackabletech//operator-rs.git", branch = "feat/from_docs" } +stackable-operator = { git = "https://github.com/stackabletech//operator-rs.git", branch = "feat/track-changed-types" } # stackable-operator = { path = "../operator-rs/crates/stackable-operator" } diff --git a/rust/operator-binary/src/catalog/iceberg.rs b/rust/operator-binary/src/catalog/iceberg.rs index 62b7e38e6..8ea486f28 100644 --- a/rust/operator-binary/src/catalog/iceberg.rs +++ b/rust/operator-binary/src/catalog/iceberg.rs @@ -13,8 +13,8 @@ use crate::{ crd::catalog::{ TrinoCatalogName, iceberg::{ - IcebergCatalogConnection, IcebergRestCatalogConnection, - IcebergRestCatalogOAuthCredential, IcebergRestCatalogAuthentication, + IcebergCatalogConnection, IcebergRestCatalogAuthentication, + IcebergRestCatalogConnection, IcebergRestCatalogOAuthCredential, }, v1alpha2::IcebergConnector, }, @@ -106,7 +106,9 @@ impl ExtendCatalogConfig for IcebergRestCatalogConnection { let client_secret_env_name = format!("{base_env_name}_CLIENT_SECRET"); catalog_config.add_property( property, - format!("${{ENV:{client_id_env_name}}}:${{ENV:{client_secret_env_name}}}"), + format!( + "${{ENV:{client_id_env_name}}}:${{ENV:{client_secret_env_name}}}" + ), ); catalog_config.env_bindings.push(EnvVar { diff --git a/rust/operator-binary/src/crd/catalog/mod.rs b/rust/operator-binary/src/crd/catalog/mod.rs index e8c0139e8..ff4a0f78c 100644 --- a/rust/operator-binary/src/crd/catalog/mod.rs +++ b/rust/operator-binary/src/crd/catalog/mod.rs @@ -35,13 +35,14 @@ use crate::crd::catalog::{ #[versioned( version(name = "v1alpha1"), version(name = "v1alpha2"), + options(k8s(experimental_conversion_tracking)), crates( kube_core = "stackable_operator::kube::core", kube_client = "stackable_operator::kube::client", k8s_openapi = "stackable_operator::k8s_openapi", schemars = "stackable_operator::schemars", versioned = "stackable_operator::versioned", - ) + ), )] pub mod versioned { /// The TrinoCatalog resource can be used to define catalogs in Kubernetes objects. @@ -59,9 +60,11 @@ pub mod versioned { pub struct TrinoCatalogSpec { /// The name of the catalog #[serde(default)] + #[versioned(nested)] pub name: TrinoCatalogNameSpec, /// The `connector` defines which connector is used. + #[versioned(nested)] pub connector: TrinoCatalogConnector, /// The `configOverrides` allow overriding arbitrary Trino settings. @@ -120,6 +123,7 @@ pub mod versioned { Hive(HiveConnector), /// An [Apache Iceberg](DOCS_BASE_URL_PLACEHOLDER/trino/usage-guide/catalogs/iceberg) connector. + #[versioned(nested)] Iceberg(IcebergConnector), /// An [PostgreSQL](DOCS_BASE_URL_PLACEHOLDER/trino/usage-guide/catalogs/postgresql) connector. @@ -189,9 +193,9 @@ impl Default for v1alpha2::TrinoCatalogNameSpec { impl From for Option { fn from(value: IcebergCatalogConnection) -> Self { match value { - IcebergCatalogConnection::Rest(_iceberg_rest_catalog_connection) => { - todo!("Puh, how should we map REST to old?") - } + // A REST catalog can't be represented in v1alpha1. The value is tracked in the status + // and restored when upgrading again. This is also ensured using the roundtrip tests. + IcebergCatalogConnection::Rest(_) => None, IcebergCatalogConnection::HiveMetastore(hive_metastore_connection) => { Some(hive_metastore_connection) } From a65c8bdbe02e9e36e2b64ba355498f4e145cb281 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Mon, 12 Oct 2026 09:59:45 +0200 Subject: [PATCH 13/34] semicolon --- rust/operator-binary/src/crd/catalog/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/operator-binary/src/crd/catalog/mod.rs b/rust/operator-binary/src/crd/catalog/mod.rs index ff4a0f78c..c2db7cd97 100644 --- a/rust/operator-binary/src/crd/catalog/mod.rs +++ b/rust/operator-binary/src/crd/catalog/mod.rs @@ -159,7 +159,7 @@ pub mod versioned { The connection is optional, as Iceberg also supports other catalogs, such as a REST catalog, which (currently) can only be added using configOverrides. - "# + "#, ))] pub catalog: IcebergCatalogConnection, From c153ce8aae708179f5fcb8d4e6d896d036bab543 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Mon, 12 Oct 2026 10:00:32 +0200 Subject: [PATCH 14/34] fmt --- rust/operator-binary/src/crd/catalog/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/operator-binary/src/crd/catalog/mod.rs b/rust/operator-binary/src/crd/catalog/mod.rs index c2db7cd97..6b5f7d933 100644 --- a/rust/operator-binary/src/crd/catalog/mod.rs +++ b/rust/operator-binary/src/crd/catalog/mod.rs @@ -42,7 +42,7 @@ use crate::crd::catalog::{ k8s_openapi = "stackable_operator::k8s_openapi", schemars = "stackable_operator::schemars", versioned = "stackable_operator::versioned", - ), + ) )] pub mod versioned { /// The TrinoCatalog resource can be used to define catalogs in Kubernetes objects. From 1290db76d94c590a0c70710dea6a5c597c9c0f93 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Mon, 12 Oct 2026 10:10:25 +0200 Subject: [PATCH 15/34] regenerate charts --- Cargo.nix | 40 ++++++------- crate-hashes.json | 18 +++--- extra/crds.yaml | 146 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 173 insertions(+), 31 deletions(-) diff --git a/Cargo.nix b/Cargo.nix index 92908019c..3b2dbf0a5 100644 --- a/Cargo.nix +++ b/Cargo.nix @@ -5470,8 +5470,8 @@ rec { workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech//operator-rs.git"; - rev = "5d7902142fe5c7ab0a820117a80b5f4a4e34d5c9"; - sha256 = "07h2vqgm28576l46w03pfv7sxi8cw2v1lj78mi5j40kqyikn03by"; + rev = "b9cbd8ca60ce17a737f5e3eeb3f449fd2d2f61ec"; + sha256 = "0abakydxyiva2k5jl7cglbjgaz63rkq0aq12g3dq4xvifkja7xxq"; }; libName = "k8s_version"; authors = [ @@ -10401,8 +10401,8 @@ rec { workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech//operator-rs.git"; - rev = "5d7902142fe5c7ab0a820117a80b5f4a4e34d5c9"; - sha256 = "07h2vqgm28576l46w03pfv7sxi8cw2v1lj78mi5j40kqyikn03by"; + rev = "b9cbd8ca60ce17a737f5e3eeb3f449fd2d2f61ec"; + sha256 = "0abakydxyiva2k5jl7cglbjgaz63rkq0aq12g3dq4xvifkja7xxq"; }; libName = "stackable_certs"; authors = [ @@ -10504,8 +10504,8 @@ rec { workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech//operator-rs.git"; - rev = "5d7902142fe5c7ab0a820117a80b5f4a4e34d5c9"; - sha256 = "07h2vqgm28576l46w03pfv7sxi8cw2v1lj78mi5j40kqyikn03by"; + rev = "b9cbd8ca60ce17a737f5e3eeb3f449fd2d2f61ec"; + sha256 = "0abakydxyiva2k5jl7cglbjgaz63rkq0aq12g3dq4xvifkja7xxq"; }; libName = "stackable_operator"; authors = [ @@ -10703,8 +10703,8 @@ rec { workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech//operator-rs.git"; - rev = "5d7902142fe5c7ab0a820117a80b5f4a4e34d5c9"; - sha256 = "07h2vqgm28576l46w03pfv7sxi8cw2v1lj78mi5j40kqyikn03by"; + rev = "b9cbd8ca60ce17a737f5e3eeb3f449fd2d2f61ec"; + sha256 = "0abakydxyiva2k5jl7cglbjgaz63rkq0aq12g3dq4xvifkja7xxq"; }; procMacro = true; libName = "stackable_operator_derive"; @@ -10738,8 +10738,8 @@ rec { workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech//operator-rs.git"; - rev = "5d7902142fe5c7ab0a820117a80b5f4a4e34d5c9"; - sha256 = "07h2vqgm28576l46w03pfv7sxi8cw2v1lj78mi5j40kqyikn03by"; + rev = "b9cbd8ca60ce17a737f5e3eeb3f449fd2d2f61ec"; + sha256 = "0abakydxyiva2k5jl7cglbjgaz63rkq0aq12g3dq4xvifkja7xxq"; }; libName = "stackable_shared"; authors = [ @@ -10819,8 +10819,8 @@ rec { workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech//operator-rs.git"; - rev = "5d7902142fe5c7ab0a820117a80b5f4a4e34d5c9"; - sha256 = "07h2vqgm28576l46w03pfv7sxi8cw2v1lj78mi5j40kqyikn03by"; + rev = "b9cbd8ca60ce17a737f5e3eeb3f449fd2d2f61ec"; + sha256 = "0abakydxyiva2k5jl7cglbjgaz63rkq0aq12g3dq4xvifkja7xxq"; }; libName = "stackable_telemetry"; authors = [ @@ -11036,8 +11036,8 @@ rec { workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech//operator-rs.git"; - rev = "5d7902142fe5c7ab0a820117a80b5f4a4e34d5c9"; - sha256 = "07h2vqgm28576l46w03pfv7sxi8cw2v1lj78mi5j40kqyikn03by"; + rev = "b9cbd8ca60ce17a737f5e3eeb3f449fd2d2f61ec"; + sha256 = "0abakydxyiva2k5jl7cglbjgaz63rkq0aq12g3dq4xvifkja7xxq"; }; libName = "stackable_versioned"; authors = [ @@ -11064,10 +11064,6 @@ rec { name = "serde_json"; packageId = "serde_json"; } - { - name = "serde_yaml"; - packageId = "serde_yaml"; - } { name = "snafu"; packageId = "snafu 0.9.2"; @@ -11086,8 +11082,8 @@ rec { workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech//operator-rs.git"; - rev = "5d7902142fe5c7ab0a820117a80b5f4a4e34d5c9"; - sha256 = "07h2vqgm28576l46w03pfv7sxi8cw2v1lj78mi5j40kqyikn03by"; + rev = "b9cbd8ca60ce17a737f5e3eeb3f449fd2d2f61ec"; + sha256 = "0abakydxyiva2k5jl7cglbjgaz63rkq0aq12g3dq4xvifkja7xxq"; }; procMacro = true; libName = "stackable_versioned_macros"; @@ -11150,8 +11146,8 @@ rec { workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech//operator-rs.git"; - rev = "5d7902142fe5c7ab0a820117a80b5f4a4e34d5c9"; - sha256 = "07h2vqgm28576l46w03pfv7sxi8cw2v1lj78mi5j40kqyikn03by"; + rev = "b9cbd8ca60ce17a737f5e3eeb3f449fd2d2f61ec"; + sha256 = "0abakydxyiva2k5jl7cglbjgaz63rkq0aq12g3dq4xvifkja7xxq"; }; libName = "stackable_webhook"; authors = [ diff --git a/crate-hashes.json b/crate-hashes.json index a2b7d4666..289fe70a2 100644 --- a/crate-hashes.json +++ b/crate-hashes.json @@ -1,11 +1,11 @@ { - "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ffrom_docs#k8s-version@0.1.3": "07h2vqgm28576l46w03pfv7sxi8cw2v1lj78mi5j40kqyikn03by", - "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ffrom_docs#stackable-certs@0.4.1": "07h2vqgm28576l46w03pfv7sxi8cw2v1lj78mi5j40kqyikn03by", - "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ffrom_docs#stackable-operator-derive@0.3.1": "07h2vqgm28576l46w03pfv7sxi8cw2v1lj78mi5j40kqyikn03by", - "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ffrom_docs#stackable-operator@0.119.0": "07h2vqgm28576l46w03pfv7sxi8cw2v1lj78mi5j40kqyikn03by", - "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ffrom_docs#stackable-shared@0.1.2": "07h2vqgm28576l46w03pfv7sxi8cw2v1lj78mi5j40kqyikn03by", - "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ffrom_docs#stackable-telemetry@0.6.5": "07h2vqgm28576l46w03pfv7sxi8cw2v1lj78mi5j40kqyikn03by", - "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ffrom_docs#stackable-versioned-macros@0.11.1": "07h2vqgm28576l46w03pfv7sxi8cw2v1lj78mi5j40kqyikn03by", - "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ffrom_docs#stackable-versioned@0.11.1": "07h2vqgm28576l46w03pfv7sxi8cw2v1lj78mi5j40kqyikn03by", - "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ffrom_docs#stackable-webhook@0.10.0": "07h2vqgm28576l46w03pfv7sxi8cw2v1lj78mi5j40kqyikn03by" + "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#k8s-version@0.1.3": "0abakydxyiva2k5jl7cglbjgaz63rkq0aq12g3dq4xvifkja7xxq", + "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#stackable-certs@0.4.1": "0abakydxyiva2k5jl7cglbjgaz63rkq0aq12g3dq4xvifkja7xxq", + "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#stackable-operator-derive@0.3.1": "0abakydxyiva2k5jl7cglbjgaz63rkq0aq12g3dq4xvifkja7xxq", + "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#stackable-operator@0.119.0": "0abakydxyiva2k5jl7cglbjgaz63rkq0aq12g3dq4xvifkja7xxq", + "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#stackable-shared@0.1.2": "0abakydxyiva2k5jl7cglbjgaz63rkq0aq12g3dq4xvifkja7xxq", + "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#stackable-telemetry@0.6.5": "0abakydxyiva2k5jl7cglbjgaz63rkq0aq12g3dq4xvifkja7xxq", + "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#stackable-versioned-macros@0.11.1": "0abakydxyiva2k5jl7cglbjgaz63rkq0aq12g3dq4xvifkja7xxq", + "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#stackable-versioned@0.11.1": "0abakydxyiva2k5jl7cglbjgaz63rkq0aq12g3dq4xvifkja7xxq", + "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#stackable-webhook@0.10.0": "0abakydxyiva2k5jl7cglbjgaz63rkq0aq12g3dq4xvifkja7xxq" } \ No newline at end of file diff --git a/extra/crds.yaml b/extra/crds.yaml index 6564d0358..1ea20ae7b 100644 --- a/extra/crds.yaml +++ b/extra/crds.yaml @@ -4402,12 +4402,85 @@ spec: required: - connector type: object + status: + nullable: true + properties: + changedValues: + description: Contains changed values during upgrades and downgrades of CRDs. + properties: + downgrades: + additionalProperties: + items: + description: Contains a changed value for a single field of the CRD. + properties: + downgradedValue: + description: |- + The value the field was converted to during the downgrade. Only set for fields which + changed their type. + + When upgrading again, the tracked `value` is only applied if the field still contains this + value. Otherwise, the field was changed by a user in the older version and that change is + kept instead. + type: object + x-kubernetes-preserve-unknown-fields: true + jsonPath: + description: The name of the field of the custom resource this value is for. + type: string + value: + description: The value to be used when upgrading or downgrading the custom resource. + type: object + x-kubernetes-preserve-unknown-fields: true + required: + - jsonPath + - value + type: object + type: array + description: List of values needed when downgrading to a particular version. + type: object + upgrades: + additionalProperties: + items: + description: Contains a changed value for a single field of the CRD. + properties: + downgradedValue: + description: |- + The value the field was converted to during the downgrade. Only set for fields which + changed their type. + + When upgrading again, the tracked `value` is only applied if the field still contains this + value. Otherwise, the field was changed by a user in the older version and that change is + kept instead. + type: object + x-kubernetes-preserve-unknown-fields: true + jsonPath: + description: The name of the field of the custom resource this value is for. + type: string + value: + description: The value to be used when upgrading or downgrading the custom resource. + type: object + x-kubernetes-preserve-unknown-fields: true + required: + - jsonPath + - value + type: object + type: array + description: List of values needed when upgrading to a particular version. + type: object + required: + - downgrades + - upgrades + type: object + required: + - changedValues + type: object required: - spec title: TrinoCatalog type: object served: true storage: true + subresources: + status: {} - name: v1alpha1 schema: openAPIV3Schema: @@ -5187,9 +5260,82 @@ spec: required: - connector type: object + status: + nullable: true + properties: + changedValues: + description: Contains changed values during upgrades and downgrades of CRDs. + properties: + downgrades: + additionalProperties: + items: + description: Contains a changed value for a single field of the CRD. + properties: + downgradedValue: + description: |- + The value the field was converted to during the downgrade. Only set for fields which + changed their type. + + When upgrading again, the tracked `value` is only applied if the field still contains this + value. Otherwise, the field was changed by a user in the older version and that change is + kept instead. + type: object + x-kubernetes-preserve-unknown-fields: true + jsonPath: + description: The name of the field of the custom resource this value is for. + type: string + value: + description: The value to be used when upgrading or downgrading the custom resource. + type: object + x-kubernetes-preserve-unknown-fields: true + required: + - jsonPath + - value + type: object + type: array + description: List of values needed when downgrading to a particular version. + type: object + upgrades: + additionalProperties: + items: + description: Contains a changed value for a single field of the CRD. + properties: + downgradedValue: + description: |- + The value the field was converted to during the downgrade. Only set for fields which + changed their type. + + When upgrading again, the tracked `value` is only applied if the field still contains this + value. Otherwise, the field was changed by a user in the older version and that change is + kept instead. + type: object + x-kubernetes-preserve-unknown-fields: true + jsonPath: + description: The name of the field of the custom resource this value is for. + type: string + value: + description: The value to be used when upgrading or downgrading the custom resource. + type: object + x-kubernetes-preserve-unknown-fields: true + required: + - jsonPath + - value + type: object + type: array + description: List of values needed when upgrading to a particular version. + type: object + required: + - downgrades + - upgrades + type: object + required: + - changedValues + type: object required: - spec title: TrinoCatalog type: object served: true storage: false + subresources: + status: {} From c93b7f5c8101c148807045fb71f19e6e1e416c8c Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Mon, 19 Oct 2026 12:33:06 +0200 Subject: [PATCH 16/34] chore: Update op-rs feature branch --- Cargo.lock | 71 ++++++++++++++++++++---------------------------------- 1 file changed, 26 insertions(+), 45 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0641606ca..16697fd23 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -114,9 +114,9 @@ checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "arc-swap" -version = "1.9.2" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c049c0be4daef0b145cb3555416b3b8ef5b7888a38aea1a3a155801fe7b0810b" +checksum = "380962b3d93b99642e50b9febf72c071e97e8b32d86eae9cf4ef582bb960ae6e" dependencies = [ "rustversion", ] @@ -316,9 +316,9 @@ checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" [[package]] name = "cc" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6651c9ed80effdc7db0ff72512157f901af5e3549e341e24b1dd4887d836d838" +checksum = "877bf67ac8e52449eb2f9e98a344ea163beb70dd1f9eebe3cc5357dcfeaee4df" dependencies = [ "find-msvc-tools", "jobserver", @@ -912,9 +912,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.14" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aedcfb3409746eddb02b9e19ebda1c3394f759a152e48ee875a0844d1b955484" +checksum = "1c66915cc5391097de7a2b0b972e8505aa33c0df401fd3a6811dbdb32881ba48" [[package]] name = "flagset" @@ -1719,8 +1719,8 @@ dependencies = [ [[package]] name = "k8s-version" -version = "0.1.3" -source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#b9cbd8ca60ce17a737f5e3eeb3f449fd2d2f61ec" +version = "0.1.4" +source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#033abc201e6504b5639ba2f2c726e5e465af5a07" dependencies = [ "darling 0.24.1", "regex", @@ -1862,9 +1862,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.190" +version = "0.2.191" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce5d3ddc6d3fa000eb1536d85e147bfe31aacaba692ed6a876f95cb7c855be78" +checksum = "65cd87c9a6d60536580b316ad985726104730a5151c99845f2490428ef91240a" [[package]] name = "libgit2-sys" @@ -2807,9 +2807,9 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.29" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" +checksum = "9cb23c424d8ee841bb4d813677ca237e2a610067d594fec130f87d6093495ab5" dependencies = [ "windows-sys 0.61.2", ] @@ -3008,19 +3008,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_yaml" -version = "0.9.34+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" -dependencies = [ - "indexmap", - "itoa", - "ryu", - "serde", - "unsafe-libyaml", -] - [[package]] name = "sha1" version = "0.10.7" @@ -3189,7 +3176,7 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "stackable-certs" version = "0.4.1" -source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#b9cbd8ca60ce17a737f5e3eeb3f449fd2d2f61ec" +source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#033abc201e6504b5639ba2f2c726e5e465af5a07" dependencies = [ "const-oid", "ecdsa", @@ -3212,8 +3199,8 @@ dependencies = [ [[package]] name = "stackable-operator" -version = "0.119.0" -source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#b9cbd8ca60ce17a737f5e3eeb3f449fd2d2f61ec" +version = "0.121.0" +source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#033abc201e6504b5639ba2f2c726e5e465af5a07" dependencies = [ "base64 0.23.1", "clap", @@ -3236,7 +3223,6 @@ dependencies = [ "semver", "serde", "serde_json", - "serde_yaml", "sha2", "snafu 0.9.2", "stackable-operator-derive", @@ -3252,12 +3238,13 @@ dependencies = [ "url", "uuid", "xml", + "yaml_serde", ] [[package]] name = "stackable-operator-derive" version = "0.3.1" -source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#b9cbd8ca60ce17a737f5e3eeb3f449fd2d2f61ec" +source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#033abc201e6504b5639ba2f2c726e5e465af5a07" dependencies = [ "darling 0.24.1", "proc-macro2", @@ -3267,8 +3254,8 @@ dependencies = [ [[package]] name = "stackable-shared" -version = "0.1.2" -source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#b9cbd8ca60ce17a737f5e3eeb3f449fd2d2f61ec" +version = "0.2.0" +source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#033abc201e6504b5639ba2f2c726e5e465af5a07" dependencies = [ "jiff", "k8s-openapi", @@ -3276,16 +3263,16 @@ dependencies = [ "schemars", "semver", "serde", - "serde_yaml", "snafu 0.9.2", "strum", "time", + "yaml_serde", ] [[package]] name = "stackable-telemetry" version = "0.6.5" -source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#b9cbd8ca60ce17a737f5e3eeb3f449fd2d2f61ec" +source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#033abc201e6504b5639ba2f2c726e5e465af5a07" dependencies = [ "axum", "clap", @@ -3332,8 +3319,8 @@ dependencies = [ [[package]] name = "stackable-versioned" -version = "0.11.1" -source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#b9cbd8ca60ce17a737f5e3eeb3f449fd2d2f61ec" +version = "0.13.0" +source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#033abc201e6504b5639ba2f2c726e5e465af5a07" dependencies = [ "kube", "schemars", @@ -3345,8 +3332,8 @@ dependencies = [ [[package]] name = "stackable-versioned-macros" -version = "0.11.1" -source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#b9cbd8ca60ce17a737f5e3eeb3f449fd2d2f61ec" +version = "0.13.0" +source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#033abc201e6504b5639ba2f2c726e5e465af5a07" dependencies = [ "convert_case", "darling 0.24.1", @@ -3363,7 +3350,7 @@ dependencies = [ [[package]] name = "stackable-webhook" version = "0.10.0" -source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#b9cbd8ca60ce17a737f5e3eeb3f449fd2d2f61ec" +source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#033abc201e6504b5639ba2f2c726e5e465af5a07" dependencies = [ "arc-swap", "async-trait", @@ -3965,12 +3952,6 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" -[[package]] -name = "unsafe-libyaml" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" - [[package]] name = "untrusted" version = "0.9.0" From 1b9f0a8af698d27c092d82c2ddc8af3130fe7ca9 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Tue, 20 Oct 2026 12:47:49 +0200 Subject: [PATCH 17/34] refactor: Flatten credentials options --- extra/crds.yaml | 36 +++++++++---------- .../src/crd/catalog/iceberg.rs | 7 ++-- rust/operator-binary/src/crd/catalog/mod.rs | 17 ++++++--- 3 files changed, 36 insertions(+), 24 deletions(-) diff --git a/extra/crds.yaml b/extra/crds.yaml index 1ea20ae7b..f2e0db90b 100644 --- a/extra/crds.yaml +++ b/extra/crds.yaml @@ -4106,31 +4106,31 @@ spec: Note that we only support configuring a subset of Trino's properties, you might need to use `configOverrides` to be able to set all [available properties](https://trino.io/docs/current/object-storage/metastores.html#iceberg-specific-metastores). + oneOf: + - required: + - tokenSecretName + - required: + - credentialsSecretName properties: - credential: - description: The credential to present to the REST catalog. - oneOf: - - required: - - tokenSecretName - - required: - - credentialsSecretName - properties: - credentialsSecretName: - description: The Secret needs to contain the `clientId` and `clientSecret` keys. - type: string - tokenSecretName: - description: |- - Authenticate using a bearer token. + credentialsSecretName: + description: |- + The credentials to exchange for a token in the OAuth2 client credentials flow with the server. + Mutually exclusive with `tokenSecretName`. - The Secret needs to contain the `token` key. - type: string - type: object + The Secret needs to contain the `clientId` and `clientSecret` keys. + type: string serverUri: description: The endpoint to retrieve access token from OAuth2 Server. format: uri type: string + tokenSecretName: + description: |- + Authenticate using a bearer token. + Mutually exclusive with `credentialsSecretName`. + + The Secret needs to contain the `token` key. + type: string required: - - credential - serverUri type: object type: object diff --git a/rust/operator-binary/src/crd/catalog/iceberg.rs b/rust/operator-binary/src/crd/catalog/iceberg.rs index 4198c19d4..6b7c8c61c 100644 --- a/rust/operator-binary/src/crd/catalog/iceberg.rs +++ b/rust/operator-binary/src/crd/catalog/iceberg.rs @@ -44,7 +44,8 @@ pub enum IcebergRestCatalogAuthentication { /// The endpoint to retrieve access token from OAuth2 Server. server_uri: Url, - /// The credential to present to the REST catalog. + // No docs will show up. + #[serde(flatten)] credential: IcebergRestCatalogOAuthCredential, }, } @@ -59,11 +60,13 @@ impl Default for IcebergRestCatalogAuthentication { #[serde(rename_all = "camelCase")] pub enum IcebergRestCatalogOAuthCredential { /// Authenticate using a bearer token. + /// Mutually exclusive with `credentialsSecretName`. /// /// The Secret needs to contain the `token` key. TokenSecretName(String), - // The credentials to exchange for a token in the OAuth2 client credentials flow with the server. + /// The credentials to exchange for a token in the OAuth2 client credentials flow with the server. + /// Mutually exclusive with `tokenSecretName`. /// /// The Secret needs to contain the `clientId` and `clientSecret` keys. CredentialsSecretName(String), diff --git a/rust/operator-binary/src/crd/catalog/mod.rs b/rust/operator-binary/src/crd/catalog/mod.rs index 6b5f7d933..9b546da46 100644 --- a/rust/operator-binary/src/crd/catalog/mod.rs +++ b/rust/operator-binary/src/crd/catalog/mod.rs @@ -389,8 +389,7 @@ mod tests { authentication: oAuth2: serverUri: https://keycloak.default.svc.cluster.local:8443/realms/test/protocol/openid-connect/token - credential: - credentialsSecretName: my-keycloak-credentials + credentialsSecretName: my-keycloak-credentials - connector: iceberg: catalog: @@ -399,8 +398,18 @@ mod tests { authentication: oAuth2: serverUri: https://keycloak.default.svc.cluster.local:8443/realms/test/protocol/openid-connect/token - credential: - tokenSecretName: my-keycloak-token + tokenSecretName: my-keycloak-token + - connector: + iceberg: + catalog: + rest: + uri: https://my.secure.rest + authentication: + oAuth2: + serverUri: https://keycloak.default.svc.cluster.local:8443/realms/test/protocol/openid-connect/token + credentialsSecretName: my-keycloak-credentials + # Note that we specify credentialsSecretName and tokenSecretName, which Kubernetes would reject at the same time + tokenSecretName: my-keycloak-token - connector: iceberg: catalog: From bfec62a7c202cf3c252a0738704df9c3e8e4b9d2 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Tue, 20 Oct 2026 12:48:45 +0200 Subject: [PATCH 18/34] regenerate nix --- Cargo.nix | 127 +++++++++++++++------------------------------- crate-hashes.json | 18 +++---- 2 files changed, 51 insertions(+), 94 deletions(-) diff --git a/Cargo.nix b/Cargo.nix index 3a3b91095..a0b7e67d4 100644 --- a/Cargo.nix +++ b/Cargo.nix @@ -375,9 +375,9 @@ rec { }; "arc-swap" = rec { crateName = "arc-swap"; - version = "1.9.2"; + version = "1.9.3"; edition = "2018"; - sha256 = "02w1n3kiz02ml6is3biqia4bgxcf7dml2m9mrd2v3w5f9nzc0jf0"; + sha256 = "0vmfc2wjnn7gyjfawvnq6a5pxsbiq1rbzzmra0p6969vv6rn429q"; libName = "arc_swap"; authors = [ "Michal 'vorner' Vaner " @@ -389,6 +389,7 @@ rec { } ]; features = { + "internal-test-strategies" = [ "rwlock-strategy" ]; "serde" = [ "dep:serde" ]; }; }; @@ -989,9 +990,9 @@ rec { }; "cc" = rec { crateName = "cc"; - version = "1.8.0"; + version = "1.9.0"; edition = "2021"; - sha256 = "0f6q6vc8fj6xn4j1wd4yakiza6lhgwai49gp1zdwgzggh3nwjlb6"; + sha256 = "1pz4mvzdqmskrkiyp7hzvmqfnfqnx92a764y5zmlj975r1xgcyw7"; dependencies = [ { name = "find-msvc-tools"; @@ -2815,9 +2816,9 @@ rec { }; "find-msvc-tools" = rec { crateName = "find-msvc-tools"; - version = "0.1.14"; + version = "0.1.15"; edition = "2021"; - sha256 = "112ljldlv150fpl8xr2jl5czg51k3kdfn6cy5fqdsvkl14sgpp5f"; + sha256 = "0j5sh4lb7g8xh6kd67s0vz037ah5hlp9f2rbgbg9f41rqmf92rhw"; libName = "find_msvc_tools"; }; @@ -5465,13 +5466,13 @@ rec { }; "k8s-version" = rec { crateName = "k8s-version"; - version = "0.1.3"; + version = "0.1.4"; edition = "2024"; workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech//operator-rs.git"; - rev = "b9cbd8ca60ce17a737f5e3eeb3f449fd2d2f61ec"; - sha256 = "0abakydxyiva2k5jl7cglbjgaz63rkq0aq12g3dq4xvifkja7xxq"; + rev = "033abc201e6504b5639ba2f2c726e5e465af5a07"; + sha256 = "1r8yjfwvvyf16ji0a98vmlb1rnf67lvqxwqgn00b2k0rada60idj"; }; libName = "k8s_version"; authors = [ @@ -6130,9 +6131,9 @@ rec { }; "libc" = rec { crateName = "libc"; - version = "0.2.190"; + version = "0.2.191"; edition = "2021"; - sha256 = "0y5yap4bfp7rfsldcbk9pb5alcgygca5xn1n2pmh181zdpf3spff"; + sha256 = "02i4j7pjh129y92rijaia4576131fa2xjsii1dc3c1fnlv4qgkb5"; features = { "default" = [ "std" ]; "rustc-dep-of-std" = [ "align" "rustc-std-workspace-core" ]; @@ -9263,9 +9264,9 @@ rec { }; "schannel" = rec { crateName = "schannel"; - version = "0.1.29"; + version = "0.1.30"; edition = "2018"; - sha256 = "0ffrzz5vf2s3gnzvphgb5gg8fqifvryl07qcf7q3x1scj3jbghci"; + sha256 = "1das969n0zgq630zx56mcw062aky4g57fdl19nxl3s4f9m13rclw"; authors = [ "Steven Fackler " "Steffen Butzer " @@ -9924,38 +9925,6 @@ rec { } ]; - }; - "serde_yaml" = rec { - crateName = "serde_yaml"; - version = "0.9.34+deprecated"; - edition = "2021"; - sha256 = "0isba1fjyg3l6rxk156k600ilzr8fp7crv82rhal0rxz5qd1m2va"; - authors = [ - "David Tolnay " - ]; - dependencies = [ - { - name = "indexmap"; - packageId = "indexmap"; - } - { - name = "itoa"; - packageId = "itoa"; - } - { - name = "ryu"; - packageId = "ryu"; - } - { - name = "serde"; - packageId = "serde"; - } - { - name = "unsafe-libyaml"; - packageId = "unsafe-libyaml"; - } - ]; - }; "sha1" = rec { crateName = "sha1"; @@ -10436,8 +10405,8 @@ rec { workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech//operator-rs.git"; - rev = "b9cbd8ca60ce17a737f5e3eeb3f449fd2d2f61ec"; - sha256 = "0abakydxyiva2k5jl7cglbjgaz63rkq0aq12g3dq4xvifkja7xxq"; + rev = "033abc201e6504b5639ba2f2c726e5e465af5a07"; + sha256 = "1r8yjfwvvyf16ji0a98vmlb1rnf67lvqxwqgn00b2k0rada60idj"; }; libName = "stackable_certs"; authors = [ @@ -10534,13 +10503,13 @@ rec { }; "stackable-operator" = rec { crateName = "stackable-operator"; - version = "0.119.0"; + version = "0.121.0"; edition = "2024"; workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech//operator-rs.git"; - rev = "b9cbd8ca60ce17a737f5e3eeb3f449fd2d2f61ec"; - sha256 = "0abakydxyiva2k5jl7cglbjgaz63rkq0aq12g3dq4xvifkja7xxq"; + rev = "033abc201e6504b5639ba2f2c726e5e465af5a07"; + sha256 = "1r8yjfwvvyf16ji0a98vmlb1rnf67lvqxwqgn00b2k0rada60idj"; }; libName = "stackable_operator"; authors = [ @@ -10642,10 +10611,6 @@ rec { name = "serde_json"; packageId = "serde_json"; } - { - name = "serde_yaml"; - packageId = "serde_yaml"; - } { name = "sha2"; packageId = "sha2"; @@ -10715,6 +10680,10 @@ rec { name = "xml"; packageId = "xml"; } + { + name = "yaml_serde"; + packageId = "yaml_serde"; + } ]; features = { "certs" = [ "dep:stackable-certs" ]; @@ -10738,8 +10707,8 @@ rec { workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech//operator-rs.git"; - rev = "b9cbd8ca60ce17a737f5e3eeb3f449fd2d2f61ec"; - sha256 = "0abakydxyiva2k5jl7cglbjgaz63rkq0aq12g3dq4xvifkja7xxq"; + rev = "033abc201e6504b5639ba2f2c726e5e465af5a07"; + sha256 = "1r8yjfwvvyf16ji0a98vmlb1rnf67lvqxwqgn00b2k0rada60idj"; }; procMacro = true; libName = "stackable_operator_derive"; @@ -10768,13 +10737,13 @@ rec { }; "stackable-shared" = rec { crateName = "stackable-shared"; - version = "0.1.2"; + version = "0.2.0"; edition = "2024"; workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech//operator-rs.git"; - rev = "b9cbd8ca60ce17a737f5e3eeb3f449fd2d2f61ec"; - sha256 = "0abakydxyiva2k5jl7cglbjgaz63rkq0aq12g3dq4xvifkja7xxq"; + rev = "033abc201e6504b5639ba2f2c726e5e465af5a07"; + sha256 = "1r8yjfwvvyf16ji0a98vmlb1rnf67lvqxwqgn00b2k0rada60idj"; }; libName = "stackable_shared"; authors = [ @@ -10812,10 +10781,6 @@ rec { packageId = "serde"; features = [ "derive" ]; } - { - name = "serde_yaml"; - packageId = "serde_yaml"; - } { name = "snafu"; packageId = "snafu 0.9.2"; @@ -10830,6 +10795,10 @@ rec { packageId = "time"; optional = true; } + { + name = "yaml_serde"; + packageId = "yaml_serde"; + } ]; devDependencies = [ { @@ -10854,8 +10823,8 @@ rec { workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech//operator-rs.git"; - rev = "b9cbd8ca60ce17a737f5e3eeb3f449fd2d2f61ec"; - sha256 = "0abakydxyiva2k5jl7cglbjgaz63rkq0aq12g3dq4xvifkja7xxq"; + rev = "033abc201e6504b5639ba2f2c726e5e465af5a07"; + sha256 = "1r8yjfwvvyf16ji0a98vmlb1rnf67lvqxwqgn00b2k0rada60idj"; }; libName = "stackable_telemetry"; authors = [ @@ -11066,13 +11035,13 @@ rec { }; "stackable-versioned" = rec { crateName = "stackable-versioned"; - version = "0.11.1"; + version = "0.13.0"; edition = "2024"; workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech//operator-rs.git"; - rev = "b9cbd8ca60ce17a737f5e3eeb3f449fd2d2f61ec"; - sha256 = "0abakydxyiva2k5jl7cglbjgaz63rkq0aq12g3dq4xvifkja7xxq"; + rev = "033abc201e6504b5639ba2f2c726e5e465af5a07"; + sha256 = "1r8yjfwvvyf16ji0a98vmlb1rnf67lvqxwqgn00b2k0rada60idj"; }; libName = "stackable_versioned"; authors = [ @@ -11112,13 +11081,13 @@ rec { }; "stackable-versioned-macros" = rec { crateName = "stackable-versioned-macros"; - version = "0.11.1"; + version = "0.13.0"; edition = "2024"; workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech//operator-rs.git"; - rev = "b9cbd8ca60ce17a737f5e3eeb3f449fd2d2f61ec"; - sha256 = "0abakydxyiva2k5jl7cglbjgaz63rkq0aq12g3dq4xvifkja7xxq"; + rev = "033abc201e6504b5639ba2f2c726e5e465af5a07"; + sha256 = "1r8yjfwvvyf16ji0a98vmlb1rnf67lvqxwqgn00b2k0rada60idj"; }; procMacro = true; libName = "stackable_versioned_macros"; @@ -11181,8 +11150,8 @@ rec { workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech//operator-rs.git"; - rev = "b9cbd8ca60ce17a737f5e3eeb3f449fd2d2f61ec"; - sha256 = "0abakydxyiva2k5jl7cglbjgaz63rkq0aq12g3dq4xvifkja7xxq"; + rev = "033abc201e6504b5639ba2f2c726e5e465af5a07"; + sha256 = "1r8yjfwvvyf16ji0a98vmlb1rnf67lvqxwqgn00b2k0rada60idj"; }; libName = "stackable_webhook"; authors = [ @@ -13319,18 +13288,6 @@ rec { }; resolvedDefaultFeatures = [ "default" ]; }; - "unsafe-libyaml" = rec { - crateName = "unsafe-libyaml"; - version = "0.2.11"; - edition = "2021"; - crateBin = []; - sha256 = "0qdq69ffl3v5pzx9kzxbghzn0fzn266i1xn70y88maybz9csqfk7"; - libName = "unsafe_libyaml"; - authors = [ - "David Tolnay " - ]; - - }; "untrusted" = rec { crateName = "untrusted"; version = "0.9.0"; diff --git a/crate-hashes.json b/crate-hashes.json index 289fe70a2..ee845ebfe 100644 --- a/crate-hashes.json +++ b/crate-hashes.json @@ -1,11 +1,11 @@ { - "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#k8s-version@0.1.3": "0abakydxyiva2k5jl7cglbjgaz63rkq0aq12g3dq4xvifkja7xxq", - "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#stackable-certs@0.4.1": "0abakydxyiva2k5jl7cglbjgaz63rkq0aq12g3dq4xvifkja7xxq", - "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#stackable-operator-derive@0.3.1": "0abakydxyiva2k5jl7cglbjgaz63rkq0aq12g3dq4xvifkja7xxq", - "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#stackable-operator@0.119.0": "0abakydxyiva2k5jl7cglbjgaz63rkq0aq12g3dq4xvifkja7xxq", - "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#stackable-shared@0.1.2": "0abakydxyiva2k5jl7cglbjgaz63rkq0aq12g3dq4xvifkja7xxq", - "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#stackable-telemetry@0.6.5": "0abakydxyiva2k5jl7cglbjgaz63rkq0aq12g3dq4xvifkja7xxq", - "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#stackable-versioned-macros@0.11.1": "0abakydxyiva2k5jl7cglbjgaz63rkq0aq12g3dq4xvifkja7xxq", - "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#stackable-versioned@0.11.1": "0abakydxyiva2k5jl7cglbjgaz63rkq0aq12g3dq4xvifkja7xxq", - "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#stackable-webhook@0.10.0": "0abakydxyiva2k5jl7cglbjgaz63rkq0aq12g3dq4xvifkja7xxq" + "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#k8s-version@0.1.4": "1r8yjfwvvyf16ji0a98vmlb1rnf67lvqxwqgn00b2k0rada60idj", + "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#stackable-certs@0.4.1": "1r8yjfwvvyf16ji0a98vmlb1rnf67lvqxwqgn00b2k0rada60idj", + "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#stackable-operator-derive@0.3.1": "1r8yjfwvvyf16ji0a98vmlb1rnf67lvqxwqgn00b2k0rada60idj", + "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#stackable-operator@0.121.0": "1r8yjfwvvyf16ji0a98vmlb1rnf67lvqxwqgn00b2k0rada60idj", + "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#stackable-shared@0.2.0": "1r8yjfwvvyf16ji0a98vmlb1rnf67lvqxwqgn00b2k0rada60idj", + "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#stackable-telemetry@0.6.5": "1r8yjfwvvyf16ji0a98vmlb1rnf67lvqxwqgn00b2k0rada60idj", + "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#stackable-versioned-macros@0.13.0": "1r8yjfwvvyf16ji0a98vmlb1rnf67lvqxwqgn00b2k0rada60idj", + "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#stackable-versioned@0.13.0": "1r8yjfwvvyf16ji0a98vmlb1rnf67lvqxwqgn00b2k0rada60idj", + "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#stackable-webhook@0.10.0": "1r8yjfwvvyf16ji0a98vmlb1rnf67lvqxwqgn00b2k0rada60idj" } \ No newline at end of file From 9ec4755ae287d81e62b6c52a8f035f46e210dc97 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Tue, 20 Oct 2026 13:08:19 +0200 Subject: [PATCH 19/34] credentialsSecretName -> clientCredentialsSecretName --- rust/operator-binary/src/catalog/iceberg.rs | 2 +- rust/operator-binary/src/crd/catalog/iceberg.rs | 4 ++-- rust/operator-binary/src/crd/catalog/mod.rs | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/rust/operator-binary/src/catalog/iceberg.rs b/rust/operator-binary/src/catalog/iceberg.rs index 8ea486f28..ab6735b79 100644 --- a/rust/operator-binary/src/catalog/iceberg.rs +++ b/rust/operator-binary/src/catalog/iceberg.rs @@ -96,7 +96,7 @@ impl ExtendCatalogConfig for IcebergRestCatalogConnection { server_uri.as_str(), ); match credential { - IcebergRestCatalogOAuthCredential::CredentialsSecretName(secret_name) => { + IcebergRestCatalogOAuthCredential::ClientCredentialsSecretName(secret_name) => { // We can't use `add_env_property_from_secret`, as we need to concatenate // clientId and clientSecret in the Trino configuration. So instead we come // up with our own envs and bind them. diff --git a/rust/operator-binary/src/crd/catalog/iceberg.rs b/rust/operator-binary/src/crd/catalog/iceberg.rs index 6b7c8c61c..a0bdadf97 100644 --- a/rust/operator-binary/src/crd/catalog/iceberg.rs +++ b/rust/operator-binary/src/crd/catalog/iceberg.rs @@ -60,7 +60,7 @@ impl Default for IcebergRestCatalogAuthentication { #[serde(rename_all = "camelCase")] pub enum IcebergRestCatalogOAuthCredential { /// Authenticate using a bearer token. - /// Mutually exclusive with `credentialsSecretName`. + /// Mutually exclusive with `clientCredentialsSecretName`. /// /// The Secret needs to contain the `token` key. TokenSecretName(String), @@ -69,5 +69,5 @@ pub enum IcebergRestCatalogOAuthCredential { /// Mutually exclusive with `tokenSecretName`. /// /// The Secret needs to contain the `clientId` and `clientSecret` keys. - CredentialsSecretName(String), + ClientCredentialsSecretName(String), } diff --git a/rust/operator-binary/src/crd/catalog/mod.rs b/rust/operator-binary/src/crd/catalog/mod.rs index 9b546da46..b3f3bab21 100644 --- a/rust/operator-binary/src/crd/catalog/mod.rs +++ b/rust/operator-binary/src/crd/catalog/mod.rs @@ -389,7 +389,7 @@ mod tests { authentication: oAuth2: serverUri: https://keycloak.default.svc.cluster.local:8443/realms/test/protocol/openid-connect/token - credentialsSecretName: my-keycloak-credentials + clientCredentialsSecretName: my-keycloak-credentials - connector: iceberg: catalog: @@ -407,8 +407,8 @@ mod tests { authentication: oAuth2: serverUri: https://keycloak.default.svc.cluster.local:8443/realms/test/protocol/openid-connect/token - credentialsSecretName: my-keycloak-credentials - # Note that we specify credentialsSecretName and tokenSecretName, which Kubernetes would reject at the same time + clientCredentialsSecretName: my-keycloak-credentials + # Note that we specify clientCredentialsSecretName and tokenSecretName, which Kubernetes would reject at the same time tokenSecretName: my-keycloak-token - connector: iceberg: From 96a27b0ac150c380b5e784d126ba95ec234b923c Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Tue, 20 Oct 2026 14:26:46 +0200 Subject: [PATCH 20/34] regenerate CRD --- extra/crds.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/extra/crds.yaml b/extra/crds.yaml index f2e0db90b..6c72186cd 100644 --- a/extra/crds.yaml +++ b/extra/crds.yaml @@ -4110,9 +4110,9 @@ spec: - required: - tokenSecretName - required: - - credentialsSecretName + - clientCredentialsSecretName properties: - credentialsSecretName: + clientCredentialsSecretName: description: |- The credentials to exchange for a token in the OAuth2 client credentials flow with the server. Mutually exclusive with `tokenSecretName`. @@ -4126,7 +4126,7 @@ spec: tokenSecretName: description: |- Authenticate using a bearer token. - Mutually exclusive with `credentialsSecretName`. + Mutually exclusive with `clientCredentialsSecretName`. The Secret needs to contain the `token` key. type: string From 1b7c94c64e7eb942508043b464f37ca5a7e3d493 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Fri, 30 Oct 2026 09:12:39 +0100 Subject: [PATCH 21/34] bump op-rs --- Cargo.lock | 541 ++++++++++---------- Cargo.toml | 6 +- rust/operator-binary/src/crd/catalog/mod.rs | 8 +- 3 files changed, 282 insertions(+), 273 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 16697fd23..8cbbaae86 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -47,9 +47,9 @@ dependencies = [ [[package]] name = "annotate-snippets" -version = "0.12.16" +version = "0.12.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f211a51805bc641f3ad5b7664c77d2547af685cc33b4cd8d31964027a46f13f1" +checksum = "b2a5b0a5ab8561c603f16c3b78c24a386b1f70e7fc1b1b1e8c15738828e4a176" dependencies = [ "anstyle", "memchr", @@ -249,9 +249,9 @@ dependencies = [ [[package]] name = "base16ct" -version = "0.2.0" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +checksum = "fd307490d624467aa6f74b0eabb77633d1f758a7b25f12bceb0b22e08d9726f6" [[package]] name = "base64" @@ -285,11 +285,11 @@ checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "block-buffer" -version = "0.10.4" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" dependencies = [ - "generic-array", + "hybrid-array", ] [[package]] @@ -316,9 +316,9 @@ checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" [[package]] name = "cc" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877bf67ac8e52449eb2f9e98a344ea163beb70dd1f9eebe3cc5357dcfeaee4df" +checksum = "86e055fa6e3e40ad6187ba25b6855eeb635d5271f8e0f0e1e9a5826b8d75bea0" dependencies = [ "find-msvc-tools", "jobserver", @@ -339,7 +339,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "65c35e4b699c7e15ccbe7ee35c005e4fc0a278d22238a2857e6ce2dadeda1b06" dependencies = [ "cfg-if", - "cpufeatures 0.3.1", + "cpufeatures", "rand_core 0.10.1", ] @@ -394,6 +394,12 @@ version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c133bc6a41be0d194c306b5506d15e6feeea7b1d6604bd3f8310dfb2ca96486" +[[package]] +name = "cmov" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a" + [[package]] name = "colorchoice" version = "1.0.5" @@ -412,15 +418,15 @@ dependencies = [ [[package]] name = "const-oid" -version = "0.9.6" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" [[package]] name = "const_format" -version = "0.2.36" +version = "0.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4481a617ad9a412be3b97c5d403fef8ed023103368908b9c50af598ff467cc1e" +checksum = "a3decb4d6965448659923544a634a0571ba44cede4e11ef15a5a317126840454" dependencies = [ "const_format_proc_macros", "konst", @@ -428,9 +434,9 @@ dependencies = [ [[package]] name = "const_format_proc_macros" -version = "0.2.34" +version = "0.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" +checksum = "941b570269a642506f08cb5b688c04bfa6cfd41a26f8bcdc49db8fd00c0ab659" dependencies = [ "proc-macro2", "quote", @@ -469,13 +475,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f8f80099a98041a3d1622845c271458a2d73e688351bf3cb999266764b81d48" [[package]] -name = "cpufeatures" -version = "0.2.17" +name = "cpubits" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" -dependencies = [ - "libc", -] +checksum = "15b85f9c39137c3a891689859392b1bd49812121d0d61c9caf00d46ed5ce06ae" [[package]] name = "cpufeatures" @@ -488,9 +491,9 @@ dependencies = [ [[package]] name = "crc32fast" -version = "1.5.2" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01a7799fd6b852db0e61728dde9a204c423b44d689dbd432522543614b490e78" +checksum = "0ba106e844045ddc02c20768ac4b0b7cb45f2cc2ecbd833ac9f5dacb183c2055" dependencies = [ "cfg-if", ] @@ -512,24 +515,50 @@ checksum = "a31eee39dddec8330830986fcd7625edb5a24ec90ea038215273bbc3adb08ac6" [[package]] name = "crypto-bigint" -version = "0.5.5" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +checksum = "9c035cb64cba03dad2fb921f3e218785e8cf9a41790da5eb3a1400f62fa2be11" dependencies = [ - "generic-array", - "rand_core 0.6.4", + "cpubits", + "ctutils", + "getrandom 0.4.3", + "hybrid-array", + "num-traits", + "rand_core 0.10.1", + "serdect", "subtle", "zeroize", ] [[package]] name = "crypto-common" -version = "0.1.6" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" dependencies = [ - "generic-array", - "typenum", + "getrandom 0.4.3", + "hybrid-array", + "rand_core 0.10.1", +] + +[[package]] +name = "crypto-primes" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3633a51a39c69ebbaa4feaa694bd83d241e4093901c84a0963b19d9bb3f0cf8f" +dependencies = [ + "crypto-bigint", + "rand_core 0.10.1", +] + +[[package]] +name = "ctutils" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2376ffd6f96d8a9db59875b4b6b0237d6900b5baf64279714e05493ce64828a" +dependencies = [ + "cmov", + "subtle", ] [[package]] @@ -644,9 +673,9 @@ dependencies = [ [[package]] name = "der" -version = "0.7.10" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +checksum = "6a996a108feb8b427a6e12fcf6af4aa83409b79d72c15337d7741368131ee004" dependencies = [ "const-oid", "der_derive", @@ -657,9 +686,9 @@ dependencies = [ [[package]] name = "der_derive" -version = "0.7.3" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8034092389675178f570469e6c3b0465d3d30b4505c294a6550db47f3c17ad18" +checksum = "59600e2c2d636fde9b65e99cc6445ac770c63d3628195ff39932b8d6d7409903" dependencies = [ "proc-macro2", "quote", @@ -695,14 +724,14 @@ dependencies = [ [[package]] name = "digest" -version = "0.10.7" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" dependencies = [ "block-buffer", "const-oid", "crypto-common", - "subtle", + "ctutils", ] [[package]] @@ -744,9 +773,9 @@ checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "ecdsa" -version = "0.16.9" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +checksum = "c0681a4fc24c767085329728d8dfba959af91228aa4610cca4f8ce317ba46ae0" dependencies = [ "der", "digest", @@ -754,6 +783,7 @@ dependencies = [ "rfc6979", "signature", "spki", + "zeroize", ] [[package]] @@ -788,19 +818,20 @@ checksum = "0e9c71c2167ca323c882b99918929403426e2373ea17242ff5653e0d5e1058be" [[package]] name = "elliptic-curve" -version = "0.13.8" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +checksum = "900f37e7e18d74a2347389af6cd69e3a30d5cc9e697f40004865679aa75e9c7c" dependencies = [ "base16ct", "crypto-bigint", + "crypto-common", "digest", "ff", - "generic-array", "group", + "hybrid-array", "pem-rfc7468", "pkcs8", - "rand_core 0.6.4", + "rand_core 0.10.1", "sec1", "subtle", "zeroize", @@ -902,11 +933,11 @@ checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" [[package]] name = "ff" -version = "0.13.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +checksum = "a1f686ab92a9fb0eaf188f6c6c87b89490baa6fdb0db4544ba4dc47f7942489f" dependencies = [ - "rand_core 0.6.4", + "rand_core 0.10.1", "subtle", ] @@ -1056,17 +1087,6 @@ dependencies = [ "slab", ] -[[package]] -name = "generic-array" -version = "0.14.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" -dependencies = [ - "typenum", - "version_check", - "zeroize", -] - [[package]] name = "getrandom" version = "0.2.17" @@ -1146,12 +1166,12 @@ dependencies = [ [[package]] name = "group" -version = "0.13.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +checksum = "7fd1a1c7a5206c5b7a3f5a0d7ccd3ff85d0c8f5133d62a02680255b0004af5f4" dependencies = [ "ff", - "rand_core 0.6.4", + "rand_core 0.10.1", "subtle", ] @@ -1199,9 +1219,9 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hmac" -version = "0.12.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +checksum = "6303bc9732ae41b04cb554b844a762b4115a61bfaa81e3e83050991eeb56863f" dependencies = [ "digest", ] @@ -1268,6 +1288,17 @@ version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "15cdd26707701c53297e2fa6afb323d55fbc1d0810c3aec078ae3ef0424c3c15" +[[package]] +name = "hybrid-array" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27f864f10dfb56725ce5ce5472bc52252c8f93a4ab86327122cebf62c5f59a17" +dependencies = [ + "subtle", + "typenum", + "zeroize", +] + [[package]] name = "hyper" version = "1.12.0" @@ -1370,9 +1401,9 @@ dependencies = [ [[package]] name = "icu_collections" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa68d21081c4a05d5a901a1c62add574c77048b6a1c67be3b50ce0b60d4ca513" +checksum = "fe090a42a0d3140fed8c63263ed1fecc02422cb2f4bfe55cd8de2de1b8e105dd" dependencies = [ "displaydoc", "potential_utf", @@ -1384,9 +1415,9 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56e28588da92eee5c3201a6eff33fabdd49b62269c8938d4ff050ce4d900deb" +checksum = "25d29b57c17c6528d0dc4c2141cfa2d08200465acb537a3909c8b9b8a4a984c0" dependencies = [ "displaydoc", "litemap", @@ -1397,9 +1428,9 @@ dependencies = [ [[package]] name = "icu_normalizer" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f9cf5f235641ed274641dd81c3f28d870e276763d0797aeeab72317b1c646f" +checksum = "404a3b8c486f205c87fe7f23ab6894d84a4ad76d6e4671ae1981ba7def87c599" dependencies = [ "icu_collections", "icu_normalizer_data", @@ -1411,15 +1442,15 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1563da1ed3e0b3bf3d74c9b85917ac9c56464d2f57242270c09c9e752f8021a0" +checksum = "20f0088bfb7441f7a37fa0c9e20cb1e9cba1cac6b9ce8cd2a6dc44294f8e8cbc" [[package]] name = "icu_properties" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e7ca276ad3145661a65914e6daf131ca5120cd3dcee8f8f3214b8875184a148" +checksum = "2ea83d991c56158f7cf898bf86436c1dfe7c07ee82fe88951f2695c9f37a379f" dependencies = [ "displaydoc", "icu_collections", @@ -1432,15 +1463,15 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e590f038c1464a96894fd6d10127e90a8be4509f56ff7ecef851b15cee0b7caa" +checksum = "b98f29af82d02b163fe50161388350e743bb3107cc8e8c2f7314cb505faddfcf" [[package]] name = "icu_provider" -version = "2.3.1" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d27bbb9d3abbefac45d55f647c9de1d44aafcd1186eb91879afef17c396c3e73" +checksum = "413099315636c588ee8f011190b329b971a09a8fae9d157e01dcae8379468514" dependencies = [ "displaydoc", "icu_locale_core", @@ -1659,9 +1690,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.106" +version = "0.3.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7883d941dae510fb2d978fc3fe018c71c9e2892fd38854de3e8b92c2e5ad9cc5" +checksum = "8dc09d2154098bbf4ef54eab6b117a3c24cbbffe94046b16ee6d6d4510584d3a" dependencies = [ "cfg-if", "futures-util", @@ -1720,7 +1751,7 @@ dependencies = [ [[package]] name = "k8s-version" version = "0.1.4" -source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#033abc201e6504b5639ba2f2c726e5e465af5a07" +source = "git+https://github.com/stackabletech//operator-rs.git?branch=main#80c75a3aebf48af8bb793ea313e83440d6cee949" dependencies = [ "darling 0.24.1", "regex", @@ -1856,9 +1887,6 @@ name = "lazy_static" version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20870f649af7073d53e38067b2a84312175d56ea15217e1b15bc83506ec50afb" -dependencies = [ - "spin", -] [[package]] name = "libc" @@ -1878,12 +1906,6 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "libm" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" - [[package]] name = "libyaml-rs" version = "0.3.0" @@ -1892,9 +1914,9 @@ checksum = "2e126dda6f34391ab7b444f9922055facc83c07a910da3eb16f1e4d9c45dc777" [[package]] name = "libz-sys" -version = "1.1.30" +version = "1.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f710a23e6dbf193214fd46ca56a9d6864e550abe86202184532ae7275e46de19" +checksum = "ff20308ecabd635a2dc1dd5834a86c462cca20efba1d5d3ddab1f8aea3455cb2" dependencies = [ "cc", "libc", @@ -1992,47 +2014,12 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "num-bigint-dig" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e661dda6640fad38e827a6d4a310ff4763082116fe217f279885c97f511bb0b7" -dependencies = [ - "lazy_static", - "libm", - "num-integer", - "num-iter", - "num-traits", - "rand 0.8.8", - "smallvec", - "zeroize", -] - [[package]] name = "num-conv" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" -[[package]] -name = "num-integer" -version = "0.1.47" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ce2d95d4b3734dc35aa2f45e1aa22cd416814592a4f9d9205e11affd5b8e10b" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-iter" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c92800bd69a1eac91786bcfe9da64a897eb72911b8dc3095decbd07429e8048b" -dependencies = [ - "num-integer", - "num-traits", -] - [[package]] name = "num-traits" version = "0.2.19" @@ -2040,7 +2027,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", - "libm", ] [[package]] @@ -2057,9 +2043,9 @@ checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "openssl-probe" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" +checksum = "7e036b411754132fd6b74e94b74e9a13c5cf606fa93d1885c35860d3060820b1" [[package]] name = "opentelemetry" @@ -2168,12 +2154,13 @@ dependencies = [ [[package]] name = "p256" -version = "0.13.2" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +checksum = "d2c9239b2dbc807adbbe147e8cf72ea7450c3a0aabe62cb8e75ff4ec22e1f72a" dependencies = [ "ecdsa", "elliptic-curve", + "primefield", "primeorder", "sha2", ] @@ -2219,9 +2206,9 @@ dependencies = [ [[package]] name = "pem-rfc7468" -version = "0.7.0" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +checksum = "a6305423e0e7738146434843d1694d621cce767262b2a86910beab705e4493d9" dependencies = [ "base64ct", ] @@ -2234,21 +2221,20 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" -version = "2.9.4" +version = "2.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd47a460a9cbc3b3429c7e22bf0d76653e779319bae45a499ca010c9a990bb23" +checksum = "a8db75153506001cb36ed924f08cadc862eb3f8c4d0d534139f29074769d7660" dependencies = [ "memchr", - "psm", - "stacker", + "pest_stack_guard", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.9.4" +version = "2.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "203e46697708f7519ab1608393cf89239cafb46b8e6d08a8ffe359359b11ef44" +checksum = "20aa17e11fb35664b67d5214a0afac57a360d231b6ec53d6eba0700b27d933b4" dependencies = [ "pest", "pest_generator", @@ -2256,9 +2242,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.9.4" +version = "2.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e84ae6340a458d3d6cfc73cf328cf3cfe90b2484cd0de25eb66aa954615ed4d5" +checksum = "626ec5afccf44ccbfeb2b232316510bb55b4bf34d891afcb0fb07d2b17d7fe9d" dependencies = [ "pest", "pest_meta", @@ -2269,13 +2255,23 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.9.4" +version = "2.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b57f92f32b3dbce6598fd8f5cdf1f06a6072570b8103fa21728fa9036923e710" +checksum = "b3f45b6caa65c1b08186832745159c2529994146340a7bf44168095469720f5d" dependencies = [ "pest", ] +[[package]] +name = "pest_stack_guard" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97e6cd2217057fa86b6eaa512917e58089d875b957a31e35e7ab729977e0a5f2" +dependencies = [ + "psm", + "stacker", +] + [[package]] name = "pin-project" version = "1.1.13" @@ -2304,20 +2300,19 @@ checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "pkcs1" -version = "0.7.5" +version = "0.8.0-rc.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" +checksum = "f485dbafe293ea6ccaa7d82bc591651a796eb8a9aec3df040b057b706073dbc3" dependencies = [ "der", - "pkcs8", "spki", ] [[package]] name = "pkcs8" -version = "0.10.2" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +checksum = "451913da69c775a56034ea8d9003d27ee8948e12443eae7c038ba100a4f21cb7" dependencies = [ "der", "spki", @@ -2368,13 +2363,31 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "primefield" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c555a6e4eb7d4e158fcb028c835c3b8642206ddc279b5c6b202ef9a8bdb592f4" +dependencies = [ + "crypto-bigint", + "crypto-common", + "ff", + "rand_core 0.10.1", + "subtle", + "zeroize", +] + [[package]] name = "primeorder" -version = "0.13.6" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +checksum = "5c9f42978c78a00e3d68f69fc03e57a234debae69da4020a4fb588fcdcd07b06" dependencies = [ "elliptic-curve", + "once_cell", + "primefield", + "serdect", + "wnaf", ] [[package]] @@ -2457,23 +2470,13 @@ version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" -[[package]] -name = "rand" -version = "0.8.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e058c7de0b26af77780c769414d6257830bb240f3c38477dbc2c16e5f54d6d4c" -dependencies = [ - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - [[package]] name = "rand" version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" dependencies = [ - "rand_chacha 0.9.0", + "rand_chacha", "rand_core 0.9.5", ] @@ -2488,16 +2491,6 @@ dependencies = [ "rand_core 0.10.1", ] -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", -] - [[package]] name = "rand_chacha" version = "0.9.0" @@ -2508,15 +2501,6 @@ dependencies = [ "rand_core 0.9.5", ] -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom 0.2.17", -] - [[package]] name = "rand_core" version = "0.9.5" @@ -2629,12 +2613,12 @@ dependencies = [ [[package]] name = "rfc6979" -version = "0.4.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +checksum = "b4a459cddafb3fe76b31fd8f1108007566c40301feb64dc7b54656eb7388172b" dependencies = [ + "crypto-bigint", "hmac", - "subtle", ] [[package]] @@ -2653,30 +2637,28 @@ dependencies = [ [[package]] name = "rsa" -version = "0.9.10" +version = "0.10.0-rc.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8573f03f5883dcaebdfcf4725caa1ecb9c15b2ef50c43a07b816e06799bb12d" +checksum = "33405e321e16ef941ca66e254f6904c3aafd3c7ff001fb88bf11c73eb75c2b85" dependencies = [ "const-oid", + "crypto-bigint", + "crypto-primes", "digest", - "num-bigint-dig", - "num-integer", - "num-traits", "pkcs1", "pkcs8", - "rand_core 0.6.4", + "rand_core 0.10.1", "sha2", "signature", "spki", - "subtle", "zeroize", ] [[package]] name = "rstest" -version = "0.27.0" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "948203e6d13b83e51a90d7cf236dd58a0065f23f4b902f00f306e7eb2bd09b9c" +checksum = "b376e512f30a7686a8dbc6aeaace99b3ade1c26c1c63473473a817ade226dafc" dependencies = [ "futures-timer", "futures-util", @@ -2685,9 +2667,9 @@ dependencies = [ [[package]] name = "rstest_macros" -version = "0.27.0" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d92eaf7b6e51e12471d71ddc72608e7151573de44099aacfbb1128177c0da4" +checksum = "88512dbfb5b73a0dfa38aef7bc73b5657035fce477b923faf12d332dd83051ea" dependencies = [ "cfg-if", "glob", @@ -2775,9 +2757,9 @@ checksum = "eec689c0bc40ff2458a5977b6619cb718087084a18e02a131c599b62d05e1a5f" [[package]] name = "rustls-webpki" -version = "0.103.15" +version = "0.103.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c3cf1d8b1e7d4927e2d154c3fcb02979afb9939629c62cd9048d4f07b60ac2" +checksum = "4443b1b6d39d7c663139942cc4558262562d2c84123bb6282ef177009ca8b281" dependencies = [ "ring", "rustls-pki-types", @@ -2848,14 +2830,14 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sec1" -version = "0.7.3" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +checksum = "d56d437c2f19203ce5f7122e507831de96f3d2d4d3be5af44a0b0a09d8a80e4d" dependencies = [ "base16ct", + "ctutils", "der", - "generic-array", - "pkcs8", + "hybrid-array", "subtle", "zeroize", ] @@ -3008,25 +2990,35 @@ dependencies = [ "serde", ] +[[package]] +name = "serdect" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66cf8fedced2fcf12406bcb34223dffb92eaf34908ede12fed414c82b7f00b3e" +dependencies = [ + "base16ct", + "serde", +] + [[package]] name = "sha1" -version = "0.10.7" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a978451301f4db1d02937a4ab3ccce137717b81826e79b7d49ffe3244a13c3b8" +checksum = "aacc4cc499359472b4abe1bf11d0b12e688af9a805fa5e3016f9a386dc2d0214" dependencies = [ "cfg-if", - "cpufeatures 0.2.17", + "cpufeatures", "digest", ] [[package]] name = "sha2" -version = "0.10.9" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +checksum = "47d7069beb7d6ac7b9acd1039986e73443f24234f41074da099d6f994ac9ad19" dependencies = [ "cfg-if", - "cpufeatures 0.2.17", + "cpufeatures", "digest", ] @@ -3057,12 +3049,12 @@ dependencies = [ [[package]] name = "signature" -version = "2.2.0" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +checksum = "28d567dcbaf0049cb8ac2608a76cd95ff9e4412e1899d389ee400918ca7537f5" dependencies = [ "digest", - "rand_core 0.6.4", + "rand_core 0.10.1", ] [[package]] @@ -3151,17 +3143,11 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "spin" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3763264f6b73151db08c50ff20d7d8a0b8796e021cdea7ceedad07b80155fa0e" - [[package]] name = "spki" -version = "0.7.3" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +checksum = "7ef958a98b9d5da290cfc78946e9f3e61e1e62a18db0d92cac0b83cc161491a9" dependencies = [ "base64ct", "der", @@ -3176,7 +3162,7 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "stackable-certs" version = "0.4.1" -source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#033abc201e6504b5639ba2f2c726e5e465af5a07" +source = "git+https://github.com/stackabletech//operator-rs.git?branch=main#80c75a3aebf48af8bb793ea313e83440d6cee949" dependencies = [ "const-oid", "ecdsa", @@ -3184,7 +3170,7 @@ dependencies = [ "kube", "p256", "rand 0.10.3", - "rand_core 0.6.4", + "rand_core 0.10.1", "rsa", "sha2", "signature", @@ -3200,8 +3186,9 @@ dependencies = [ [[package]] name = "stackable-operator" version = "0.121.0" -source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#033abc201e6504b5639ba2f2c726e5e465af5a07" +source = "git+https://github.com/stackabletech//operator-rs.git?branch=main#80c75a3aebf48af8bb793ea313e83440d6cee949" dependencies = [ + "base16ct", "base64 0.23.1", "clap", "const_format", @@ -3244,7 +3231,7 @@ dependencies = [ [[package]] name = "stackable-operator-derive" version = "0.3.1" -source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#033abc201e6504b5639ba2f2c726e5e465af5a07" +source = "git+https://github.com/stackabletech//operator-rs.git?branch=main#80c75a3aebf48af8bb793ea313e83440d6cee949" dependencies = [ "darling 0.24.1", "proc-macro2", @@ -3255,7 +3242,7 @@ dependencies = [ [[package]] name = "stackable-shared" version = "0.2.0" -source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#033abc201e6504b5639ba2f2c726e5e465af5a07" +source = "git+https://github.com/stackabletech//operator-rs.git?branch=main#80c75a3aebf48af8bb793ea313e83440d6cee949" dependencies = [ "jiff", "k8s-openapi", @@ -3272,7 +3259,7 @@ dependencies = [ [[package]] name = "stackable-telemetry" version = "0.6.5" -source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#033abc201e6504b5639ba2f2c726e5e465af5a07" +source = "git+https://github.com/stackabletech//operator-rs.git?branch=main#80c75a3aebf48af8bb793ea313e83440d6cee949" dependencies = [ "axum", "clap", @@ -3320,7 +3307,7 @@ dependencies = [ [[package]] name = "stackable-versioned" version = "0.13.0" -source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#033abc201e6504b5639ba2f2c726e5e465af5a07" +source = "git+https://github.com/stackabletech//operator-rs.git?branch=main#80c75a3aebf48af8bb793ea313e83440d6cee949" dependencies = [ "kube", "schemars", @@ -3333,7 +3320,7 @@ dependencies = [ [[package]] name = "stackable-versioned-macros" version = "0.13.0" -source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#033abc201e6504b5639ba2f2c726e5e465af5a07" +source = "git+https://github.com/stackabletech//operator-rs.git?branch=main#80c75a3aebf48af8bb793ea313e83440d6cee949" dependencies = [ "convert_case", "darling 0.24.1", @@ -3350,7 +3337,7 @@ dependencies = [ [[package]] name = "stackable-webhook" version = "0.10.0" -source = "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#033abc201e6504b5639ba2f2c726e5e465af5a07" +source = "git+https://github.com/stackabletech//operator-rs.git?branch=main#80c75a3aebf48af8bb793ea313e83440d6cee949" dependencies = [ "arc-swap", "async-trait", @@ -3565,9 +3552,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1e27c91459209c2986af3dcf603a5a74a4368754ce37414f59acc971167f643" +checksum = "abc840c238154d58f9e86b2792261edfde565a17696e1cda1a449de27979801a" dependencies = [ "displaydoc", "zerovec", @@ -3596,9 +3583,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.53.3" +version = "1.54.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce3335fa71841cda333a58d7615b03901380ecf09d59b3296d21f8bbac0dde4e" +checksum = "b52fd3255258d26fac7264ab5a76b53c13367136dc011d3d6ad4f8ed070396a3" dependencies = [ "bytes", "libc", @@ -3690,14 +3677,15 @@ dependencies = [ [[package]] name = "tonic" -version = "0.14.6" +version = "0.14.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac2a5518c70fa84342385732db33fb3f44bc4cc748936eb5833d2df34d6445ef" +checksum = "e2cdfc673aabd30fe8fee92e65837b644c37c5d47f0f97ae6d5e0f1237d15e1b" dependencies = [ "async-trait", "base64 0.22.1", "bytes", "flate2", + "h2", "http", "http-body", "http-body-util", @@ -3709,6 +3697,7 @@ dependencies = [ "sync_wrapper", "tokio", "tokio-stream", + "tokio-util", "tower", "tower-layer", "tower-service", @@ -3717,9 +3706,9 @@ dependencies = [ [[package]] name = "tonic-prost" -version = "0.14.6" +version = "0.14.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50849f68853be452acf590cde0b146665b8d507b3b8af17261df47e02c209ea0" +checksum = "eba464054e2226f182a34489b8b079bf4c6e3e7ab5fd7fc30e024f24aa92a484" dependencies = [ "bytes", "prost", @@ -3728,9 +3717,9 @@ dependencies = [ [[package]] name = "tonic-types" -version = "0.14.6" +version = "0.14.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73ab1b02061f83d519bba3caa167f88f261ef05720ab8ebc954ade70de3348e8" +checksum = "ccbb6c31deb8e99dcdf87df19c5289b7838a600da74a8224baa671e52fe7c5ad" dependencies = [ "prost", "prost-types", @@ -3942,9 +3931,9 @@ checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "unicode-width" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" +checksum = "ca718471876992059f251e33aafc334346ada08042b7661dd1fe313a9bced557" [[package]] name = "unicode-xid" @@ -3973,9 +3962,12 @@ dependencies = [ [[package]] name = "utf8_iter" -version = "1.0.4" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" +checksum = "af3bd9d3e571c26fcce9d033b87ea5ab061b8d2ffe9b7a5675d810d68f03edf0" +dependencies = [ + "utf_types", +] [[package]] name = "utf8parse" @@ -3983,11 +3975,17 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" +[[package]] +name = "utf_types" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a3b425286980a367278453f3b6d28cdcb134b574e5a35824a6ff5eebad50bb6" + [[package]] name = "uuid" -version = "1.28.0" +version = "1.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cc1186384beb7dd8eedea376413fd654937285ea6c9cfbb928dc3043ea4b606" +checksum = "4a0e2d11620c50695fe12bbbfde96b3477fe606e7284c22d505c12ce51214514" dependencies = [ "js-sys", "wasm-bindgen", @@ -4047,12 +4045,11 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.129" +version = "0.2.130" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb54f33acc68fd454578d9820b0bde1a1a3d17aa17bb7b6595806d02886d409" +checksum = "a0181c14ddd6c7b8b0b0132a5f1ea2f32be0d893cd3ea97b6e3b28886b8a3d1c" dependencies = [ "cfg-if", - "once_cell", "rustversion", "wasm-bindgen-macro", "wasm-bindgen-shared", @@ -4060,9 +4057,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.79" +version = "0.4.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cbab34de2d982e9b48e18d216d04c4a6f641066ff19ffb699980f591ee3610e" +checksum = "5e14e0327cb5368ad60ccb22d04a9827a693c95a926d8d125e9fa39e0baec501" dependencies = [ "js-sys", "tokio", @@ -4071,9 +4068,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.129" +version = "0.2.130" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e29d0c35b16e224a7eeb5cd2d25e3e1968fbd65604117b44d3b789d00ee8535" +checksum = "6e931a02a39abdbf66966fc35902b5ed58344750a70885bed4ebb3d8eaf28ed9" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4081,9 +4078,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.129" +version = "0.2.130" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f501a8bc3719dba86ef8ae4728879c08001bea749eb1333ac5b91e040e2a6b7" +checksum = "2ca4b54280e455bd831e33a6b8e734baf432fe63fbc35c42ac14ce67a043a53a" dependencies = [ "bumpalo", "proc-macro2", @@ -4094,18 +4091,18 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.129" +version = "0.2.130" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23f0c9c52aa7cd7d77769a4cfe2a9adb1b331f489a41d912ce14513d5ab995c6" +checksum = "3b1f9c3798725016c6ee5f2f57869ec0831e8bbc0ab0310a86e787e97f41389e" dependencies = [ "unicode-ident", ] [[package]] name = "web-sys" -version = "0.3.106" +version = "0.3.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88261b9deccee56594c11a3460c462c41f58d148598fe70ad77070126a68aba4" +checksum = "d7d179596ff5ec0f6de4db64d54011bde6289cc49603d3a6e4ce3f329207ab88" dependencies = [ "js-sys", "wasm-bindgen", @@ -4123,9 +4120,9 @@ dependencies = [ [[package]] name = "webpki-root-certs" -version = "1.0.9" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b96554aa2acc8ccdb7e1c9a58a7a68dd5d13bccc69cd124cb09406db612a1c9b" +checksum = "e49d0e65abc00c142e8f9428da991da9f1a250c39be97459901eb12b9b49f62a" dependencies = [ "rustls-pki-types", ] @@ -4295,6 +4292,18 @@ version = "0.57.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" +[[package]] +name = "wnaf" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "795ca18b3fdb5e62bf982199278341ddcf7ebf7d32e25e212ad05d496e95f6fa" +dependencies = [ + "ff", + "group", + "hybrid-array", + "primefield", +] + [[package]] name = "writeable" version = "0.6.4" @@ -4303,9 +4312,9 @@ checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc" [[package]] name = "x509-cert" -version = "0.2.5" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1301e935010a701ae5f8655edc0ad17c44bad3ac5ce8c39185f75453b720ae94" +checksum = "105ef4642d9cb137ef83d623d0e4bf08b8adf69e9918ca904a174adb6d3d038b" dependencies = [ "const-oid", "der", @@ -4336,9 +4345,9 @@ dependencies = [ [[package]] name = "yoke" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" +checksum = "417ef3fcf6c300b7dbd25c85531a746931c02ad536f3cf4786ed1e88223340b3" dependencies = [ "stable_deref_trait", "yoke-derive", @@ -4431,9 +4440,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0464e17806c1d976d5cba29399c7f08e516e279e2ba493f63123b5fca67dd8" +checksum = "f58a2799cfe9a1670c7ea8edbd52ef8edb93cb37a7f83bf31ba9e35d9dae6a40" dependencies = [ "yoke", "zerofrom", @@ -4442,9 +4451,9 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.6" +version = "0.11.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da" +checksum = "c3743ddbf47738d929cd1ae2e199d40d0162979dfe31aef8ae646d2bf00bf97a" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index 5abbf6bfa..85aad1038 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,17 +19,17 @@ clap = "4.6" const_format = "0.2" futures = { version = "0.3", features = ["compat"] } indoc = "2.0" -rstest = "0.27" +rstest = "0.28" semver = "1.0" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" snafu = "0.9" strum = { version = "0.28", features = ["derive"] } -tokio = { version = "1.53", features = ["full"] } +tokio = { version = "1.54", features = ["full"] } tracing = "0.1" url = "2.5" yaml_serde = "0.10" [patch."https://github.com/stackabletech/operator-rs.git"] -stackable-operator = { git = "https://github.com/stackabletech//operator-rs.git", branch = "feat/track-changed-types" } +stackable-operator = { git = "https://github.com/stackabletech//operator-rs.git", branch = "main" } # stackable-operator = { path = "../operator-rs/crates/stackable-operator" } diff --git a/rust/operator-binary/src/crd/catalog/mod.rs b/rust/operator-binary/src/crd/catalog/mod.rs index b3f3bab21..7da82d091 100644 --- a/rust/operator-binary/src/crd/catalog/mod.rs +++ b/rust/operator-binary/src/crd/catalog/mod.rs @@ -151,10 +151,10 @@ pub mod versioned { /// /// Details can be found on the corresponding documentation #[versioned(changed( - since = "v1alpha2", - from_name = "metastore", - from_type = "Option", - from_docs = r#" + in = "v1alpha2", + previous_name = "metastore", + previous_type = "Option", + previous_docs = r#" Optional connection to a Hive Metastore, which will be used as a storage for metadata. The connection is optional, as Iceberg also supports other catalogs, such as a REST catalog, From c950aef7f9edd89fa3ddde2cdac2ad8df1abc10e Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Fri, 30 Oct 2026 13:12:23 +0100 Subject: [PATCH 22/34] regenerate nix --- Cargo.nix | 1485 +++++++++++++++++++++++---------------------- crate-hashes.json | 18 +- 2 files changed, 785 insertions(+), 718 deletions(-) diff --git a/Cargo.nix b/Cargo.nix index a0b7e67d4..82b9c332f 100644 --- a/Cargo.nix +++ b/Cargo.nix @@ -216,9 +216,9 @@ rec { }; "annotate-snippets" = rec { crateName = "annotate-snippets"; - version = "0.12.16"; + version = "0.12.17"; edition = "2024"; - sha256 = "1w8kdyj2fh4n666wvd1krj2zcyjls9vlqrmpslx1yr5w0lcaa4gj"; + sha256 = "0xm1whl8hwqmihg1n6zwwxq1ysrq9b17hfvcy41wcqc5mfjv19dj"; libName = "annotate_snippets"; dependencies = [ { @@ -825,14 +825,13 @@ rec { }; "base16ct" = rec { crateName = "base16ct"; - version = "0.2.0"; - edition = "2021"; - sha256 = "1kylrjhdzk7qpknrvlphw8ywdnvvg39dizw9622w3wk5xba04zsc"; + version = "1.0.0"; + edition = "2024"; + sha256 = "1xi6jy6y08hbxfy14pxjlxcggl9kfsvsn3jbyyk7lii4ss878c7x"; authors = [ "RustCrypto Developers" ]; features = { - "std" = [ "alloc" ]; }; resolvedDefaultFeatures = [ "alloc" ]; }; @@ -909,20 +908,22 @@ rec { }; "block-buffer" = rec { crateName = "block-buffer"; - version = "0.10.4"; - edition = "2018"; - sha256 = "0w9sa2ypmrsqqvc20nhwr75wbb5cjr4kkyhpjm1z1lv2kdicfy1h"; + version = "0.12.1"; + edition = "2024"; + sha256 = "1ak0cvmxz3yifqmzv6aba9606brsz7d5g3piv5xdcvjsx7dwgxnj"; libName = "block_buffer"; authors = [ "RustCrypto Developers" ]; dependencies = [ { - name = "generic-array"; - packageId = "generic-array"; + name = "hybrid-array"; + packageId = "hybrid-array"; } ]; - + features = { + "zeroize" = [ "dep:zeroize" ]; + }; }; "built" = rec { crateName = "built"; @@ -990,9 +991,9 @@ rec { }; "cc" = rec { crateName = "cc"; - version = "1.9.0"; + version = "1.10.0"; edition = "2021"; - sha256 = "1pz4mvzdqmskrkiyp7hzvmqfnfqnx92a764y5zmlj975r1xgcyw7"; + sha256 = "185yfn6np0m5x7hz1q7qf595sqzbbs2vc9dshxhssh1ydvx5bq46"; dependencies = [ { name = "find-msvc-tools"; @@ -1050,7 +1051,7 @@ rec { } { name = "cpufeatures"; - packageId = "cpufeatures 0.3.1"; + packageId = "cpufeatures"; target = { target, features }: (("x86_64" == target."arch" or null) || ("x86" == target."arch" or null)); } { @@ -1238,6 +1239,16 @@ rec { edition = "2024"; sha256 = "11k4m4ngn39iz39lnq6nn6kyxzp62mnm1d86qfad3q0vlk33n4qw"; + }; + "cmov" = rec { + crateName = "cmov"; + version = "0.5.4"; + edition = "2024"; + sha256 = "0yh22sqdvcdrfbhvnja4kaq5dyklpb4s70w5r6rplfdw4jna17hc"; + authors = [ + "RustCrypto Developers" + ]; + }; "colorchoice" = rec { crateName = "colorchoice"; @@ -1295,9 +1306,9 @@ rec { }; "const-oid" = rec { crateName = "const-oid"; - version = "0.9.6"; - edition = "2021"; - sha256 = "1y0jnqaq7p2wvspnx7qj76m7hjcqpz73qzvr9l2p9n2s51vr6if2"; + version = "0.10.2"; + edition = "2024"; + sha256 = "0p7m286mp8aai4sa72g7ji6qm0d4ns8wg4i4b2hj9p9615zm3vx6"; libName = "const_oid"; authors = [ "RustCrypto Developers" @@ -1305,13 +1316,13 @@ rec { features = { "arbitrary" = [ "dep:arbitrary" ]; }; - resolvedDefaultFeatures = [ "db" "std" ]; + resolvedDefaultFeatures = [ "db" ]; }; "const_format" = rec { crateName = "const_format"; - version = "0.2.36"; + version = "0.2.37"; edition = "2021"; - sha256 = "07ncczs8yndga2f8p4386c827l4fxwzl0pbwp7ijnhcsmlbsd0a4"; + sha256 = "0m04hhk72casbbqixqg4xm6a86spl0saci1mj9cqci35d56wppm3"; authors = [ "rodrimati1992 " ]; @@ -1348,9 +1359,9 @@ rec { }; "const_format_proc_macros" = rec { crateName = "const_format_proc_macros"; - version = "0.2.34"; + version = "0.2.37"; edition = "2021"; - sha256 = "0i3pxxcl4xvwq4mlfg3csb4j0n6v0mhj07p6yk0vlvdirznc4mqx"; + sha256 = "0ndn186d13yv97fbry163bacz9mz0j66hnyb11pm0hm6d415f6wl"; procMacro = true; authors = [ "rodrimati1992 " @@ -1448,43 +1459,17 @@ rec { }; resolvedDefaultFeatures = [ "default" ]; }; - "cpufeatures 0.2.17" = rec { - crateName = "cpufeatures"; - version = "0.2.17"; - edition = "2018"; - sha256 = "10023dnnaghhdl70xcds12fsx2b966sxbxjq5sxs49mvxqw5ivar"; + "cpubits" = rec { + crateName = "cpubits"; + version = "0.1.1"; + edition = "2024"; + sha256 = "1bh6rvanxm00myf1rmnh44hq2jdxn69971c92s4klz0k76f5zf0m"; authors = [ "RustCrypto Developers" ]; - dependencies = [ - { - name = "libc"; - packageId = "libc"; - usesDefaultFeatures = false; - target = { target, features }: (target.name == "aarch64-linux-android"); - } - { - name = "libc"; - packageId = "libc"; - usesDefaultFeatures = false; - target = { target, features }: (("aarch64" == target."arch" or null) && ("linux" == target."os" or null)); - } - { - name = "libc"; - packageId = "libc"; - usesDefaultFeatures = false; - target = { target, features }: (("aarch64" == target."arch" or null) && ("apple" == target."vendor" or null)); - } - { - name = "libc"; - packageId = "libc"; - usesDefaultFeatures = false; - target = { target, features }: (("loongarch64" == target."arch" or null) && ("linux" == target."os" or null)); - } - ]; }; - "cpufeatures 0.3.1" = rec { + "cpufeatures" = rec { crateName = "cpufeatures"; version = "0.3.1"; edition = "2024"; @@ -1522,9 +1507,9 @@ rec { }; "crc32fast" = rec { crateName = "crc32fast"; - version = "1.5.2"; + version = "1.5.3"; edition = "2021"; - sha256 = "0y0f955n2hr5a8rd9nw9sr23nhjc42ddx3bjc47dnlmqssgpk9q1"; + sha256 = "0m907hccpnpmr4x87ggcq8n5zd3w1d5sqs07q81dqp848kl0d88b"; authors = [ "Sam Rijs " "Alex Crichton " @@ -1573,27 +1558,54 @@ rec { }; "crypto-bigint" = rec { crateName = "crypto-bigint"; - version = "0.5.5"; - edition = "2021"; - sha256 = "0xmbdff3g6ii5sbxjxc31xfkv9lrmyril4arh3dzckd4gjsjzj8d"; + version = "0.7.10"; + edition = "2024"; + sha256 = "04dyl8pzc00l7bmsa3br86dczs45hwhkw7wjzg9dl0xs9jv5q0ww"; libName = "crypto_bigint"; authors = [ "RustCrypto Developers" ]; dependencies = [ { - name = "generic-array"; - packageId = "generic-array"; + name = "cpubits"; + packageId = "cpubits"; + } + { + name = "ctutils"; + packageId = "ctutils"; + } + { + name = "getrandom"; + packageId = "getrandom 0.4.3"; + optional = true; + features = [ "sys_rng" ]; + } + { + name = "hybrid-array"; + packageId = "hybrid-array"; optional = true; } + { + name = "num-traits"; + packageId = "num-traits"; + usesDefaultFeatures = false; + } { name = "rand_core"; - packageId = "rand_core 0.6.4"; + packageId = "rand_core 0.10.1"; + optional = true; + usesDefaultFeatures = false; + } + { + name = "serdect"; + packageId = "serdect"; optional = true; + usesDefaultFeatures = false; } { name = "subtle"; packageId = "subtle"; + optional = true; usesDefaultFeatures = false; } { @@ -1606,48 +1618,120 @@ rec { devDependencies = [ { name = "rand_core"; - packageId = "rand_core 0.6.4"; - features = [ "std" ]; + packageId = "rand_core 0.10.1"; } ]; features = { "alloc" = [ "serdect?/alloc" ]; - "default" = [ "rand" ]; - "der" = [ "dep:der" ]; - "generic-array" = [ "dep:generic-array" ]; - "rand" = [ "rand_core/std" ]; + "default" = [ "rand_core" ]; + "der" = [ "dep:der" "hybrid-array" ]; + "getrandom" = [ "dep:getrandom" "rand_core" ]; + "hybrid-array" = [ "dep:hybrid-array" ]; "rand_core" = [ "dep:rand_core" ]; "rlp" = [ "dep:rlp" ]; "serde" = [ "dep:serdect" ]; + "subtle" = [ "dep:subtle" "ctutils/subtle" "hybrid-array?/subtle" ]; "zeroize" = [ "dep:zeroize" ]; }; - resolvedDefaultFeatures = [ "generic-array" "rand_core" "zeroize" ]; + resolvedDefaultFeatures = [ "alloc" "getrandom" "hybrid-array" "rand_core" "subtle" "zeroize" ]; }; "crypto-common" = rec { crateName = "crypto-common"; - version = "0.1.6"; - edition = "2018"; - sha256 = "1cvby95a6xg7kxdz5ln3rl9xh66nz66w46mm3g56ri1z5x815yqv"; + version = "0.2.2"; + edition = "2024"; + sha256 = "0lql5wjlrjkd3r0w32rwbgqfmgg84ms3h65ldnlckmkc3nb4qvnf"; libName = "crypto_common"; authors = [ "RustCrypto Developers" ]; dependencies = [ { - name = "generic-array"; - packageId = "generic-array"; - features = [ "more_lengths" ]; + name = "getrandom"; + packageId = "getrandom 0.4.3"; + optional = true; + features = [ "sys_rng" ]; } { - name = "typenum"; - packageId = "typenum"; + name = "hybrid-array"; + packageId = "hybrid-array"; + } + { + name = "rand_core"; + packageId = "rand_core 0.10.1"; + optional = true; } ]; features = { - "getrandom" = [ "rand_core/getrandom" ]; + "getrandom" = [ "rand_core" "dep:getrandom" ]; "rand_core" = [ "dep:rand_core" ]; + "zeroize" = [ "hybrid-array/zeroize" ]; }; - resolvedDefaultFeatures = [ "std" ]; + resolvedDefaultFeatures = [ "getrandom" "rand_core" ]; + }; + "crypto-primes" = rec { + crateName = "crypto-primes"; + version = "0.7.2"; + edition = "2024"; + sha256 = "13ygy2rrp7dicc4lmj01744y8hfjhfyr99pa9ymbp7n674daacrn"; + libName = "crypto_primes"; + dependencies = [ + { + name = "crypto-bigint"; + packageId = "crypto-bigint"; + usesDefaultFeatures = false; + features = [ "rand_core" ]; + } + { + name = "rand_core"; + packageId = "rand_core 0.10.1"; + usesDefaultFeatures = false; + } + ]; + devDependencies = [ + { + name = "crypto-bigint"; + packageId = "crypto-bigint"; + usesDefaultFeatures = false; + features = [ "alloc" ]; + } + ]; + features = { + "default" = [ "alloc" ]; + "glass_pumpkin" = [ "dep:glass_pumpkin" ]; + "multicore" = [ "rayon" ]; + "openssl" = [ "dep:openssl" ]; + "rayon" = [ "dep:rayon" ]; + "rug" = [ "dep:rug" ]; + "tests-all" = [ "tests-openssl" "tests-gmp" "tests-exhaustive" "tests-glass-pumpkin" ]; + "tests-glass-pumpkin" = [ "glass_pumpkin" ]; + "tests-gmp" = [ "rug/std" ]; + "tests-openssl" = [ "openssl" ]; + }; + }; + "ctutils" = rec { + crateName = "ctutils"; + version = "0.4.7"; + edition = "2024"; + sha256 = "12l2ck796m702jbjfr5gbc5r1mip09mlnnw7b7dskn4ndzynydx2"; + authors = [ + "RustCrypto Developers" + ]; + dependencies = [ + { + name = "cmov"; + packageId = "cmov"; + } + { + name = "subtle"; + packageId = "subtle"; + optional = true; + usesDefaultFeatures = false; + } + ]; + features = { + "subtle" = [ "dep:subtle" ]; + }; + resolvedDefaultFeatures = [ "subtle" ]; }; "darling 0.23.0" = rec { crateName = "darling"; @@ -1932,9 +2016,9 @@ rec { }; "der" = rec { crateName = "der"; - version = "0.7.10"; - edition = "2021"; - sha256 = "1jyxacyxdx6mxbkfw99jz59dzvcd9k17rq01a7xvn1dr6wl87hg7"; + version = "0.8.3"; + edition = "2024"; + sha256 = "01703q9nh4vlswvm7hbjknvhjd589apzdz0jdrx452zbiw86m6ba"; authors = [ "RustCrypto Developers" ]; @@ -1969,10 +2053,11 @@ rec { ]; features = { "alloc" = [ "zeroize?/alloc" ]; - "arbitrary" = [ "dep:arbitrary" "const-oid?/arbitrary" "std" ]; + "arbitrary" = [ "dep:arbitrary" "dep:derive_arbitrary" "const-oid?/arbitrary" "std" ]; "bytes" = [ "dep:bytes" "alloc" ]; "derive" = [ "dep:der_derive" ]; "flagset" = [ "dep:flagset" ]; + "heapless" = [ "dep:heapless" ]; "oid" = [ "dep:const-oid" ]; "pem" = [ "dep:pem-rfc7468" "alloc" "zeroize" ]; "std" = [ "alloc" ]; @@ -1983,9 +2068,9 @@ rec { }; "der_derive" = rec { crateName = "der_derive"; - version = "0.7.3"; - edition = "2021"; - sha256 = "065d2wy7zd0dank99hh58l5x7lv50hxnr7j6f3sphlb7i4ihjd40"; + version = "0.8.0"; + edition = "2024"; + sha256 = "00wr83bxdf1jk7rmy6986qywcw67b92cd779cndxwvv35ln0wq2r"; procMacro = true; authors = [ "RustCrypto Developers" @@ -2129,9 +2214,9 @@ rec { }; "digest" = rec { crateName = "digest"; - version = "0.10.7"; - edition = "2018"; - sha256 = "14p2n6ih29x81akj097lvz7wi9b6b9hvls0lwrv7b6xwyy0s5ncy"; + version = "0.11.3"; + edition = "2024"; + sha256 = "1hnmhd4rkybr11292w42pz9ppzx1h49glrhqg107k4s1b2xnvpgi"; authors = [ "RustCrypto Developers" ]; @@ -2149,28 +2234,26 @@ rec { { name = "crypto-common"; packageId = "crypto-common"; + rename = "common"; } { - name = "subtle"; - packageId = "subtle"; + name = "ctutils"; + packageId = "ctutils"; optional = true; - usesDefaultFeatures = false; } ]; features = { "blobby" = [ "dep:blobby" ]; - "block-buffer" = [ "dep:block-buffer" ]; - "const-oid" = [ "dep:const-oid" ]; - "core-api" = [ "block-buffer" ]; - "default" = [ "core-api" ]; + "block-api" = [ "dep:block-buffer" ]; + "default" = [ "block-api" ]; "dev" = [ "blobby" ]; - "mac" = [ "subtle" ]; - "oid" = [ "const-oid" ]; - "rand_core" = [ "crypto-common/rand_core" ]; - "std" = [ "alloc" "crypto-common/std" ]; - "subtle" = [ "dep:subtle" ]; + "getrandom" = [ "common/getrandom" "rand_core" ]; + "mac" = [ "dep:ctutils" ]; + "oid" = [ "dep:const-oid" ]; + "rand_core" = [ "common/rand_core" ]; + "zeroize" = [ "dep:zeroize" "block-buffer?/zeroize" ]; }; - resolvedDefaultFeatures = [ "alloc" "block-buffer" "const-oid" "core-api" "default" "mac" "oid" "std" "subtle" ]; + resolvedDefaultFeatures = [ "alloc" "block-api" "default" "mac" "oid" ]; }; "displaydoc" = rec { crateName = "displaydoc"; @@ -2261,9 +2344,9 @@ rec { }; "ecdsa" = rec { crateName = "ecdsa"; - version = "0.16.9"; - edition = "2021"; - sha256 = "1jhb0bcbkaz4001sdmfyv8ajrv8a1cg7z7aa5myrd4jjbhmz69zf"; + version = "0.17.0"; + edition = "2024"; + sha256 = "1q3alixk3kpqlk610ima509gk6lmpbgxha4p6a2p0xjcq97ils60"; authors = [ "RustCrypto Developers" ]; @@ -2284,7 +2367,7 @@ rec { name = "elliptic-curve"; packageId = "elliptic-curve"; usesDefaultFeatures = false; - features = [ "digest" "sec1" ]; + features = [ "sec1" ]; } { name = "rfc6979"; @@ -2303,6 +2386,11 @@ rec { optional = true; usesDefaultFeatures = false; } + { + name = "zeroize"; + packageId = "zeroize"; + usesDefaultFeatures = false; + } ]; devDependencies = [ { @@ -2313,24 +2401,21 @@ rec { } ]; features = { + "algorithm" = [ "dep:rfc6979" "digest" "elliptic-curve/arithmetic" ]; "alloc" = [ "elliptic-curve/alloc" "signature/alloc" "spki/alloc" ]; - "arithmetic" = [ "elliptic-curve/arithmetic" ]; "default" = [ "digest" ]; "der" = [ "dep:der" ]; - "dev" = [ "arithmetic" "digest" "elliptic-curve/dev" "hazmat" ]; - "digest" = [ "dep:digest" "signature/digest" ]; + "dev" = [ "algorithm" "digest/dev" "elliptic-curve/dev" ]; + "digest" = [ "dep:digest" "elliptic-curve/digest" "signature/digest" ]; + "getrandom" = [ "elliptic-curve/getrandom" ]; "pem" = [ "elliptic-curve/pem" "pkcs8" ]; - "pkcs8" = [ "digest" "elliptic-curve/pkcs8" "der" ]; - "rfc6979" = [ "dep:rfc6979" ]; - "serde" = [ "elliptic-curve/serde" "serdect" ]; - "serdect" = [ "dep:serdect" ]; + "pkcs8" = [ "der" "digest" "elliptic-curve/pkcs8" ]; + "serde" = [ "dep:serdect" "elliptic-curve/serde" "pkcs8" ]; "sha2" = [ "dep:sha2" ]; - "signing" = [ "arithmetic" "digest" "hazmat" "rfc6979" ]; "spki" = [ "dep:spki" ]; - "std" = [ "alloc" "elliptic-curve/std" "signature/std" ]; - "verifying" = [ "arithmetic" "digest" "hazmat" ]; + "std" = [ "alloc" "elliptic-curve/std" ]; }; - resolvedDefaultFeatures = [ "alloc" "arithmetic" "default" "der" "digest" "hazmat" "pem" "pkcs8" "rfc6979" "signing" "spki" "std" "verifying" ]; + resolvedDefaultFeatures = [ "algorithm" "alloc" "default" "der" "digest" "pem" "pkcs8" "spki" "std" ]; }; "educe 0.6.0" = rec { crateName = "educe"; @@ -2424,9 +2509,9 @@ rec { }; "elliptic-curve" = rec { crateName = "elliptic-curve"; - version = "0.13.8"; - edition = "2021"; - sha256 = "0ixx4brgnzi61z29r3g1606nh2za88hzyz8c5r3p6ydzhqq09rmm"; + version = "0.14.3"; + edition = "2024"; + sha256 = "0z4wbskrlrv590040zv9kv6dac1skvb6rbw9fcsa4x4dw7kkf3wh"; libName = "elliptic_curve"; authors = [ "RustCrypto Developers" @@ -2439,8 +2524,15 @@ rec { { name = "crypto-bigint"; packageId = "crypto-bigint"; + rename = "bigint"; usesDefaultFeatures = false; - features = [ "rand_core" "generic-array" "zeroize" ]; + features = [ "hybrid-array" "rand_core" "subtle" "zeroize" ]; + } + { + name = "crypto-common"; + packageId = "crypto-common"; + rename = "common"; + features = [ "rand_core" ]; } { name = "digest"; @@ -2453,18 +2545,19 @@ rec { optional = true; usesDefaultFeatures = false; } - { - name = "generic-array"; - packageId = "generic-array"; - usesDefaultFeatures = false; - features = [ "zeroize" ]; - } { name = "group"; packageId = "group"; optional = true; usesDefaultFeatures = false; } + { + name = "hybrid-array"; + packageId = "hybrid-array"; + rename = "array"; + usesDefaultFeatures = false; + features = [ "zeroize" ]; + } { name = "pem-rfc7468"; packageId = "pem-rfc7468"; @@ -2479,14 +2572,14 @@ rec { } { name = "rand_core"; - packageId = "rand_core 0.6.4"; + packageId = "rand_core 0.10.1"; usesDefaultFeatures = false; } { name = "sec1"; packageId = "sec1"; optional = true; - features = [ "subtle" "zeroize" ]; + features = [ "ctutils" "subtle" "zeroize" ]; } { name = "subtle"; @@ -2500,25 +2593,22 @@ rec { } ]; features = { - "alloc" = [ "base16ct/alloc" "ff?/alloc" "group?/alloc" "pkcs8?/alloc" "sec1?/alloc" "zeroize/alloc" ]; + "alloc" = [ "base16ct/alloc" "ff?/alloc" "group?/alloc" "array/alloc" "pkcs8?/alloc" "sec1?/alloc" "zeroize/alloc" ]; "arithmetic" = [ "group" ]; - "bits" = [ "arithmetic" "ff/bits" "dep:tap" ]; "default" = [ "arithmetic" ]; "dev" = [ "arithmetic" "dep:hex-literal" "pem" "pkcs8" ]; "digest" = [ "dep:digest" ]; "ecdh" = [ "arithmetic" "digest" "dep:hkdf" ]; "ff" = [ "dep:ff" ]; + "getrandom" = [ "arithmetic" "bigint/getrandom" "common/getrandom" ]; "group" = [ "dep:group" "ff" ]; - "hash2curve" = [ "arithmetic" "digest" ]; - "jwk" = [ "dep:base64ct" "dep:serde_json" "alloc" "serde" "zeroize/alloc" ]; - "pem" = [ "dep:pem-rfc7468" "alloc" "arithmetic" "pkcs8" "sec1/pem" ]; + "pem" = [ "dep:pem-rfc7468" "alloc" "arithmetic" "pkcs8/pem" "sec1/pem" ]; "pkcs8" = [ "dep:pkcs8" "sec1" ]; "sec1" = [ "dep:sec1" ]; "serde" = [ "dep:serdect" "alloc" "pkcs8" "sec1/serde" ]; - "std" = [ "alloc" "rand_core/std" "pkcs8?/std" "sec1?/std" ]; - "voprf" = [ "digest" ]; + "std" = [ "alloc" "pkcs8?/std" "sec1?/std" ]; }; - resolvedDefaultFeatures = [ "alloc" "arithmetic" "digest" "ff" "group" "hazmat" "pem" "pkcs8" "sec1" "std" ]; + resolvedDefaultFeatures = [ "alloc" "arithmetic" "digest" "ff" "getrandom" "group" "pem" "pkcs8" "sec1" "std" ]; }; "encoding_rs" = rec { crateName = "encoding_rs"; @@ -2782,9 +2872,9 @@ rec { }; "ff" = rec { crateName = "ff"; - version = "0.13.1"; + version = "0.14.0"; edition = "2021"; - sha256 = "14v3bc6q24gbcjnxjfbq2dddgf4as2z2gd4mj35gjlrncpxhpdf0"; + sha256 = "17s889wpzi2dp924bnxhznkbm44lp23nqv4g32phxyx9jamqdxm1"; authors = [ "Sean Bowe " "Jack Grigg " @@ -2792,7 +2882,7 @@ rec { dependencies = [ { name = "rand_core"; - packageId = "rand_core 0.6.4"; + packageId = "rand_core 0.10.1"; usesDefaultFeatures = false; } { @@ -2803,12 +2893,11 @@ rec { } ]; features = { - "bits" = [ "bitvec" ]; + "bits" = [ "bitvec" "ff_derive?/bits" ]; "bitvec" = [ "dep:bitvec" ]; "byteorder" = [ "dep:byteorder" ]; "default" = [ "bits" "std" ]; "derive" = [ "byteorder" "ff_derive" ]; - "derive_bits" = [ "bits" "ff_derive/bits" ]; "ff_derive" = [ "dep:ff_derive" ]; "std" = [ "alloc" ]; }; @@ -3251,40 +3340,6 @@ rec { }; resolvedDefaultFeatures = [ "alloc" "async-await" "async-await-macro" "channel" "compat" "default" "futures-channel" "futures-io" "futures-macro" "futures-sink" "futures_01" "io" "libc" "memchr" "sink" "slab" "std" ]; }; - "generic-array" = rec { - crateName = "generic-array"; - version = "0.14.9"; - edition = "2015"; - sha256 = "1wpdn5ngpqkkyyibbg7wa4cfg0y8zjc57spaia2h47jkk0qp9djb"; - libName = "generic_array"; - authors = [ - "BartÅ‚omiej KamiÅ„ski " - "Aaron Trent " - ]; - dependencies = [ - { - name = "typenum"; - packageId = "typenum"; - } - { - name = "zeroize"; - packageId = "zeroize"; - optional = true; - usesDefaultFeatures = false; - } - ]; - buildDependencies = [ - { - name = "version_check"; - packageId = "version_check"; - } - ]; - features = { - "serde" = [ "dep:serde" ]; - "zeroize" = [ "dep:zeroize" ]; - }; - resolvedDefaultFeatures = [ "more_lengths" "zeroize" ]; - }; "getrandom 0.2.17" = rec { crateName = "getrandom"; version = "0.2.17"; @@ -3319,7 +3374,6 @@ rec { "rustc-dep-of-std" = [ "compiler_builtins" "core" "libc/rustc-dep-of-std" "wasi/rustc-dep-of-std" ]; "wasm-bindgen" = [ "dep:wasm-bindgen" ]; }; - resolvedDefaultFeatures = [ "std" ]; }; "getrandom 0.3.4" = rec { crateName = "getrandom"; @@ -3607,9 +3661,9 @@ rec { }; "group" = rec { crateName = "group"; - version = "0.13.0"; + version = "0.14.0"; edition = "2021"; - sha256 = "0qqs2p5vqnv3zvq9mfjkmw3qlvgqb0c3cm6p33srkh7pc9sfzygh"; + sha256 = "1x7m980b0m82d012mmika67hqpgq7z6pq3as7xx5nv10lp3s3lbz"; authors = [ "Sean Bowe " "Jack Grigg " @@ -3622,7 +3676,7 @@ rec { } { name = "rand_core"; - packageId = "rand_core 0.6.4"; + packageId = "rand_core 0.10.1"; usesDefaultFeatures = false; } { @@ -3783,9 +3837,9 @@ rec { }; "hmac" = rec { crateName = "hmac"; - version = "0.12.1"; - edition = "2018"; - sha256 = "0pmbr069sfg76z7wsssfk5ddcqd9ncp79fyz6zcm6yn115yc6jbc"; + version = "0.13.0"; + edition = "2024"; + sha256 = "0gw6avmix6ah63lf70dapxhml4dlcakl9f2lnm6b0hdf6abvq0v3"; authors = [ "RustCrypto Developers" ]; @@ -3804,9 +3858,8 @@ rec { } ]; features = { - "std" = [ "digest/std" ]; + "zeroize" = [ "digest/zeroize" ]; }; - resolvedDefaultFeatures = [ "reset" ]; }; "hostname" = rec { crateName = "hostname"; @@ -3952,6 +4005,46 @@ rec { features = { }; }; + "hybrid-array" = rec { + crateName = "hybrid-array"; + version = "0.4.15"; + edition = "2024"; + sha256 = "05wsyp2n5gyf49qk51mblj9qyb15aay74m6fwmf74mpv1pqn9y17"; + libName = "hybrid_array"; + authors = [ + "RustCrypto Developers" + ]; + dependencies = [ + { + name = "subtle"; + packageId = "subtle"; + optional = true; + usesDefaultFeatures = false; + features = [ "const-generics" ]; + } + { + name = "typenum"; + packageId = "typenum"; + features = [ "const-generics" ]; + } + { + name = "zeroize"; + packageId = "zeroize"; + optional = true; + usesDefaultFeatures = false; + } + ]; + features = { + "arbitrary" = [ "dep:arbitrary" ]; + "bytemuck" = [ "dep:bytemuck" ]; + "ctutils" = [ "dep:ctutils" ]; + "serde" = [ "dep:serde" ]; + "subtle" = [ "dep:subtle" ]; + "zerocopy" = [ "dep:zerocopy" ]; + "zeroize" = [ "dep:zeroize" ]; + }; + resolvedDefaultFeatures = [ "alloc" "subtle" "zeroize" ]; + }; "hyper" = rec { crateName = "hyper"; version = "1.12.0"; @@ -4399,9 +4492,9 @@ rec { }; "icu_collections" = rec { crateName = "icu_collections"; - version = "2.3.0"; + version = "2.4.0"; edition = "2024"; - sha256 = "04x59h6vdq0cnpippim1nr471ivlsnnn470sj1d5v864h48d4s7s"; + sha256 = "1p85w6wf2bfyv1ffbgzln8n440nczv8kw9k3iknhy56kl110l2gy"; authors = [ "The ICU4X Project Developers" ]; @@ -4449,9 +4542,9 @@ rec { }; "icu_locale_core" = rec { crateName = "icu_locale_core"; - version = "2.3.0"; + version = "2.4.0"; edition = "2024"; - sha256 = "1sqdj16wwl7h9y6r7j394av4kpdb7zryz9h169ffwbm9imc2hvnm"; + sha256 = "1h44m6jbiff814wpllybb93010nhlb7l28acvk82hrbwq5brpli5"; authors = [ "The ICU4X Project Developers" ]; @@ -4501,9 +4594,9 @@ rec { }; "icu_normalizer" = rec { crateName = "icu_normalizer"; - version = "2.3.0"; + version = "2.4.0"; edition = "2024"; - sha256 = "0vv43ixk2wmbxrx7kl33cwkhx1wdyb1q3pa18qkyshan4dgwzy8j"; + sha256 = "16f5hzppvfl136p72ikfdpblljnqjilan8vzzs3mq83g9263njj0"; authors = [ "The ICU4X Project Developers" ]; @@ -4555,9 +4648,9 @@ rec { }; "icu_normalizer_data" = rec { crateName = "icu_normalizer_data"; - version = "2.3.0"; + version = "2.4.0"; edition = "2024"; - sha256 = "1811h0ppb7lwq1q2492p5x6lcmlwmhbmkf69fhyvzcz0scgdlqqm"; + sha256 = "1g4cir7jji6wlv98rkmrqv5a3jz9n46f5jd0gyizfhblzf5hiw10"; authors = [ "The ICU4X Project Developers" ]; @@ -4565,9 +4658,9 @@ rec { }; "icu_properties" = rec { crateName = "icu_properties"; - version = "2.3.0"; + version = "2.4.0"; edition = "2024"; - sha256 = "0j51hi8qgf0l6a7qzvnwsc61598w2fpnsklicld6ci9immva4z3y"; + sha256 = "17rpgbrwk5963yaqizl2xq3przhxdi1qdgwqz1y8y5an3jckva1f"; authors = [ "The ICU4X Project Developers" ]; @@ -4626,9 +4719,9 @@ rec { }; "icu_properties_data" = rec { crateName = "icu_properties_data"; - version = "2.3.0"; + version = "2.4.0"; edition = "2024"; - sha256 = "1akw1gp5rcaiz377xzsnkx8f92qax4kh3lfn9y4rcjj6q4wg1475"; + sha256 = "1kyzmmgm1jqlfcpqr3nc0wqvnhz7a21khq81wlzicayhhapjk3xr"; authors = [ "The ICU4X Project Developers" ]; @@ -4636,9 +4729,9 @@ rec { }; "icu_provider" = rec { crateName = "icu_provider"; - version = "2.3.1"; + version = "2.4.0"; edition = "2024"; - sha256 = "0wrydhwprwgyka3r3sw6276syjnlw6fpqr2zsm2srvxv7afvnyyj"; + sha256 = "05458rwq7bnw05z1b7dfiyda0wdr56rr0481izp8ii9naqqrjc21"; authors = [ "The ICU4X Project Developers" ]; @@ -5263,9 +5356,9 @@ rec { }; "js-sys" = rec { crateName = "js-sys"; - version = "0.3.106"; + version = "0.3.107"; edition = "2021"; - sha256 = "1icwmpjw54lb7vg5926k5y4y5jbiih0zxhwgjwnzn475v90xk0vq"; + sha256 = "0fjdb084avbdxqb6n14lzszwn91wg88npasfym7bz2q9ahhrvh4d"; libName = "js_sys"; authors = [ "The wasm-bindgen Developers" @@ -5471,8 +5564,8 @@ rec { workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech//operator-rs.git"; - rev = "033abc201e6504b5639ba2f2c726e5e465af5a07"; - sha256 = "1r8yjfwvvyf16ji0a98vmlb1rnf67lvqxwqgn00b2k0rada60idj"; + rev = "80c75a3aebf48af8bb793ea313e83440d6cee949"; + sha256 = "0jha2kdn4hnndrhjqgh99cgmcgk992vg2bg1mrkfmfik6x4icdha"; }; libName = "k8s_version"; authors = [ @@ -6114,20 +6207,10 @@ rec { authors = [ "Marvin Löbel " ]; - dependencies = [ - { - name = "spin"; - packageId = "spin"; - optional = true; - usesDefaultFeatures = false; - features = [ "once" ]; - } - ]; features = { "spin" = [ "dep:spin" ]; "spin_no_std" = [ "spin" ]; }; - resolvedDefaultFeatures = [ "spin" "spin_no_std" ]; }; "libc" = rec { crateName = "libc"; @@ -6186,23 +6269,6 @@ rec { "zlib-ng-compat" = [ "libz-sys/zlib-ng" "libssh2-sys?/zlib-ng-compat" ]; }; }; - "libm" = rec { - crateName = "libm"; - version = "0.2.16"; - edition = "2021"; - sha256 = "10brh0a3qjmbzkr5mf5xqi887nhs5y9layvnki89ykz9xb1wxlmn"; - authors = [ - "Alex Crichton " - "Amanieu d'Antras " - "Jorge Aparicio " - "Trevor Gross " - ]; - features = { - "default" = [ "arch" ]; - "unstable" = [ "unstable-intrinsics" "unstable-float" ]; - }; - resolvedDefaultFeatures = [ "arch" "default" ]; - }; "libyaml-rs" = rec { crateName = "libyaml-rs"; version = "0.3.0"; @@ -6218,10 +6284,10 @@ rec { }; "libz-sys" = rec { crateName = "libz-sys"; - version = "1.1.30"; + version = "1.1.31"; edition = "2018"; links = "z"; - sha256 = "06fy8rg2grraaf222846pq55akl6sslmdjj6zla346dzdlza447p"; + sha256 = "1cjw8nisxy5iv8yms7dsxwhclb26djl38n6xq4nmlqxxra73087z"; libName = "libz_sys"; authors = [ "Alex Crichton " @@ -6505,81 +6571,6 @@ rec { }; resolvedDefaultFeatures = [ "default" "std" ]; }; - "num-bigint-dig" = rec { - crateName = "num-bigint-dig"; - version = "0.8.6"; - edition = "2021"; - sha256 = "1dxh3d8pzjc5k0kpy8gy2qhhhqs7zw8a7m564zl3ib8gcjkdsqg6"; - libName = "num_bigint_dig"; - authors = [ - "dignifiedquire " - "The Rust Project Developers" - ]; - dependencies = [ - { - name = "lazy_static"; - packageId = "lazy_static"; - usesDefaultFeatures = false; - features = [ "spin_no_std" ]; - } - { - name = "libm"; - packageId = "libm"; - } - { - name = "num-integer"; - packageId = "num-integer"; - usesDefaultFeatures = false; - features = [ "i128" ]; - } - { - name = "num-iter"; - packageId = "num-iter"; - usesDefaultFeatures = false; - } - { - name = "num-traits"; - packageId = "num-traits"; - usesDefaultFeatures = false; - features = [ "i128" ]; - } - { - name = "rand"; - packageId = "rand 0.8.8"; - optional = true; - usesDefaultFeatures = false; - } - { - name = "smallvec"; - packageId = "smallvec"; - usesDefaultFeatures = false; - } - { - name = "zeroize"; - packageId = "zeroize"; - optional = true; - usesDefaultFeatures = false; - } - ]; - devDependencies = [ - { - name = "rand"; - packageId = "rand 0.8.8"; - features = [ "small_rng" ]; - } - ]; - features = { - "arbitrary" = [ "dep:arbitrary" ]; - "default" = [ "std" "u64_digit" ]; - "fuzz" = [ "arbitrary" "smallvec/arbitrary" ]; - "prime" = [ "rand/std_rng" ]; - "rand" = [ "dep:rand" ]; - "serde" = [ "dep:serde" ]; - "std" = [ "num-integer/std" "num-traits/std" "smallvec/write" "rand/std" "serde/std" ]; - "zeroize" = [ "dep:zeroize" ]; - }; - resolvedDefaultFeatures = [ "i128" "prime" "rand" "u64_digit" "zeroize" ]; - }; "num-conv" = rec { crateName = "num-conv"; version = "0.2.2"; @@ -6591,57 +6582,6 @@ rec { ]; }; - "num-integer" = rec { - crateName = "num-integer"; - version = "0.1.47"; - edition = "2018"; - sha256 = "02z1p3azy6p10n99skrab4a6hhfd4amf2i9gm8sxqd1p9dfxkqkw"; - libName = "num_integer"; - authors = [ - "The Rust Project Developers" - ]; - dependencies = [ - { - name = "num-traits"; - packageId = "num-traits"; - usesDefaultFeatures = false; - features = [ "i128" ]; - } - ]; - features = { - "default" = [ "std" ]; - "std" = [ "num-traits/std" ]; - }; - resolvedDefaultFeatures = [ "i128" ]; - }; - "num-iter" = rec { - crateName = "num-iter"; - version = "0.1.46"; - edition = "2018"; - sha256 = "12q4x0lp9l6bvsak1p5q24lvfzl99ak9vzmwhqbwksm1d6yh0a69"; - libName = "num_iter"; - authors = [ - "The Rust Project Developers" - ]; - dependencies = [ - { - name = "num-integer"; - packageId = "num-integer"; - usesDefaultFeatures = false; - features = [ "i128" ]; - } - { - name = "num-traits"; - packageId = "num-traits"; - usesDefaultFeatures = false; - features = [ "i128" ]; - } - ]; - features = { - "default" = [ "std" ]; - "std" = [ "num-integer/std" "num-traits/std" ]; - }; - }; "num-traits" = rec { crateName = "num-traits"; version = "0.2.19"; @@ -6651,13 +6591,6 @@ rec { authors = [ "The Rust Project Developers" ]; - dependencies = [ - { - name = "libm"; - packageId = "libm"; - optional = true; - } - ]; buildDependencies = [ { name = "autocfg"; @@ -6668,7 +6601,7 @@ rec { "default" = [ "std" ]; "libm" = [ "dep:libm" ]; }; - resolvedDefaultFeatures = [ "default" "i128" "libm" "std" ]; + resolvedDefaultFeatures = [ "default" "std" ]; }; "once_cell" = rec { crateName = "once_cell"; @@ -6700,9 +6633,9 @@ rec { }; "openssl-probe" = rec { crateName = "openssl-probe"; - version = "0.2.1"; + version = "0.2.2"; edition = "2021"; - sha256 = "1gpwpb7smfhkscwvbri8xzbab39wcnby1jgz1s49vf1aqgsdx1vw"; + sha256 = "1c90103d6q2qqf2ihgd9dxhczi8kk97bg52fnzb2y4sl2x0nn0vy"; libName = "openssl_probe"; authors = [ "Alex Crichton " @@ -7201,9 +7134,9 @@ rec { }; "p256" = rec { crateName = "p256"; - version = "0.13.2"; - edition = "2021"; - sha256 = "0jyd3c3k239ybs59ixpnl7dqkmm072fr1js8kh7ldx58bzc3m1n9"; + version = "0.14.0"; + edition = "2024"; + sha256 = "0appw4ifrx2zwyw2rrmb18x0qid75vvqqzhlpvdpm05w5ndj7jfj"; authors = [ "RustCrypto Developers" ]; @@ -7220,7 +7153,12 @@ rec { name = "elliptic-curve"; packageId = "elliptic-curve"; usesDefaultFeatures = false; - features = [ "hazmat" "sec1" ]; + features = [ "sec1" ]; + } + { + name = "primefield"; + packageId = "primefield"; + optional = true; } { name = "primeorder"; @@ -7242,6 +7180,10 @@ rec { usesDefaultFeatures = false; features = [ "dev" ]; } + { + name = "primefield"; + packageId = "primefield"; + } { name = "primeorder"; packageId = "primeorder"; @@ -7249,28 +7191,28 @@ rec { } ]; features = { - "alloc" = [ "ecdsa-core?/alloc" "elliptic-curve/alloc" ]; - "arithmetic" = [ "dep:primeorder" "elliptic-curve/arithmetic" ]; - "bits" = [ "arithmetic" "elliptic-curve/bits" ]; - "default" = [ "arithmetic" "ecdsa" "pem" "std" ]; - "digest" = [ "ecdsa-core/digest" "ecdsa-core/hazmat" ]; + "alloc" = [ "ecdsa-core?/alloc" "elliptic-curve/alloc" "primeorder?/alloc" ]; + "arithmetic" = [ "dep:primefield" "dep:primeorder" "elliptic-curve/arithmetic" ]; + "default" = [ "arithmetic" "ecdsa" "pem" "precomputed-tables" "std" ]; + "digest" = [ "ecdsa-core/digest" ]; "ecdh" = [ "arithmetic" "elliptic-curve/ecdh" ]; - "ecdsa" = [ "arithmetic" "ecdsa-core/signing" "ecdsa-core/verifying" "sha256" ]; + "ecdsa" = [ "arithmetic" "ecdsa-core/algorithm" "sha256" ]; "ecdsa-core" = [ "dep:ecdsa-core" ]; - "expose-field" = [ "arithmetic" ]; - "hash2curve" = [ "arithmetic" "elliptic-curve/hash2curve" ]; - "jwk" = [ "elliptic-curve/jwk" ]; + "getrandom" = [ "elliptic-curve/getrandom" ]; + "group-digest" = [ "hash2curve" "sha2" ]; + "hash2curve" = [ "arithmetic" "dep:hash2curve" "primeorder/hash2curve" ]; + "oprf" = [ "group-digest" ]; "pem" = [ "elliptic-curve/pem" "ecdsa-core/pem" "pkcs8" ]; "pkcs8" = [ "ecdsa-core?/pkcs8" "elliptic-curve/pkcs8" ]; + "precomputed-tables" = [ "arithmetic" "primeorder/basepoint-table" ]; "serde" = [ "ecdsa-core?/serde" "elliptic-curve/serde" "primeorder?/serde" "serdect" ]; "serdect" = [ "dep:serdect" ]; "sha2" = [ "dep:sha2" ]; "sha256" = [ "digest" "sha2" ]; - "std" = [ "alloc" "ecdsa-core?/std" "elliptic-curve/std" ]; + "std" = [ "alloc" "ecdsa-core?/std" "elliptic-curve/std" "getrandom" "primeorder?/std" ]; "test-vectors" = [ "dep:hex-literal" ]; - "voprf" = [ "elliptic-curve/voprf" "sha2" ]; }; - resolvedDefaultFeatures = [ "alloc" "arithmetic" "default" "digest" "ecdsa" "ecdsa-core" "pem" "pkcs8" "sha2" "sha256" "std" ]; + resolvedDefaultFeatures = [ "alloc" "arithmetic" "default" "digest" "ecdsa" "ecdsa-core" "getrandom" "pem" "pkcs8" "precomputed-tables" "sha2" "sha256" "std" ]; }; "parking" = rec { crateName = "parking"; @@ -7382,9 +7324,9 @@ rec { }; "pem-rfc7468" = rec { crateName = "pem-rfc7468"; - version = "0.7.0"; - edition = "2021"; - sha256 = "04l4852scl4zdva31c1z6jafbak0ni5pi0j38ml108zwzjdrrcw8"; + version = "1.0.0"; + edition = "2024"; + sha256 = "1nck8ig71axy21lsick2f9vcw7329mlx2hs88d382wz7w0im8c56"; libName = "pem_rfc7468"; authors = [ "RustCrypto Developers" @@ -7418,9 +7360,9 @@ rec { }; "pest" = rec { crateName = "pest"; - version = "2.9.4"; + version = "2.9.5"; edition = "2021"; - sha256 = "08xvj2lwj450ki4mmr5s369pfgk5fq6vy8kyki1b7hybm5ha8izx"; + sha256 = "0q3nkmv7947j750m63adihzynqn8mn6g096rdsriq0066lapbnx8"; authors = [ "DragoÈ™ Tiselice " ]; @@ -7431,13 +7373,8 @@ rec { optional = true; } { - name = "psm"; - packageId = "psm"; - optional = true; - } - { - name = "stacker"; - packageId = "stacker"; + name = "pest_stack_guard"; + packageId = "pest_stack_guard"; optional = true; } { @@ -7451,15 +7388,16 @@ rec { "memchr" = [ "dep:memchr" ]; "miette-error" = [ "std" "pretty-print" "dep:miette" ]; "pretty-print" = [ "dep:serde" "dep:serde_json" ]; - "std" = [ "ucd-trie/std" "dep:stacker" "dep:psm" ]; + "stack-guard" = [ "std" "pest_stack_guard/stack-guard" ]; + "std" = [ "ucd-trie/std" "dep:pest_stack_guard" ]; }; resolvedDefaultFeatures = [ "default" "memchr" "std" ]; }; "pest_derive" = rec { crateName = "pest_derive"; - version = "2.9.4"; + version = "2.9.5"; edition = "2021"; - sha256 = "0i7g26dkang3zyl0hvcfdfsaz713i77r70v0n6d53xq8fxllcgi0"; + sha256 = "1d1kv4khnw50xgb57v5n679618spmjps052jgnv68mmk3zhigai0"; procMacro = true; authors = [ "DragoÈ™ Tiselice " @@ -7485,9 +7423,9 @@ rec { }; "pest_generator" = rec { crateName = "pest_generator"; - version = "2.9.4"; + version = "2.9.5"; edition = "2021"; - sha256 = "1mflbrhm9abanrgf43fdhhj0psfgyf635kvkzin3v3a518sfcjp8"; + sha256 = "17gyswbjnzdh1z5sz4fq6jzv8mdv21jk2cmjnbzcnk7lrjpwavk2"; authors = [ "DragoÈ™ Tiselice " ]; @@ -7523,9 +7461,9 @@ rec { }; "pest_meta" = rec { crateName = "pest_meta"; - version = "2.9.4"; + version = "2.9.5"; edition = "2021"; - sha256 = "04774dlh7acgf8hzl0w11dbp4q3ay3qwvxfqixcydg1x5grr4zxm"; + sha256 = "0p8gf9lm82b887s7n2il8r0rja95khala9w3hs0v1hb5m9n5px5k"; authors = [ "DragoÈ™ Tiselice " ]; @@ -7539,6 +7477,90 @@ rec { }; resolvedDefaultFeatures = [ "default" ]; }; + "pest_stack_guard" = rec { + crateName = "pest_stack_guard"; + version = "1.0.0"; + edition = "2021"; + sha256 = "1wm5w1vrjwmbwwsix8spp5sxi2c0wlbjjldadrmshzq52wicvrlp"; + authors = [ + "DTomas Tauber " + ]; + dependencies = [ + { + name = "psm"; + packageId = "psm"; + optional = true; + } + { + name = "psm"; + packageId = "psm"; + target = { target, features }: (target.name == "aarch64-apple-darwin"); + } + { + name = "psm"; + packageId = "psm"; + target = { target, features }: (target.name == "aarch64-pc-windows-msvc"); + } + { + name = "psm"; + packageId = "psm"; + target = { target, features }: (target.name == "aarch64-unknown-linux-gnu"); + } + { + name = "psm"; + packageId = "psm"; + target = { target, features }: (target.name == "x86_64-apple-darwin"); + } + { + name = "psm"; + packageId = "psm"; + target = { target, features }: (target.name == "x86_64-pc-windows-msvc"); + } + { + name = "psm"; + packageId = "psm"; + target = { target, features }: (target.name == "x86_64-unknown-linux-gnu"); + } + { + name = "stacker"; + packageId = "stacker"; + optional = true; + } + { + name = "stacker"; + packageId = "stacker"; + target = { target, features }: (target.name == "aarch64-apple-darwin"); + } + { + name = "stacker"; + packageId = "stacker"; + target = { target, features }: (target.name == "aarch64-pc-windows-msvc"); + } + { + name = "stacker"; + packageId = "stacker"; + target = { target, features }: (target.name == "aarch64-unknown-linux-gnu"); + } + { + name = "stacker"; + packageId = "stacker"; + target = { target, features }: (target.name == "x86_64-apple-darwin"); + } + { + name = "stacker"; + packageId = "stacker"; + target = { target, features }: (target.name == "x86_64-pc-windows-msvc"); + } + { + name = "stacker"; + packageId = "stacker"; + target = { target, features }: (target.name == "x86_64-unknown-linux-gnu"); + } + ]; + features = { + "stack-guard" = [ "dep:stacker" "dep:psm" ]; + }; + }; "pin-project" = rec { crateName = "pin-project"; version = "1.1.13"; @@ -7588,9 +7610,9 @@ rec { }; "pkcs1" = rec { crateName = "pkcs1"; - version = "0.7.5"; - edition = "2021"; - sha256 = "0zz4mil3nchnxljdfs2k5ab1cjqn7kq5lqp62n9qfix01zqvkzy8"; + version = "0.8.0-rc.5"; + edition = "2024"; + sha256 = "1hyvfdh70yq51c2dzhxfm6w6wy8scn8waayqlz56rslkwapxp1gl"; authors = [ "RustCrypto Developers" ]; @@ -7600,31 +7622,24 @@ rec { packageId = "der"; features = [ "oid" ]; } - { - name = "pkcs8"; - packageId = "pkcs8"; - optional = true; - usesDefaultFeatures = false; - } { name = "spki"; packageId = "spki"; } ]; features = { - "alloc" = [ "der/alloc" "zeroize" "pkcs8?/alloc" ]; - "pem" = [ "alloc" "der/pem" "pkcs8?/pem" ]; - "pkcs8" = [ "dep:pkcs8" ]; + "alloc" = [ "der/alloc" "spki/alloc" "zeroize" ]; + "pem" = [ "alloc" "der/pem" ]; "std" = [ "der/std" "alloc" ]; "zeroize" = [ "der/zeroize" ]; }; - resolvedDefaultFeatures = [ "alloc" "pem" "pkcs8" "std" "zeroize" ]; + resolvedDefaultFeatures = [ "alloc" "pem" "std" "zeroize" ]; }; "pkcs8" = rec { crateName = "pkcs8"; - version = "0.10.2"; - edition = "2021"; - sha256 = "1dx7w21gvn07azszgqd3ryjhyphsrjrmq5mmz1fbxkj5g0vv4l7r"; + version = "0.11.0"; + edition = "2024"; + sha256 = "1dqwyaj018cb0dyawgj42a799s3ys81r13ga6ihaaxf7d7d166a5"; authors = [ "RustCrypto Developers" ]; @@ -7642,15 +7657,14 @@ rec { features = { "3des" = [ "encryption" "pkcs5/3des" ]; "alloc" = [ "der/alloc" "der/zeroize" "spki/alloc" ]; + "ctutils" = [ "dep:ctutils" ]; "des-insecure" = [ "encryption" "pkcs5/des-insecure" ]; - "encryption" = [ "alloc" "pkcs5/alloc" "pkcs5/pbes2" "rand_core" ]; - "getrandom" = [ "rand_core/getrandom" ]; + "encryption" = [ "alloc" "pkcs5/alloc" "pkcs5/pbes2" "dep:rand_core" ]; + "getrandom" = [ "encryption" "pkcs5/getrandom" "dep:getrandom" ]; "pem" = [ "alloc" "der/pem" "spki/pem" ]; "pkcs5" = [ "dep:pkcs5" ]; - "rand_core" = [ "dep:rand_core" ]; "sha1-insecure" = [ "encryption" "pkcs5/sha1-insecure" ]; "std" = [ "alloc" "der/std" "spki/std" ]; - "subtle" = [ "dep:subtle" ]; }; resolvedDefaultFeatures = [ "alloc" "pem" "std" ]; }; @@ -7759,28 +7773,98 @@ rec { }; resolvedDefaultFeatures = [ "simd" "std" ]; }; + "primefield" = rec { + crateName = "primefield"; + version = "0.14.0"; + edition = "2024"; + sha256 = "1x4jnnysiy9f41mmr6r7vinj0hl67df87302rf7iakkxxgjacmf5"; + authors = [ + "RustCrypto Developers" + ]; + dependencies = [ + { + name = "crypto-bigint"; + packageId = "crypto-bigint"; + rename = "bigint"; + usesDefaultFeatures = false; + features = [ "rand_core" "hybrid-array" "subtle" ]; + } + { + name = "crypto-common"; + packageId = "crypto-common"; + rename = "common"; + features = [ "rand_core" ]; + } + { + name = "ff"; + packageId = "ff"; + usesDefaultFeatures = false; + } + { + name = "rand_core"; + packageId = "rand_core 0.10.1"; + usesDefaultFeatures = false; + } + { + name = "subtle"; + packageId = "subtle"; + usesDefaultFeatures = false; + features = [ "const-generics" ]; + } + { + name = "zeroize"; + packageId = "zeroize"; + usesDefaultFeatures = false; + } + ]; + + }; "primeorder" = rec { crateName = "primeorder"; - version = "0.13.6"; - edition = "2021"; - sha256 = "1rp16710mxksagcjnxqjjq9r9wf5vf72fs8wxffnvhb6i6hiqgim"; + version = "0.14.0"; + edition = "2024"; + sha256 = "01kvs3fgr25m9w50594xwsxdwd52awzc17znd0yhx83qijbl57sw"; authors = [ "RustCrypto Developers" ]; dependencies = [ { - name = "elliptic-curve"; - packageId = "elliptic-curve"; + name = "elliptic-curve"; + packageId = "elliptic-curve"; + usesDefaultFeatures = false; + features = [ "arithmetic" "sec1" ]; + } + { + name = "once_cell"; + packageId = "once_cell"; + optional = true; + usesDefaultFeatures = false; + } + { + name = "primefield"; + packageId = "primefield"; + } + { + name = "serdect"; + packageId = "serdect"; + optional = true; + usesDefaultFeatures = false; + } + { + name = "wnaf"; + packageId = "wnaf"; usesDefaultFeatures = false; - features = [ "arithmetic" "sec1" ]; } ]; features = { - "alloc" = [ "elliptic-curve/alloc" ]; + "alloc" = [ "elliptic-curve/alloc" "serdect?/alloc" ]; + "critical-section" = [ "basepoint-table" "once_cell/critical-section" ]; + "once_cell" = [ "dep:once_cell" ]; "serde" = [ "elliptic-curve/serde" "serdect" ]; "serdect" = [ "dep:serdect" ]; - "std" = [ "alloc" "elliptic-curve/std" ]; + "std" = [ "alloc" "elliptic-curve/std" "once_cell?/std" ]; }; + resolvedDefaultFeatures = [ "alloc" "basepoint-table" "std" ]; }; "proc-macro-crate" = rec { crateName = "proc-macro-crate"; @@ -8016,40 +8100,6 @@ rec { }; resolvedDefaultFeatures = [ "alloc" "default" "std" "std_rng" "sys_rng" "thread_rng" ]; }; - "rand 0.8.8" = rec { - crateName = "rand"; - version = "0.8.8"; - edition = "2018"; - sha256 = "0k3d9psya5icpiylff1w1wjbnc3q4pb1953n1iw7gbr61ggcfn70"; - authors = [ - "The Rand Project Developers" - "The Rust Project Developers" - ]; - dependencies = [ - { - name = "rand_chacha"; - packageId = "rand_chacha 0.3.1"; - optional = true; - usesDefaultFeatures = false; - } - { - name = "rand_core"; - packageId = "rand_core 0.6.4"; - } - ]; - features = { - "alloc" = [ "rand_core/alloc" ]; - "default" = [ "std" "std_rng" ]; - "getrandom" = [ "rand_core/getrandom" ]; - "libc" = [ "dep:libc" ]; - "rand_chacha" = [ "dep:rand_chacha" ]; - "serde" = [ "dep:serde" ]; - "serde1" = [ "serde" "rand_core/serde1" ]; - "std" = [ "rand_core/std" "rand_chacha/std" "alloc" "getrandom" "libc" ]; - "std_rng" = [ "rand_chacha" ]; - }; - resolvedDefaultFeatures = [ "rand_chacha" "std_rng" ]; - }; "rand 0.9.5" = rec { crateName = "rand"; version = "0.9.5"; @@ -8062,7 +8112,7 @@ rec { dependencies = [ { name = "rand_chacha"; - packageId = "rand_chacha 0.9.0"; + packageId = "rand_chacha"; optional = true; usesDefaultFeatures = false; } @@ -8082,36 +8132,7 @@ rec { }; resolvedDefaultFeatures = [ "alloc" "os_rng" "small_rng" "std" "std_rng" "thread_rng" ]; }; - "rand_chacha 0.3.1" = rec { - crateName = "rand_chacha"; - version = "0.3.1"; - edition = "2018"; - sha256 = "123x2adin558xbhvqb8w4f6syjsdkmqff8cxwhmjacpsl1ihmhg6"; - authors = [ - "The Rand Project Developers" - "The Rust Project Developers" - "The CryptoCorrosion Contributors" - ]; - dependencies = [ - { - name = "ppv-lite86"; - packageId = "ppv-lite86"; - usesDefaultFeatures = false; - features = [ "simd" ]; - } - { - name = "rand_core"; - packageId = "rand_core 0.6.4"; - } - ]; - features = { - "default" = [ "std" ]; - "serde" = [ "dep:serde" ]; - "serde1" = [ "serde" ]; - "std" = [ "ppv-lite86/std" ]; - }; - }; - "rand_chacha 0.9.0" = rec { + "rand_chacha" = rec { crateName = "rand_chacha"; version = "0.9.0"; edition = "2021"; @@ -8158,30 +8179,6 @@ rec { ]; }; - "rand_core 0.6.4" = rec { - crateName = "rand_core"; - version = "0.6.4"; - edition = "2018"; - sha256 = "0b4j2v4cb5krak1pv6kakv4sz6xcwbrmy2zckc32hsigbrwy82zc"; - authors = [ - "The Rand Project Developers" - "The Rust Project Developers" - ]; - dependencies = [ - { - name = "getrandom"; - packageId = "getrandom 0.2.17"; - optional = true; - } - ]; - features = { - "getrandom" = [ "dep:getrandom" ]; - "serde" = [ "dep:serde" ]; - "serde1" = [ "serde" ]; - "std" = [ "alloc" "getrandom" "getrandom/std" ]; - }; - resolvedDefaultFeatures = [ "alloc" "getrandom" "std" ]; - }; "rand_core 0.9.5" = rec { crateName = "rand_core"; version = "0.9.5"; @@ -8628,23 +8625,32 @@ rec { }; "rfc6979" = rec { crateName = "rfc6979"; - version = "0.4.0"; - edition = "2021"; - sha256 = "1chw95jgcfrysyzsq6a10b1j5qb7bagkx8h0wda4lv25in02mpgq"; + version = "0.6.0"; + edition = "2024"; + sha256 = "0aqpi1rynmj6np3lvdpy041w8rkm004133zx65myfgzvvb6mk95l"; authors = [ "RustCrypto Developers" ]; dependencies = [ + { + name = "crypto-bigint"; + packageId = "crypto-bigint"; + rename = "bigint"; + usesDefaultFeatures = false; + } { name = "hmac"; packageId = "hmac"; usesDefaultFeatures = false; - features = [ "reset" ]; } + ]; + devDependencies = [ { - name = "subtle"; - packageId = "subtle"; + name = "crypto-bigint"; + packageId = "crypto-bigint"; + rename = "bigint"; usesDefaultFeatures = false; + features = [ "alloc" ]; } ]; @@ -8712,9 +8718,9 @@ rec { }; "rsa" = rec { crateName = "rsa"; - version = "0.9.10"; + version = "0.10.0-rc.19"; edition = "2021"; - sha256 = "0bdikdwhcvl1gfh4637m5rdw3fgcl752aiygvzmwlgc8yl1kymxq"; + sha256 = "119bbjvkxiqipy4gn0ghgwygvan30illy9bflqf99vqn3qr5wh1k"; authors = [ "RustCrypto Developers" "dignifiedquire " @@ -8726,44 +8732,39 @@ rec { usesDefaultFeatures = false; } { - name = "digest"; - packageId = "digest"; - usesDefaultFeatures = false; - features = [ "alloc" "oid" ]; - } - { - name = "num-bigint-dig"; - packageId = "num-bigint-dig"; - rename = "num-bigint"; + name = "crypto-bigint"; + packageId = "crypto-bigint"; usesDefaultFeatures = false; - features = [ "i128" "prime" "zeroize" ]; + features = [ "zeroize" "alloc" ]; } { - name = "num-integer"; - packageId = "num-integer"; + name = "crypto-primes"; + packageId = "crypto-primes"; usesDefaultFeatures = false; } { - name = "num-traits"; - packageId = "num-traits"; + name = "digest"; + packageId = "digest"; usesDefaultFeatures = false; - features = [ "libm" ]; + features = [ "alloc" "oid" ]; } { name = "pkcs1"; packageId = "pkcs1"; + optional = true; usesDefaultFeatures = false; - features = [ "alloc" "pkcs8" ]; + features = [ "alloc" "pem" ]; } { name = "pkcs8"; packageId = "pkcs8"; + optional = true; usesDefaultFeatures = false; - features = [ "alloc" ]; + features = [ "alloc" "pem" ]; } { name = "rand_core"; - packageId = "rand_core 0.6.4"; + packageId = "rand_core 0.10.1"; usesDefaultFeatures = false; } { @@ -8782,14 +8783,10 @@ rec { { name = "spki"; packageId = "spki"; + optional = true; usesDefaultFeatures = false; features = [ "alloc" ]; } - { - name = "subtle"; - packageId = "subtle"; - usesDefaultFeatures = false; - } { name = "zeroize"; packageId = "zeroize"; @@ -8799,7 +8796,7 @@ rec { devDependencies = [ { name = "rand_core"; - packageId = "rand_core 0.6.4"; + packageId = "rand_core 0.10.1"; usesDefaultFeatures = false; } { @@ -8810,24 +8807,23 @@ rec { } ]; features = { - "default" = [ "std" "pem" "u64_digit" ]; - "getrandom" = [ "rand_core/getrandom" ]; - "nightly" = [ "num-bigint/nightly" ]; - "pem" = [ "pkcs1/pem" "pkcs8/pem" ]; + "crypto-common" = [ "dep:crypto-common" ]; + "default" = [ "std" "encoding" ]; + "encoding" = [ "dep:pkcs1" "dep:pkcs8" "dep:spki" ]; + "getrandom" = [ "crypto-bigint/getrandom" "crypto-common" ]; "pkcs5" = [ "pkcs8/encryption" ]; - "serde" = [ "dep:serde" "num-bigint/serde" ]; + "serde" = [ "encoding" "dep:serde" "dep:serdect" "crypto-bigint/serde" ]; "sha1" = [ "dep:sha1" ]; "sha2" = [ "dep:sha2" ]; - "std" = [ "digest/std" "pkcs1/std" "pkcs8/std" "rand_core/std" "signature/std" ]; - "u64_digit" = [ "num-bigint/u64_digit" ]; + "std" = [ "pkcs1?/std" "pkcs8?/std" ]; }; - resolvedDefaultFeatures = [ "default" "pem" "sha2" "std" "u64_digit" ]; + resolvedDefaultFeatures = [ "default" "encoding" "sha2" "std" ]; }; "rstest" = rec { crateName = "rstest"; - version = "0.27.0"; + version = "0.28.0"; edition = "2021"; - sha256 = "174vs0myprq6yc02z42b7zr6a04asmnj7kypj0dfb0rvs7k070ll"; + sha256 = "1z6s4vias5x8fcs4fqqwdk1f3bdkk77ambn6vfl8cxhayc9faxmk"; authors = [ "Michele d'Amico " ]; @@ -8858,9 +8854,9 @@ rec { }; "rstest_macros" = rec { crateName = "rstest_macros"; - version = "0.27.0"; + version = "0.28.0"; edition = "2021"; - sha256 = "190dghbjh4dvrym9jh747mbm2wcfc1rdq7fpf4jf2lbfgfpjxnd8"; + sha256 = "1sji63c2scrdy7x27fbpwky3aw35nmrvrxxf73x0sfmpnnzjslc8"; procMacro = true; authors = [ "Michele d'Amico " @@ -9187,9 +9183,9 @@ rec { }; "rustls-webpki" = rec { crateName = "rustls-webpki"; - version = "0.103.15"; + version = "0.103.16"; edition = "2021"; - sha256 = "1hhanq3lz384v4nccacnjfwsyy99n3yc6m6iw8kljz8yicfwzhzk"; + sha256 = "10djm2f00xzi5qlbcfqjhhn2smk2h9aw8b4l74qncz4xsfvb2hs4"; libName = "webpki"; dependencies = [ { @@ -9416,9 +9412,9 @@ rec { }; "sec1" = rec { crateName = "sec1"; - version = "0.7.3"; - edition = "2021"; - sha256 = "1p273j8c87pid6a1iyyc7vxbvifrw55wbxgr0dh3l8vnbxb7msfk"; + version = "0.8.1"; + edition = "2024"; + sha256 = "0k8fm3c0j2hb9bs5mgnksk9g75ny65w50bhjyzjkq80r5xy46vfm"; authors = [ "RustCrypto Developers" ]; @@ -9430,20 +9426,19 @@ rec { usesDefaultFeatures = false; } { - name = "der"; - packageId = "der"; + name = "ctutils"; + packageId = "ctutils"; optional = true; - features = [ "oid" ]; } { - name = "generic-array"; - packageId = "generic-array"; + name = "der"; + packageId = "der"; optional = true; - usesDefaultFeatures = false; + features = [ "oid" ]; } { - name = "pkcs8"; - packageId = "pkcs8"; + name = "hybrid-array"; + packageId = "hybrid-array"; optional = true; usesDefaultFeatures = false; } @@ -9461,18 +9456,18 @@ rec { } ]; features = { - "alloc" = [ "der?/alloc" "pkcs8?/alloc" "zeroize?/alloc" ]; + "alloc" = [ "der?/alloc" "zeroize?/alloc" ]; + "ctutils" = [ "dep:ctutils" ]; "default" = [ "der" "point" ]; "der" = [ "dep:der" "zeroize" ]; - "pem" = [ "alloc" "der/pem" "pkcs8/pem" ]; - "pkcs8" = [ "dep:pkcs8" ]; - "point" = [ "dep:base16ct" "dep:generic-array" ]; + "pem" = [ "alloc" "der/pem" ]; + "point" = [ "dep:base16ct" "dep:hybrid-array" ]; "serde" = [ "dep:serdect" ]; "std" = [ "alloc" "der?/std" ]; "subtle" = [ "dep:subtle" ]; "zeroize" = [ "dep:zeroize" "der?/zeroize" ]; }; - resolvedDefaultFeatures = [ "alloc" "default" "der" "pem" "pkcs8" "point" "std" "subtle" "zeroize" ]; + resolvedDefaultFeatures = [ "alloc" "ctutils" "default" "der" "pem" "point" "std" "subtle" "zeroize" ]; }; "secrecy" = rec { crateName = "secrecy"; @@ -9926,11 +9921,47 @@ rec { ]; }; + "serdect" = rec { + crateName = "serdect"; + version = "0.4.3"; + edition = "2024"; + sha256 = "0ghby2vq4k21xlpy3v8897rym4pvvwil5cxw0qjg3z6jrvnqzkv6"; + authors = [ + "RustCrypto Developers" + ]; + dependencies = [ + { + name = "base16ct"; + packageId = "base16ct"; + usesDefaultFeatures = false; + } + { + name = "serde"; + packageId = "serde"; + usesDefaultFeatures = false; + } + ]; + devDependencies = [ + { + name = "serde"; + packageId = "serde"; + usesDefaultFeatures = false; + features = [ "derive" ]; + } + ]; + features = { + "alloc" = [ "base16ct/alloc" "serde/alloc" ]; + "default" = [ "alloc" ]; + "derive" = [ "serde/derive" ]; + "zeroize" = [ "dep:zeroize" ]; + }; + resolvedDefaultFeatures = [ "alloc" ]; + }; "sha1" = rec { crateName = "sha1"; - version = "0.10.7"; - edition = "2018"; - sha256 = "1f632d529qzz95yrprr632w1fxqkrv6b6jksjc11vnzl049lay59"; + version = "0.11.0"; + edition = "2024"; + sha256 = "05025pf8d8zr2qq5xyh5m3wqls1fn7813gz1mfs7551mk724rk5a"; authors = [ "RustCrypto Developers" ]; @@ -9941,7 +9972,7 @@ rec { } { name = "cpufeatures"; - packageId = "cpufeatures 0.2.17"; + packageId = "cpufeatures"; target = { target, features }: (("aarch64" == target."arch" or null) || ("x86" == target."arch" or null) || ("x86_64" == target."arch" or null)); } { @@ -9957,17 +9988,17 @@ rec { } ]; features = { - "default" = [ "std" ]; + "alloc" = [ "digest/alloc" ]; + "default" = [ "alloc" "oid" ]; "oid" = [ "digest/oid" ]; - "std" = [ "digest/std" ]; + "zeroize" = [ "digest/zeroize" ]; }; - resolvedDefaultFeatures = [ "default" "std" ]; }; "sha2" = rec { crateName = "sha2"; - version = "0.10.9"; - edition = "2018"; - sha256 = "10xjj843v31ghsksd9sl9y12qfc48157j1xpb8v1ml39jy0psl57"; + version = "0.11.1"; + edition = "2024"; + sha256 = "06ddr559jvwx17d7847l6i1g4hrlwy39j0yimjwwfskxxfdhdms7"; authors = [ "RustCrypto Developers" ]; @@ -9978,7 +10009,7 @@ rec { } { name = "cpufeatures"; - packageId = "cpufeatures 0.2.17"; + packageId = "cpufeatures"; target = { target, features }: (("aarch64" == target."arch" or null) || ("x86_64" == target."arch" or null) || ("x86" == target."arch" or null)); } { @@ -9994,14 +10025,12 @@ rec { } ]; features = { - "asm" = [ "sha2-asm" ]; - "asm-aarch64" = [ "asm" ]; - "default" = [ "std" ]; + "alloc" = [ "digest/alloc" ]; + "default" = [ "alloc" "oid" ]; "oid" = [ "digest/oid" ]; - "sha2-asm" = [ "dep:sha2-asm" ]; - "std" = [ "digest/std" ]; + "zeroize" = [ "digest/zeroize" ]; }; - resolvedDefaultFeatures = [ "default" "oid" "std" ]; + resolvedDefaultFeatures = [ "alloc" "default" "oid" ]; }; "sharded-slab" = rec { crateName = "sharded-slab"; @@ -10064,9 +10093,9 @@ rec { }; "signature" = rec { crateName = "signature"; - version = "2.2.0"; - edition = "2021"; - sha256 = "1pi9hd5vqfr3q3k49k37z06p7gs5si0in32qia4mmr1dancr6m3p"; + version = "3.0.0"; + edition = "2024"; + sha256 = "1x9pfp51h2a0xs4x768q5r0y9yazv5naf216mjw9q17hpbf6gm98"; authors = [ "RustCrypto Developers" ]; @@ -10079,18 +10108,16 @@ rec { } { name = "rand_core"; - packageId = "rand_core 0.6.4"; + packageId = "rand_core 0.10.1"; optional = true; usesDefaultFeatures = false; } ]; features = { - "derive" = [ "dep:derive" ]; "digest" = [ "dep:digest" ]; "rand_core" = [ "dep:rand_core" ]; - "std" = [ "alloc" "rand_core?/std" ]; }; - resolvedDefaultFeatures = [ "alloc" "digest" "rand_core" "std" ]; + resolvedDefaultFeatures = [ "alloc" "digest" "rand_core" ]; }; "simd-adler32" = rec { crateName = "simd-adler32"; @@ -10328,36 +10355,11 @@ rec { }; resolvedDefaultFeatures = [ "all" ]; }; - "spin" = rec { - crateName = "spin"; - version = "0.9.9"; - edition = "2015"; - sha256 = "03psal0vh1xdxp7agphw09p7kf50v3bj1zshijq1s5bkdd7jcqrp"; - authors = [ - "Mathijs van de Nes " - "John Ericson " - "Joshua Barretto " - ]; - features = { - "barrier" = [ "mutex" ]; - "default" = [ "lock_api" "mutex" "spin_mutex" "rwlock" "once" "lazy" "barrier" ]; - "fair_mutex" = [ "mutex" ]; - "lazy" = [ "once" ]; - "lock_api" = [ "lock_api_crate" ]; - "lock_api_crate" = [ "dep:lock_api_crate" ]; - "portable-atomic" = [ "dep:portable-atomic" ]; - "portable_atomic" = [ "portable-atomic" ]; - "spin_mutex" = [ "mutex" ]; - "ticket_mutex" = [ "mutex" ]; - "use_ticket_mutex" = [ "mutex" "ticket_mutex" ]; - }; - resolvedDefaultFeatures = [ "once" ]; - }; "spki" = rec { crateName = "spki"; - version = "0.7.3"; - edition = "2021"; - sha256 = "17fj8k5fmx4w9mp27l970clrh5qa7r5sjdvbsln987xhb34dc7nr"; + version = "0.8.1"; + edition = "2024"; + sha256 = "1aci2hbcr0qbmhndkc4dl5i1w7p6yglld2f7ry8a4pcxiflmiyby"; authors = [ "RustCrypto Developers" ]; @@ -10378,7 +10380,8 @@ rec { "alloc" = [ "base64ct?/alloc" "der/alloc" ]; "arbitrary" = [ "std" "dep:arbitrary" "der/arbitrary" ]; "base64" = [ "dep:base64ct" ]; - "fingerprint" = [ "sha2" ]; + "digest" = [ "dep:digest" ]; + "fingerprint" = [ "digest" "sha2" ]; "pem" = [ "alloc" "der/pem" ]; "sha2" = [ "dep:sha2" ]; "std" = [ "der/std" "alloc" ]; @@ -10405,8 +10408,8 @@ rec { workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech//operator-rs.git"; - rev = "033abc201e6504b5639ba2f2c726e5e465af5a07"; - sha256 = "1r8yjfwvvyf16ji0a98vmlb1rnf67lvqxwqgn00b2k0rada60idj"; + rev = "80c75a3aebf48af8bb793ea313e83440d6cee949"; + sha256 = "0jha2kdn4hnndrhjqgh99cgmcgk992vg2bg1mrkfmfik6x4icdha"; }; libName = "stackable_certs"; authors = [ @@ -10446,7 +10449,7 @@ rec { } { name = "rand_core"; - packageId = "rand_core 0.6.4"; + packageId = "rand_core 0.10.1"; } { name = "rsa"; @@ -10508,14 +10511,18 @@ rec { workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech//operator-rs.git"; - rev = "033abc201e6504b5639ba2f2c726e5e465af5a07"; - sha256 = "1r8yjfwvvyf16ji0a98vmlb1rnf67lvqxwqgn00b2k0rada60idj"; + rev = "80c75a3aebf48af8bb793ea313e83440d6cee949"; + sha256 = "0jha2kdn4hnndrhjqgh99cgmcgk992vg2bg1mrkfmfik6x4icdha"; }; libName = "stackable_operator"; authors = [ "Stackable GmbH " ]; dependencies = [ + { + name = "base16ct"; + packageId = "base16ct"; + } { name = "base64"; packageId = "base64 0.23.1"; @@ -10707,8 +10714,8 @@ rec { workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech//operator-rs.git"; - rev = "033abc201e6504b5639ba2f2c726e5e465af5a07"; - sha256 = "1r8yjfwvvyf16ji0a98vmlb1rnf67lvqxwqgn00b2k0rada60idj"; + rev = "80c75a3aebf48af8bb793ea313e83440d6cee949"; + sha256 = "0jha2kdn4hnndrhjqgh99cgmcgk992vg2bg1mrkfmfik6x4icdha"; }; procMacro = true; libName = "stackable_operator_derive"; @@ -10742,8 +10749,8 @@ rec { workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech//operator-rs.git"; - rev = "033abc201e6504b5639ba2f2c726e5e465af5a07"; - sha256 = "1r8yjfwvvyf16ji0a98vmlb1rnf67lvqxwqgn00b2k0rada60idj"; + rev = "80c75a3aebf48af8bb793ea313e83440d6cee949"; + sha256 = "0jha2kdn4hnndrhjqgh99cgmcgk992vg2bg1mrkfmfik6x4icdha"; }; libName = "stackable_shared"; authors = [ @@ -10823,8 +10830,8 @@ rec { workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech//operator-rs.git"; - rev = "033abc201e6504b5639ba2f2c726e5e465af5a07"; - sha256 = "1r8yjfwvvyf16ji0a98vmlb1rnf67lvqxwqgn00b2k0rada60idj"; + rev = "80c75a3aebf48af8bb793ea313e83440d6cee949"; + sha256 = "0jha2kdn4hnndrhjqgh99cgmcgk992vg2bg1mrkfmfik6x4icdha"; }; libName = "stackable_telemetry"; authors = [ @@ -11040,8 +11047,8 @@ rec { workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech//operator-rs.git"; - rev = "033abc201e6504b5639ba2f2c726e5e465af5a07"; - sha256 = "1r8yjfwvvyf16ji0a98vmlb1rnf67lvqxwqgn00b2k0rada60idj"; + rev = "80c75a3aebf48af8bb793ea313e83440d6cee949"; + sha256 = "0jha2kdn4hnndrhjqgh99cgmcgk992vg2bg1mrkfmfik6x4icdha"; }; libName = "stackable_versioned"; authors = [ @@ -11086,8 +11093,8 @@ rec { workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech//operator-rs.git"; - rev = "033abc201e6504b5639ba2f2c726e5e465af5a07"; - sha256 = "1r8yjfwvvyf16ji0a98vmlb1rnf67lvqxwqgn00b2k0rada60idj"; + rev = "80c75a3aebf48af8bb793ea313e83440d6cee949"; + sha256 = "0jha2kdn4hnndrhjqgh99cgmcgk992vg2bg1mrkfmfik6x4icdha"; }; procMacro = true; libName = "stackable_versioned_macros"; @@ -11150,8 +11157,8 @@ rec { workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech//operator-rs.git"; - rev = "033abc201e6504b5639ba2f2c726e5e465af5a07"; - sha256 = "1r8yjfwvvyf16ji0a98vmlb1rnf67lvqxwqgn00b2k0rada60idj"; + rev = "80c75a3aebf48af8bb793ea313e83440d6cee949"; + sha256 = "0jha2kdn4hnndrhjqgh99cgmcgk992vg2bg1mrkfmfik6x4icdha"; }; libName = "stackable_webhook"; authors = [ @@ -11394,7 +11401,7 @@ rec { features = { "default" = [ "std" "i128" ]; }; - resolvedDefaultFeatures = [ "i128" ]; + resolvedDefaultFeatures = [ "const-generics" "i128" ]; }; "symlink" = rec { crateName = "symlink"; @@ -11774,9 +11781,9 @@ rec { }; "tinystr" = rec { crateName = "tinystr"; - version = "0.8.4"; + version = "0.8.5"; edition = "2021"; - sha256 = "0hzncw8rgk4syla79qscfml46jm7ll1zdp7kdacc42cj8n8prqmi"; + sha256 = "06l0g5wy57a43bd1qvk92xd5dpnz3qk949vbx3wmhk8m73141j5b"; authors = [ "The ICU4X Project Developers" ]; @@ -11866,9 +11873,9 @@ rec { }; "tokio" = rec { crateName = "tokio"; - version = "1.53.3"; + version = "1.54.1"; edition = "2021"; - sha256 = "0kny1nnbpy11dllv6ncxy3n804wh0ddn3msq78rxl744f7x3acyf"; + sha256 = "18wn0c3yvy6ld8yis0fw6rqkc4rwnmv5mav4fan6zljqa8jx6bxm"; authors = [ "Tokio Contributors " ]; @@ -11929,7 +11936,7 @@ rec { name = "socket2"; packageId = "socket2"; optional = true; - target = { target, features }: ((!(builtins.elem "wasm" target."family")) || (("wasi" == target."os" or null) && (!("p1" == target."env" or null)))); + target = { target, features }: ((!(builtins.elem "wasm" target."family")) || ("emscripten" == target."os" or null) || (("wasi" == target."os" or null) && (!("p1" == target."env" or null)))); features = [ "all" ]; } { @@ -12242,11 +12249,11 @@ rec { }; "tonic" = rec { crateName = "tonic"; - version = "0.14.6"; + version = "0.14.9"; edition = "2024"; - sha256 = "1vs5ci6z6b9xhfsnx4s8qx6bqi1zzcrxncjp71147a0gqwc5aamc"; + sha256 = "06sys4vi43sydnp9f3vzsk2kfk34gf1nabp9zvl0zlxb79kzrkg2"; authors = [ - "Lucio Franco " + "gRPC authors" ]; dependencies = [ { @@ -12267,6 +12274,11 @@ rec { packageId = "flate2"; optional = true; } + { + name = "h2"; + packageId = "h2"; + optional = true; + } { name = "http"; packageId = "http"; @@ -12319,6 +12331,10 @@ rec { packageId = "tokio-stream"; usesDefaultFeatures = false; } + { + name = "tokio-util"; + packageId = "tokio-util"; + } { name = "tower"; packageId = "tower"; @@ -12352,13 +12368,14 @@ rec { ]; features = { "_tls-any" = [ "dep:tokio" "tokio?/rt" "tokio?/macros" "tls-connect-info" ]; - "channel" = [ "dep:hyper" "hyper?/client" "dep:hyper-util" "hyper-util?/client-legacy" "dep:tower" "tower?/balance" "tower?/buffer" "tower?/discover" "tower?/limit" "tower?/load-shed" "tower?/util" "dep:tokio" "tokio?/time" "dep:hyper-timeout" ]; + "channel" = [ "h2" "dep:hyper" "hyper?/client" "dep:hyper-util" "hyper-util?/client-legacy" "dep:tower" "tower?/balance" "tower?/buffer" "tower?/discover" "tower?/limit" "tower?/load-shed" "tower?/util" "dep:tokio" "tokio?/time" "dep:hyper-timeout" ]; "codegen" = [ "dep:async-trait" ]; "default" = [ "router" "transport" "codegen" ]; "deflate" = [ "dep:flate2" ]; "gzip" = [ "dep:flate2" ]; + "h2" = [ "dep:h2" ]; "router" = [ "dep:axum" "dep:tower" "tower?/util" ]; - "server" = [ "dep:h2" "dep:hyper" "hyper?/server" "dep:hyper-util" "hyper-util?/service" "hyper-util?/server-auto" "dep:socket2" "dep:tokio" "tokio?/macros" "tokio?/net" "tokio?/time" "tokio-stream/net" "dep:tower" "tower?/util" "tower?/limit" "tower?/load-shed" ]; + "server" = [ "h2" "dep:hyper" "hyper?/server" "dep:hyper-util" "hyper-util?/service" "hyper-util?/server-auto" "dep:socket2" "dep:tokio" "tokio?/macros" "tokio?/net" "tokio?/time" "tokio-stream/net" "dep:tower" "tower?/util" "tower?/limit" "tower?/load-shed" ]; "tls-aws-lc" = [ "_tls-any" "tokio-rustls/aws-lc-rs" ]; "tls-connect-info" = [ "dep:tokio-rustls" ]; "tls-native-roots" = [ "_tls-any" "channel" "dep:rustls-native-certs" ]; @@ -12367,16 +12384,16 @@ rec { "transport" = [ "server" "channel" ]; "zstd" = [ "dep:zstd" ]; }; - resolvedDefaultFeatures = [ "channel" "codegen" "gzip" ]; + resolvedDefaultFeatures = [ "channel" "codegen" "gzip" "h2" ]; }; "tonic-prost" = rec { crateName = "tonic-prost"; - version = "0.14.6"; + version = "0.14.9"; edition = "2024"; - sha256 = "184y40nf0iyzc5rg32ivgd88snv68sqy1kchynn55r1vhml9z12h"; + sha256 = "1154jam28kq21v1pzzdmg8z6wk5zg6qbi2a4lf1g29i29q2n997b"; libName = "tonic_prost"; authors = [ - "Lucio Franco " + "gRPC authors" ]; dependencies = [ { @@ -12397,12 +12414,12 @@ rec { }; "tonic-types" = rec { crateName = "tonic-types"; - version = "0.14.6"; + version = "0.14.9"; edition = "2024"; - sha256 = "1s286gg71pjajny8xar0azq1w9lgz1ks3jm3pccxb0qz0q11pavk"; + sha256 = "1bf5wwpyawd6p8j84jm71mh8m0xpi599rwbxz36rvsdqvqqnrfyc"; libName = "tonic_types"; authors = [ - "Lucio Franco " + "gRPC authors" "Rafael Lemos " ]; dependencies = [ @@ -13216,6 +13233,7 @@ rec { "scale-info" = [ "dep:scale-info" ]; "scale_info" = [ "scale-info/derive" ]; }; + resolvedDefaultFeatures = [ "const-generics" ]; }; "ucd-trie" = rec { crateName = "ucd-trie"; @@ -13257,9 +13275,9 @@ rec { }; "unicode-width" = rec { crateName = "unicode-width"; - version = "0.2.2"; + version = "0.2.3"; edition = "2021"; - sha256 = "0m7jjzlcccw716dy9423xxh0clys8pfpllc5smvfxrzdf66h9b5l"; + sha256 = "0mymrsdklcgys4fndds2h2hasij36gyalcqy4nghb4k9hxqq8wfa"; libName = "unicode_width"; authors = [ "kwantam " @@ -13357,12 +13375,18 @@ rec { }; "utf8_iter" = rec { crateName = "utf8_iter"; - version = "1.0.4"; + version = "1.1.0"; edition = "2021"; - sha256 = "1gmna9flnj8dbyd8ba17zigrp9c4c3zclngf5lnb5yvz1ri41hdn"; + sha256 = "1w7d0f7xc46qfmb7m6zy5y6in1mblmzbhcyhx766zhkiwp9xjfxg"; authors = [ "Henri Sivonen " ]; + dependencies = [ + { + name = "utf_types"; + packageId = "utf_types"; + } + ]; }; "utf8parse" = rec { @@ -13378,11 +13402,21 @@ rec { }; resolvedDefaultFeatures = [ "default" ]; }; + "utf_types" = rec { + crateName = "utf_types"; + version = "1.0.0"; + edition = "2021"; + sha256 = "1dhbsnxfxxbg9a13anjfax5i7jyd51nkngs5g1r3c2lqhr944frs"; + authors = [ + "Henri Sivonen " + ]; + + }; "uuid" = rec { crateName = "uuid"; - version = "1.28.0"; + version = "1.29.0"; edition = "2021"; - sha256 = "01mnlhz09hwdjaxwzjd6bql3fjb5zl9n8dzaxn7dvdxyhiiiihbw"; + sha256 = "0525458ww4jwa0nw513jdrhgwxrldglzvfrbw5gnjl0cc88js3ja"; authors = [ "Ashley Mannix" "Dylan DPC" @@ -13546,9 +13580,9 @@ rec { }; "wasm-bindgen" = rec { crateName = "wasm-bindgen"; - version = "0.2.129"; + version = "0.2.130"; edition = "2021"; - sha256 = "02flhqld01jqb6vbfyx1gb8s78g1pnq2164daxad93y6mhrlzdcv"; + sha256 = "071xi9mqha1vdrxsjgndjgcf0azkl8g5yahkn2qbiiynvla1q650"; libName = "wasm_bindgen"; authors = [ "The wasm-bindgen Developers" @@ -13558,11 +13592,6 @@ rec { name = "cfg-if"; packageId = "cfg-if"; } - { - name = "once_cell"; - packageId = "once_cell"; - usesDefaultFeatures = false; - } { name = "wasm-bindgen-macro"; packageId = "wasm-bindgen-macro"; @@ -13591,9 +13620,9 @@ rec { }; "wasm-bindgen-futures" = rec { crateName = "wasm-bindgen-futures"; - version = "0.4.79"; + version = "0.4.80"; edition = "2021"; - sha256 = "03k1wcg5j3wqk6vgy6gzcq868vsa9k81dlhqissfk0nrw96v7fiw"; + sha256 = "00f5mq5rx8wzbq98svcjbb4r79i7k15d08nb1kb8ldmmghrf052y"; libName = "wasm_bindgen_futures"; authors = [ "The wasm-bindgen Developers" @@ -13626,9 +13655,9 @@ rec { }; "wasm-bindgen-macro" = rec { crateName = "wasm-bindgen-macro"; - version = "0.2.129"; + version = "0.2.130"; edition = "2021"; - sha256 = "0dc5xq09sy1v9ns1fhb0cnyqz5p1wcjjvkdmxskj9qhnbg1x0a9f"; + sha256 = "1ncfybmdiczbsjz8a257a13k8n7dnl15khvgjrkbzgcslc11m4vf"; procMacro = true; libName = "wasm_bindgen_macro"; authors = [ @@ -13650,9 +13679,9 @@ rec { }; "wasm-bindgen-macro-support" = rec { crateName = "wasm-bindgen-macro-support"; - version = "0.2.129"; + version = "0.2.130"; edition = "2021"; - sha256 = "1dx6w90f14avmhri7ss9lyz03060g6475r4axy3bm7biqf5ill3g"; + sha256 = "0fm58fh6gkhlmi15rhzvcgz35x5s6kkvi9ik3s1vsmg4h11bb91c"; libName = "wasm_bindgen_macro_support"; authors = [ "The wasm-bindgen Developers" @@ -13686,10 +13715,10 @@ rec { }; "wasm-bindgen-shared" = rec { crateName = "wasm-bindgen-shared"; - version = "0.2.129"; + version = "0.2.130"; edition = "2021"; links = "wasm_bindgen"; - sha256 = "1ilmp5d3sl8lrq9djhcs90gk66yvk8mgwk4sfrvpvkd75b2wkw13"; + sha256 = "17iq85zyk1z7hq533c0apj5ix0y0ks35fbszxv31cl3jk0vrq7rv"; libName = "wasm_bindgen_shared"; authors = [ "The wasm-bindgen Developers" @@ -13704,9 +13733,9 @@ rec { }; "web-sys" = rec { crateName = "web-sys"; - version = "0.3.106"; + version = "0.3.107"; edition = "2021"; - sha256 = "195bd1m14w3hsw5fg3sr938mh7y4cb260d0sq6a6brffxjfin9l8"; + sha256 = "125b0y934gyfwjkd60wnqjf2irmx250dar6vwinhzv7mdxcpklfp"; libName = "web_sys"; authors = [ "The wasm-bindgen Developers" @@ -14228,9 +14257,9 @@ rec { }; "webpki-root-certs" = rec { crateName = "webpki-root-certs"; - version = "1.0.9"; + version = "1.0.11"; edition = "2021"; - sha256 = "16qw59hxn1lln1615kb9rjy16pfxd1x8m9f9w6vwv36c5am58rdr"; + sha256 = "0apn96djpc8yj1cp9scvqd8a5wd93ncxla4liwp18360mdjhx7g4"; libName = "webpki_root_certs"; dependencies = [ { @@ -15086,6 +15115,41 @@ rec { "rustc-dep-of-std" = [ "dep:core" "dep:alloc" ]; }; }; + "wnaf" = rec { + crateName = "wnaf"; + version = "0.14.1"; + edition = "2024"; + sha256 = "1ypnjmp4jpfh58hmxqijgnzpxkyx861jg691k2zn4pnv7y5s2p3r"; + authors = [ + "RustCrypto Developers" + ]; + dependencies = [ + { + name = "ff"; + packageId = "ff"; + usesDefaultFeatures = false; + } + { + name = "group"; + packageId = "group"; + usesDefaultFeatures = false; + } + { + name = "hybrid-array"; + packageId = "hybrid-array"; + rename = "array"; + } + { + name = "primefield"; + packageId = "primefield"; + usesDefaultFeatures = false; + } + ]; + features = { + "alloc" = [ "array/alloc" "ff/alloc" "group/alloc" ]; + "default" = [ "alloc" ]; + }; + }; "writeable" = rec { crateName = "writeable"; version = "0.6.4"; @@ -15101,9 +15165,9 @@ rec { }; "x509-cert" = rec { crateName = "x509-cert"; - version = "0.2.5"; - edition = "2021"; - sha256 = "155f42vm6m7phn8w7s2wmk9vli3ws45dqpk5z3jilw0a04syj08k"; + version = "0.3.0"; + edition = "2024"; + sha256 = "12q37mnxnjhp9a8cl64rkvvavf08pzjd08ynhgpkgccw5mjg8phh"; libName = "x509_cert"; authors = [ "RustCrypto Developers" @@ -15123,6 +15187,7 @@ rec { name = "sha1"; packageId = "sha1"; optional = true; + usesDefaultFeatures = false; } { name = "signature"; @@ -15145,15 +15210,17 @@ rec { ]; features = { "arbitrary" = [ "dep:arbitrary" "std" "der/arbitrary" "spki/arbitrary" ]; - "builder" = [ "std" "sha1/default" "signature" ]; + "base64" = [ "spki/base64" ]; + "builder" = [ "dep:sha1" "signature" ]; "default" = [ "pem" "std" ]; + "digest" = [ "dep:digest" "spki/digest" ]; + "fingerprint" = [ "spki/fingerprint" ]; "pem" = [ "der/pem" "spki/pem" ]; "sct" = [ "dep:tls_codec" ]; - "sha1" = [ "dep:sha1" ]; "signature" = [ "dep:signature" ]; - "std" = [ "const-oid/std" "der/std" "spki/std" "tls_codec?/std" ]; + "std" = [ "der/std" "spki/std" "tls_codec?/std" ]; }; - resolvedDefaultFeatures = [ "builder" "default" "pem" "sha1" "signature" "std" ]; + resolvedDefaultFeatures = [ "builder" "default" "pem" "signature" "std" ]; }; "xml" = rec { crateName = "xml"; @@ -15207,9 +15274,9 @@ rec { }; "yoke" = rec { crateName = "yoke"; - version = "0.8.3"; + version = "0.8.4"; edition = "2021"; - sha256 = "1xgyj6c2lxj2bp891ynmhws87c6z7yyv2li1v0ss9di40hxf57vh"; + sha256 = "1cs06ci8h7pdhr3wzwrnslmc0cb9fhd571awsbdvf063yvyg6zj1"; authors = [ "Manish Goregaokar " ]; @@ -15479,9 +15546,9 @@ rec { }; "zerovec" = rec { crateName = "zerovec"; - version = "0.11.8"; + version = "0.11.9"; edition = "2021"; - sha256 = "1n3xlvyba8riys9s8awy4xp533phqycr78nbsmvdkh86g3hn815v"; + sha256 = "0h3amsfmvqx93grkpy576z5r7nwfxx9bvvd8gq66g8g9rycjg2pm"; authors = [ "The ICU4X Project Developers" ]; @@ -15525,9 +15592,9 @@ rec { }; "zerovec-derive" = rec { crateName = "zerovec-derive"; - version = "0.11.6"; + version = "0.11.7"; edition = "2021"; - sha256 = "1ni5j8v99x3fcf3l8kp64b7aq4vf8y22jshfq74xs9mxkp1nzprl"; + sha256 = "0ypr1gq2nvb4mvwawcgyknbn408dsjcy3qhsrllxjf3pykdksx63"; procMacro = true; libName = "zerovec_derive"; authors = [ diff --git a/crate-hashes.json b/crate-hashes.json index ee845ebfe..6d48698b3 100644 --- a/crate-hashes.json +++ b/crate-hashes.json @@ -1,11 +1,11 @@ { - "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#k8s-version@0.1.4": "1r8yjfwvvyf16ji0a98vmlb1rnf67lvqxwqgn00b2k0rada60idj", - "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#stackable-certs@0.4.1": "1r8yjfwvvyf16ji0a98vmlb1rnf67lvqxwqgn00b2k0rada60idj", - "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#stackable-operator-derive@0.3.1": "1r8yjfwvvyf16ji0a98vmlb1rnf67lvqxwqgn00b2k0rada60idj", - "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#stackable-operator@0.121.0": "1r8yjfwvvyf16ji0a98vmlb1rnf67lvqxwqgn00b2k0rada60idj", - "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#stackable-shared@0.2.0": "1r8yjfwvvyf16ji0a98vmlb1rnf67lvqxwqgn00b2k0rada60idj", - "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#stackable-telemetry@0.6.5": "1r8yjfwvvyf16ji0a98vmlb1rnf67lvqxwqgn00b2k0rada60idj", - "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#stackable-versioned-macros@0.13.0": "1r8yjfwvvyf16ji0a98vmlb1rnf67lvqxwqgn00b2k0rada60idj", - "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#stackable-versioned@0.13.0": "1r8yjfwvvyf16ji0a98vmlb1rnf67lvqxwqgn00b2k0rada60idj", - "git+https://github.com/stackabletech//operator-rs.git?branch=feat%2Ftrack-changed-types#stackable-webhook@0.10.0": "1r8yjfwvvyf16ji0a98vmlb1rnf67lvqxwqgn00b2k0rada60idj" + "git+https://github.com/stackabletech//operator-rs.git?branch=main#k8s-version@0.1.4": "0jha2kdn4hnndrhjqgh99cgmcgk992vg2bg1mrkfmfik6x4icdha", + "git+https://github.com/stackabletech//operator-rs.git?branch=main#stackable-certs@0.4.1": "0jha2kdn4hnndrhjqgh99cgmcgk992vg2bg1mrkfmfik6x4icdha", + "git+https://github.com/stackabletech//operator-rs.git?branch=main#stackable-operator-derive@0.3.1": "0jha2kdn4hnndrhjqgh99cgmcgk992vg2bg1mrkfmfik6x4icdha", + "git+https://github.com/stackabletech//operator-rs.git?branch=main#stackable-operator@0.121.0": "0jha2kdn4hnndrhjqgh99cgmcgk992vg2bg1mrkfmfik6x4icdha", + "git+https://github.com/stackabletech//operator-rs.git?branch=main#stackable-shared@0.2.0": "0jha2kdn4hnndrhjqgh99cgmcgk992vg2bg1mrkfmfik6x4icdha", + "git+https://github.com/stackabletech//operator-rs.git?branch=main#stackable-telemetry@0.6.5": "0jha2kdn4hnndrhjqgh99cgmcgk992vg2bg1mrkfmfik6x4icdha", + "git+https://github.com/stackabletech//operator-rs.git?branch=main#stackable-versioned-macros@0.13.0": "0jha2kdn4hnndrhjqgh99cgmcgk992vg2bg1mrkfmfik6x4icdha", + "git+https://github.com/stackabletech//operator-rs.git?branch=main#stackable-versioned@0.13.0": "0jha2kdn4hnndrhjqgh99cgmcgk992vg2bg1mrkfmfik6x4icdha", + "git+https://github.com/stackabletech//operator-rs.git?branch=main#stackable-webhook@0.10.0": "0jha2kdn4hnndrhjqgh99cgmcgk992vg2bg1mrkfmfik6x4icdha" } \ No newline at end of file From 49a4a678255c2f0744a1f5fb378e09c01d0748d9 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Fri, 30 Oct 2026 13:21:20 +0100 Subject: [PATCH 23/34] docs: Update docs --- .../pages/usage-guide/catalogs/iceberg.adoc | 62 +++++++++++++++++-- .../pages/usage-guide/catalogs/index.adoc | 5 +- docs/modules/trino/partials/nav.adoc | 2 +- 3 files changed, 61 insertions(+), 8 deletions(-) diff --git a/docs/modules/trino/pages/usage-guide/catalogs/iceberg.adoc b/docs/modules/trino/pages/usage-guide/catalogs/iceberg.adoc index f8c32182d..614d285e0 100644 --- a/docs/modules/trino/pages/usage-guide/catalogs/iceberg.adoc +++ b/docs/modules/trino/pages/usage-guide/catalogs/iceberg.adoc @@ -1,11 +1,62 @@ = Apache Iceberg Apache Iceberg is a format for huge analytic tables designed to address some of the scaling issues with traditional Hive tables. -Iceberg depends on a Hive metastore being present and makes use of the same metastore ConfigMap used by the Hive connector. +Iceberg stores table metadata in a metadata catalog, which is configured in `spec.connector.iceberg.catalog`. +The following catalogs are supported: -You can deploy a Hive Metastore Stacklet with the xref:hive:index.adoc[]. +* `rest`: An https://trino.io/docs/current/object-storage/metastores.html#rest-catalog[Iceberg REST catalog] +* `hiveMetastore`: A Hive metastore, using the same metastore ConfigMap as the xref:usage-guide/catalogs/hive.adoc[] connector +* `userProvided`: The operator doesn't configure a catalog, you need to configure it yourself using `configOverrides` + +== Example Iceberg REST catalog configuration -== Example Iceberg catalog configuration +[source,yaml] +---- +apiVersion: trino.stackable.tech/v1alpha2 +kind: TrinoCatalog +metadata: + name: iceberg # <1> + labels: + trino: simple-trino +spec: + connector: + iceberg: + catalog: + rest: + uri: https://iceberg-rest-catalog.example.com # <2> + authentication: # <3> + oAuth2: + serverUri: https://idp.example.com/oauth2/token # <4> + clientCredentialsSecretName: trino-iceberg-client # <5> + s3: + inline: + host: test-minio + port: 9000 + accessStyle: Path + credentials: + secretClass: minio-credentials +--- +apiVersion: v1 +kind: Secret +metadata: + name: trino-iceberg-client +stringData: + clientId: trino + clientSecret: my-client-secret +---- +<1> The name of the catalog as it will appear in Trino +<2> The URI of the REST catalog server +<3> Optional, defaults to no authentication +<4> The endpoint to retrieve the access token from +<5> Name of a Secret containing the `clientId` and `clientSecret` keys, which are exchanged for a token using the OAuth2 client credentials flow. + Alternatively, use `tokenSecretName` to pass a Secret containing a static bearer token in the `token` key. + +The operator only supports a subset of the https://trino.io/docs/current/object-storage/metastores.html#rest-catalog[REST catalog properties]. +Use `configOverrides` to set additional ones. + +== Example Iceberg Hive metastore configuration + +You can deploy a Hive Metastore Stacklet with the xref:hive:index.adoc[]. [source,yaml] ---- @@ -19,8 +70,9 @@ spec: connector: # Specify iceberg here when defining a iceberg catalog iceberg: - metastore: - configMap: simple-hive # <2> + catalog: + hiveMetastore: + configMap: simple-hive # <2> s3: inline: host: test-minio diff --git a/docs/modules/trino/pages/usage-guide/catalogs/index.adoc b/docs/modules/trino/pages/usage-guide/catalogs/index.adoc index 6ed71e8d8..8d312af10 100644 --- a/docs/modules/trino/pages/usage-guide/catalogs/index.adoc +++ b/docs/modules/trino/pages/usage-guide/catalogs/index.adoc @@ -42,8 +42,9 @@ metadata: spec: connector: iceberg: - metastore: - configMap: simple-hive + catalog: + hiveMetastore: + configMap: simple-hive s3: inline: host: test-minio diff --git a/docs/modules/trino/partials/nav.adoc b/docs/modules/trino/partials/nav.adoc index a6147aa80..a452d0b17 100644 --- a/docs/modules/trino/partials/nav.adoc +++ b/docs/modules/trino/partials/nav.adoc @@ -33,7 +33,7 @@ * xref:trino:reference/index.adoc[] ** xref:trino:reference/crds.adoc[] *** {crd-ref}/trino.stackable.tech/v1alpha1/trinocluster{crd-ref-release}[TrinoCluster {external-link-icon}^] -*** {crd-ref}/trino.stackable.tech/v1alpha1/trinocatalog{crd-ref-release}[TrinoCatalog {external-link-icon}^] +*** {crd-ref}/trino.stackable.tech/v1alpha2/trinocatalog{crd-ref-release}[TrinoCatalog {external-link-icon}^] ** xref:trino:reference/security.adoc[] ** xref:trino:reference/commandline-parameters.adoc[] ** xref:trino:reference/environment-variables.adoc[] From c10d0141d7df439c44a6e0453cf6ed7914760c6d Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Fri, 30 Oct 2026 13:21:36 +0100 Subject: [PATCH 24/34] chore: Use v1alpha2 everywhere --- rust/operator-binary/src/main.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rust/operator-binary/src/main.rs b/rust/operator-binary/src/main.rs index 496be38aa..647b61627 100644 --- a/rust/operator-binary/src/main.rs +++ b/rust/operator-binary/src/main.rs @@ -126,7 +126,7 @@ async fn main() -> anyhow::Result<()> { )); let trino_catalog_crd_check = readiness_checks.register(format!( "CRD {crd} established", - crd = crd::catalog::v1alpha1::TrinoCatalog::crd_name() + crd = crd::catalog::v1alpha2::TrinoCatalog::crd_name() )); let webhook_server = create_webhook_server( @@ -189,7 +189,7 @@ async fn main() -> anyhow::Result<()> { ) .watches( watch_namespace - .get_api::>(&client), + .get_api::>(&client), watcher::Config::default(), move |catalog| { // TODO: Filter clusters more precisely based on the catalogLabelSelector to avoid unnecessary reconciles @@ -256,7 +256,7 @@ async fn main() -> anyhow::Result<()> { let delayed_trino_controller = async { signal::crd_established(&client, v1alpha1::TrinoCluster::crd_name()).await?; trino_cluster_crd_check.mark_passed(); - signal::crd_established(&client, crd::catalog::v1alpha1::TrinoCatalog::crd_name()) + signal::crd_established(&client, crd::catalog::v1alpha2::TrinoCatalog::crd_name()) .await?; trino_catalog_crd_check.mark_passed(); trino_controller.await From e38564df08f8900fede5c7dbe4da7ba2c85d3073 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Fri, 30 Oct 2026 13:21:51 +0100 Subject: [PATCH 25/34] test: Adopt tests --- .../kuttl/opa-authorization/20-install-trino.yaml.j2 | 5 +++-- tests/templates/kuttl/smoke/10-install-trino.yaml.j2 | 5 +++-- tests/templates/kuttl/smoke_aws/10-install-trino.yaml.j2 | 5 +++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/tests/templates/kuttl/opa-authorization/20-install-trino.yaml.j2 b/tests/templates/kuttl/opa-authorization/20-install-trino.yaml.j2 index 1b4faf6d6..2f7a53610 100644 --- a/tests/templates/kuttl/opa-authorization/20-install-trino.yaml.j2 +++ b/tests/templates/kuttl/opa-authorization/20-install-trino.yaml.j2 @@ -60,8 +60,9 @@ metadata: spec: connector: iceberg: - metastore: - configMap: hive # It's fine to reuse the existing HMS for tests. Not recommended for production though, there a dedicated HMS should be used. + catalog: + hiveMetastore: + configMap: hive # It's fine to reuse the existing HMS for tests. Not recommended for production though, there a dedicated HMS should be used. s3: reference: minio --- diff --git a/tests/templates/kuttl/smoke/10-install-trino.yaml.j2 b/tests/templates/kuttl/smoke/10-install-trino.yaml.j2 index 00cd71813..eb16365a2 100644 --- a/tests/templates/kuttl/smoke/10-install-trino.yaml.j2 +++ b/tests/templates/kuttl/smoke/10-install-trino.yaml.j2 @@ -44,8 +44,9 @@ metadata: spec: connector: iceberg: - metastore: - configMap: hive # It's fine to reuse the existing HMS for tests. Not recommended for production though, there a dedicated HMS should be used. + catalog: + hiveMetastore: + configMap: hive # It's fine to reuse the existing HMS for tests. Not recommended for production though, there a dedicated HMS should be used. s3: reference: garage hdfs: diff --git a/tests/templates/kuttl/smoke_aws/10-install-trino.yaml.j2 b/tests/templates/kuttl/smoke_aws/10-install-trino.yaml.j2 index 883cbf89d..73367a5ed 100644 --- a/tests/templates/kuttl/smoke_aws/10-install-trino.yaml.j2 +++ b/tests/templates/kuttl/smoke_aws/10-install-trino.yaml.j2 @@ -95,8 +95,9 @@ metadata: spec: connector: iceberg: - metastore: - configMap: hive # It's fine to reuse the existing HMS for tests. Not recommended for production though, there a dedicated HMS should be used. + catalog: + hiveMetastore: + configMap: hive # It's fine to reuse the existing HMS for tests. Not recommended for production though, there a dedicated HMS should be used. s3: reference: aws-s3 hdfs: From d5a2f286347bd48ee6c905f752a51bb7d22d044a Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Fri, 30 Oct 2026 13:25:48 +0100 Subject: [PATCH 26/34] changelog --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7596dafe7..2841432f4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ All notable changes to this project will be documented in this file. - Add `/ready` endpoint to the operator Deployment, which reports the CRD installation status ([#949]). - Coordinators now have a default affinity to the OPA Pods when OPA authorization is configured ([#924]). - Add support for 483 ([#956]). +- Support configuring an Iceberg REST catalog in the Iceberg connector, optionally authenticated + using OAuth2 client credentials or a bearer token ([#950]). ### Changed @@ -47,6 +49,10 @@ All notable changes to this project will be documented in this file. - Support Vector 0.58.0 ([#953], [#959], [#960]). - test: Bump hive to 4.2.1 ([#961]). - The operator Deployment runs with a restricted security context and a read-only root filesystem, so it can be deployed into namespaces that enforce the `restricted` Pod Security Standard ([#963]). +- Add `TrinoCatalog` version `v1alpha2`, which is now the storage version. `v1alpha1` objects are + converted automatically. In `v1alpha2`, the optional `spec.connector.iceberg.metastore` is replaced + by the required `spec.connector.iceberg.catalog`, which is one of `rest`, `hiveMetastore` or + `userProvided` ([#950]). ### Fixed @@ -80,6 +86,7 @@ All notable changes to this project will be documented in this file. [#944]: https://github.com/stackabletech/trino-operator/pull/944 [#945]: https://github.com/stackabletech/trino-operator/pull/945 [#949]: https://github.com/stackabletech/trino-operator/pull/949 +[#950]: https://github.com/stackabletech/trino-operator/pull/950 [#953]: https://github.com/stackabletech/trino-operator/pull/953 [#956]: https://github.com/stackabletech/trino-operator/pull/956 [#957]: https://github.com/stackabletech/trino-operator/pull/957 From c0e511358405708bda2962ef065f9dbb89c9b245 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Fri, 30 Oct 2026 13:26:04 +0100 Subject: [PATCH 27/34] docs: A few CRD docs improvements --- extra/crds.yaml | 23 +++++++++++++-------- rust/operator-binary/src/crd/catalog/mod.rs | 21 +++++++++++-------- 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/extra/crds.yaml b/extra/crds.yaml index 6c72186cd..3bdc5281e 100644 --- a/extra/crds.yaml +++ b/extra/crds.yaml @@ -4057,13 +4057,14 @@ spec: description: |- Connection to a metadata catalog, which will be used as a storage for metadata. - We support the following backends: + We support the following catalogs: - * REST catalog - * Hive metastore - * User provided + * `rest`: An Iceberg REST catalog + * `hiveMetastore`: A Hive metastore + * `userProvided`: The operator doesn't configure a catalog, the user needs to do that, + e.g. using `configOverrides` - Details can be found on the corresponding documentation + Learn more in the [Iceberg catalog documentation](https://docs.stackable.tech/home/nightly/trino/usage-guide/catalogs/iceberg). oneOf: - required: - rest @@ -4150,7 +4151,8 @@ spec: hdfs: description: |- Connection to an HDFS cluster. - Please make sure that the underlying Hive metastore also has access to the HDFS. + Please make sure that the metadata catalog (e.g. the Hive metastore or REST catalog) + also has access to the HDFS. nullable: true properties: configMap: @@ -4165,7 +4167,8 @@ spec: s3: description: |- Connection to an S3 store. - Please make sure that the underlying Hive metastore also has access to the S3 store. + Please make sure that the metadata catalog (e.g. the Hive metastore or REST catalog) + also has access to the S3 store. Learn more about S3 configuration in the [S3 concept docs](https://docs.stackable.tech/home/nightly/concepts/s3). nullable: true oneOf: @@ -4993,7 +4996,8 @@ spec: hdfs: description: |- Connection to an HDFS cluster. - Please make sure that the underlying Hive metastore also has access to the HDFS. + Please make sure that the metadata catalog (e.g. the Hive metastore or REST catalog) + also has access to the HDFS. nullable: true properties: configMap: @@ -5025,7 +5029,8 @@ spec: s3: description: |- Connection to an S3 store. - Please make sure that the underlying Hive metastore also has access to the S3 store. + Please make sure that the metadata catalog (e.g. the Hive metastore or REST catalog) + also has access to the S3 store. Learn more about S3 configuration in the [S3 concept docs](https://docs.stackable.tech/home/nightly/concepts/s3). nullable: true oneOf: diff --git a/rust/operator-binary/src/crd/catalog/mod.rs b/rust/operator-binary/src/crd/catalog/mod.rs index 7da82d091..1dc0bd357 100644 --- a/rust/operator-binary/src/crd/catalog/mod.rs +++ b/rust/operator-binary/src/crd/catalog/mod.rs @@ -143,13 +143,14 @@ pub mod versioned { pub struct IcebergConnector { /// Connection to a metadata catalog, which will be used as a storage for metadata. /// - /// We support the following backends: + /// We support the following catalogs: /// - /// * REST catalog - /// * Hive metastore - /// * User provided + /// * `rest`: An Iceberg REST catalog + /// * `hiveMetastore`: A Hive metastore + /// * `userProvided`: The operator doesn't configure a catalog, the user needs to do that, + /// e.g. using `configOverrides` /// - /// Details can be found on the corresponding documentation + /// Learn more in the [Iceberg catalog documentation](DOCS_BASE_URL_PLACEHOLDER/trino/usage-guide/catalogs/iceberg). #[versioned(changed( in = "v1alpha2", previous_name = "metastore", @@ -164,12 +165,14 @@ pub mod versioned { pub catalog: IcebergCatalogConnection, /// Connection to an S3 store. - /// Please make sure that the underlying Hive metastore also has access to the S3 store. + /// Please make sure that the metadata catalog (e.g. the Hive metastore or REST catalog) + /// also has access to the S3 store. /// Learn more about S3 configuration in the [S3 concept docs](DOCS_BASE_URL_PLACEHOLDER/concepts/s3). pub s3: Option, /// Connection to an HDFS cluster. - /// Please make sure that the underlying Hive metastore also has access to the HDFS. + /// Please make sure that the metadata catalog (e.g. the Hive metastore or REST catalog) + /// also has access to the HDFS. pub hdfs: Option, } } @@ -199,8 +202,8 @@ impl From for Option { IcebergCatalogConnection::HiveMetastore(hive_metastore_connection) => { Some(hive_metastore_connection) } - // Earlier the metastore connection was optional, so that users could bring their ow - // (e.g. REST catalog, as the operator didn't support that back than). + // Earlier the metastore connection was optional, so that users could bring their own + // (e.g. a REST catalog, as the operator didn't support that back then). IcebergCatalogConnection::UserProvided {} => None, } } From 9f86a8b6909d4819f260b5f52e518425a3596ad0 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Fri, 30 Oct 2026 13:29:13 +0100 Subject: [PATCH 28/34] refactor: Add helper function --- rust/operator-binary/src/catalog/config.rs | 14 ++++++-- rust/operator-binary/src/catalog/iceberg.rs | 39 ++++++++------------- 2 files changed, 27 insertions(+), 26 deletions(-) diff --git a/rust/operator-binary/src/catalog/config.rs b/rust/operator-binary/src/catalog/config.rs index 2ca97bc78..345e78ba5 100644 --- a/rust/operator-binary/src/catalog/config.rs +++ b/rust/operator-binary/src/catalog/config.rs @@ -79,15 +79,25 @@ impl CatalogConfig { ) { let property = property.into(); let env_name = calculate_env_name(&self.name, &property); + self.add_env_from_secret(&env_name, secret_key_selector); + self.add_property(&property, format!("${{ENV:{env_name}}}")); + } + + /// Adds an env var with the given name to every Trino container, which is read from the given + /// Secret key. Unlike [`Self::add_env_property_from_secret`], no property is set. + pub fn add_env_from_secret( + &mut self, + env_name: impl Into, + secret_key_selector: SecretKeySelector, + ) { self.env_bindings.push(EnvVar { - name: env_name.clone(), + name: env_name.into(), value_from: Some(EnvVarSource { secret_key_ref: Some(secret_key_selector), ..Default::default() }), ..Default::default() }); - self.add_property(&property, format!("${{ENV:{env_name}}}")); } pub fn add_env_property_from_config_map( diff --git a/rust/operator-binary/src/catalog/iceberg.rs b/rust/operator-binary/src/catalog/iceberg.rs index ab6735b79..8be7a66a1 100644 --- a/rust/operator-binary/src/catalog/iceberg.rs +++ b/rust/operator-binary/src/catalog/iceberg.rs @@ -1,7 +1,6 @@ use async_trait::async_trait; use stackable_operator::{ - client::Client, - k8s_openapi::api::core::v1::{EnvVar, EnvVarSource, SecretKeySelector}, + client::Client, k8s_openapi::api::core::v1::SecretKeySelector, v2::types::kubernetes::NamespaceName, }; @@ -111,30 +110,22 @@ impl ExtendCatalogConfig for IcebergRestCatalogConnection { ), ); - catalog_config.env_bindings.push(EnvVar { - name: client_id_env_name, - value_from: Some(EnvVarSource { - secret_key_ref: Some(SecretKeySelector { - name: secret_name.to_owned(), - key: "clientId".to_owned(), - ..Default::default() - }), + catalog_config.add_env_from_secret( + client_id_env_name, + SecretKeySelector { + name: secret_name.to_owned(), + key: "clientId".to_owned(), ..Default::default() - }), - ..Default::default() - }); - catalog_config.env_bindings.push(EnvVar { - name: client_secret_env_name, - value_from: Some(EnvVarSource { - secret_key_ref: Some(SecretKeySelector { - name: secret_name.to_owned(), - key: "clientSecret".to_owned(), - ..Default::default() - }), + }, + ); + catalog_config.add_env_from_secret( + client_secret_env_name, + SecretKeySelector { + name: secret_name.to_owned(), + key: "clientSecret".to_owned(), ..Default::default() - }), - ..Default::default() - }); + }, + ); } IcebergRestCatalogOAuthCredential::TokenSecretName(secret_name) => { catalog_config.add_env_property_from_secret( From d9f11d5f9a541f8d22f1233836d01fc8ab66fe54 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Fri, 30 Oct 2026 13:34:02 +0100 Subject: [PATCH 29/34] test: v1alpha1 -> v1alpha2 --- rust/operator-binary/src/crd/catalog/generic.rs | 6 +++--- rust/operator-binary/src/crd/catalog/mod.rs | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/rust/operator-binary/src/crd/catalog/generic.rs b/rust/operator-binary/src/crd/catalog/generic.rs index fc21e6e16..07d077301 100644 --- a/rust/operator-binary/src/crd/catalog/generic.rs +++ b/rust/operator-binary/src/crd/catalog/generic.rs @@ -38,7 +38,7 @@ pub enum Property { #[cfg(test)] mod tests { use super::*; - use crate::crd::catalog::v1alpha1; + use crate::crd::catalog::v1alpha2; #[test] fn test_cr_parsing() { @@ -65,12 +65,12 @@ mod tests { name: my-postgresql-credentials-secret key: password "#; - let catalog: v1alpha1::TrinoCatalog = + let catalog: v1alpha2::TrinoCatalog = stackable_operator::utils::yaml_from_str_singleton_map(input).unwrap(); assert_eq!( catalog.spec.connector, - v1alpha1::TrinoCatalogConnector::Generic(GenericConnector { + v1alpha2::TrinoCatalogConnector::Generic(GenericConnector { connector_name: "postgresql".to_string(), properties: BTreeMap::from([ ( diff --git a/rust/operator-binary/src/crd/catalog/mod.rs b/rust/operator-binary/src/crd/catalog/mod.rs index 1dc0bd357..1bbda65fa 100644 --- a/rust/operator-binary/src/crd/catalog/mod.rs +++ b/rust/operator-binary/src/crd/catalog/mod.rs @@ -239,7 +239,7 @@ mod tests { #[test] fn test_crd_generation() { - TrinoCatalog::merged_crd(TrinoCatalogVersion::V1Alpha1).unwrap(); + TrinoCatalog::merged_crd(TrinoCatalogVersion::V1Alpha2).unwrap(); } impl RoundtripTestData for v1alpha1::TrinoCatalogSpec { From e9aedb966c04e2b00d0653489935c195d721b6d9 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Fri, 30 Oct 2026 13:50:38 +0100 Subject: [PATCH 30/34] docs: Clarify on teh oauth2 serverUri --- .../pages/usage-guide/catalogs/iceberg.adoc | 17 ++++++++++++++++- extra/crds.yaml | 11 ++++++++++- rust/operator-binary/src/crd/catalog/iceberg.rs | 10 +++++++++- 3 files changed, 35 insertions(+), 3 deletions(-) diff --git a/docs/modules/trino/pages/usage-guide/catalogs/iceberg.adoc b/docs/modules/trino/pages/usage-guide/catalogs/iceberg.adoc index 614d285e0..483dc0725 100644 --- a/docs/modules/trino/pages/usage-guide/catalogs/iceberg.adoc +++ b/docs/modules/trino/pages/usage-guide/catalogs/iceberg.adoc @@ -47,13 +47,28 @@ stringData: <1> The name of the catalog as it will appear in Trino <2> The URI of the REST catalog server <3> Optional, defaults to no authentication -<4> The endpoint to retrieve the access token from +<4> The token endpoint of the OAuth2 server, see <> <5> Name of a Secret containing the `clientId` and `clientSecret` keys, which are exchanged for a token using the OAuth2 client credentials flow. Alternatively, use `tokenSecretName` to pass a Secret containing a static bearer token in the `token` key. The operator only supports a subset of the https://trino.io/docs/current/object-storage/metastores.html#rest-catalog[REST catalog properties]. Use `configOverrides` to set additional ones. +[#oauth2-server-uri] +=== OAuth2 server URI + +`serverUri` is the token endpoint of the OAuth2 server. +What it is used for depends on the credential: + +* `clientCredentialsSecretName`: Trino fetches its token from this endpoint on startup and refreshes it there before it expires. +* `tokenSecretName`: Trino uses the token as is. + If the token is a JWT with an `exp` claim, Trino tries to refresh it before it expires by exchanging it at this endpoint (OAuth2 token exchange). + If the refresh fails, Trino logs a warning and keeps using the current token. + A token that isn't a JWT is never refreshed, so the endpoint is never called. + +`serverUri` is required even for tokens that are never refreshed. +Without it, the Iceberg client used by Trino would fall back to the deprecated `/v1/oauth/tokens` endpoint of the REST catalog, which is planned to be removed (see https://github.com/apache/iceberg/issues/10537[apache/iceberg#10537]). + == Example Iceberg Hive metastore configuration You can deploy a Hive Metastore Stacklet with the xref:hive:index.adoc[]. diff --git a/extra/crds.yaml b/extra/crds.yaml index 3bdc5281e..0280bc51a 100644 --- a/extra/crds.yaml +++ b/extra/crds.yaml @@ -4121,7 +4121,16 @@ spec: The Secret needs to contain the `clientId` and `clientSecret` keys. type: string serverUri: - description: The endpoint to retrieve access token from OAuth2 Server. + description: |- + The token endpoint of the OAuth2 server. It is used to + + * fetch a token using the client credentials (`clientCredentialsSecretName`) and + * refresh the token before it expires. A static token (`tokenSecretName`) is only + refreshed if it is a JWT with an `exp` claim, otherwise the endpoint is never called. + + It is required nevertheless, as without it the Iceberg client would fall back to the + deprecated `/v1/oauth/tokens` endpoint of the REST catalog, which is planned to be + removed (see ). format: uri type: string tokenSecretName: diff --git a/rust/operator-binary/src/crd/catalog/iceberg.rs b/rust/operator-binary/src/crd/catalog/iceberg.rs index a0bdadf97..44349747b 100644 --- a/rust/operator-binary/src/crd/catalog/iceberg.rs +++ b/rust/operator-binary/src/crd/catalog/iceberg.rs @@ -41,7 +41,15 @@ pub enum IcebergRestCatalogAuthentication { /// `configOverrides` to be able to set all [available properties](https://trino.io/docs/current/object-storage/metastores.html#iceberg-specific-metastores). #[serde(rename_all = "camelCase")] OAuth2 { - /// The endpoint to retrieve access token from OAuth2 Server. + /// The token endpoint of the OAuth2 server. It is used to + /// + /// * fetch a token using the client credentials (`clientCredentialsSecretName`) and + /// * refresh the token before it expires. A static token (`tokenSecretName`) is only + /// refreshed if it is a JWT with an `exp` claim, otherwise the endpoint is never called. + /// + /// It is required nevertheless, as without it the Iceberg client would fall back to the + /// deprecated `/v1/oauth/tokens` endpoint of the REST catalog, which is planned to be + /// removed (see ). server_uri: Url, // No docs will show up. From eedbc353bb9161e3c3f4bbca09e6dc8e298386a8 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Fri, 30 Oct 2026 15:02:51 +0100 Subject: [PATCH 31/34] chore: Remodel URLs to hostname, port, path and TLS client details --- .../pages/usage-guide/catalogs/iceberg.adoc | 45 ++++-- extra/crds.yaml | 145 ++++++++++++++++-- rust/operator-binary/src/catalog/commons.rs | 2 +- rust/operator-binary/src/catalog/iceberg.rs | 42 ++++- rust/operator-binary/src/catalog/mod.rs | 17 ++ rust/operator-binary/src/config/mod.rs | 1 + rust/operator-binary/src/config/s3.rs | 80 +--------- rust/operator-binary/src/config/tls.rs | 80 ++++++++++ .../src/crd/catalog/iceberg.rs | 120 ++++++++++++++- rust/operator-binary/src/crd/catalog/mod.rs | 49 +++++- 10 files changed, 459 insertions(+), 122 deletions(-) create mode 100644 rust/operator-binary/src/config/tls.rs diff --git a/docs/modules/trino/pages/usage-guide/catalogs/iceberg.adoc b/docs/modules/trino/pages/usage-guide/catalogs/iceberg.adoc index 483dc0725..37a9f99aa 100644 --- a/docs/modules/trino/pages/usage-guide/catalogs/iceberg.adoc +++ b/docs/modules/trino/pages/usage-guide/catalogs/iceberg.adoc @@ -23,11 +23,25 @@ spec: iceberg: catalog: rest: - uri: https://iceberg-rest-catalog.example.com # <2> - authentication: # <3> + hostname: iceberg-rest-catalog.example.com # <2> + port: 9001 # <3> + path: /catalog # <4> + tls: # <5> + verification: + server: + caCert: + secretClass: tls + authentication: # <6> oAuth2: - serverUri: https://idp.example.com/oauth2/token # <4> - clientCredentialsSecretName: trino-iceberg-client # <5> + server: # <7> + hostname: idp.example.com + path: /oauth2/token + tls: + verification: + server: + caCert: + webPki: {} + clientCredentialsSecretName: trino-iceberg-client # <8> s3: inline: host: test-minio @@ -45,19 +59,24 @@ stringData: clientSecret: my-client-secret ---- <1> The name of the catalog as it will appear in Trino -<2> The URI of the REST catalog server -<3> Optional, defaults to no authentication -<4> The token endpoint of the OAuth2 server, see <> -<5> Name of a Secret containing the `clientId` and `clientSecret` keys, which are exchanged for a token using the OAuth2 client credentials flow. +<2> The hostname of the REST catalog server +<3> Optional, defaults to 443 if TLS is used and to 80 otherwise +<4> Optional, defaults to `/` +<5> Optional, uses the same TLS configuration as xref:usage-guide/s3.adoc#tls[S3 connections]. + If not specified, no TLS is used. Disabling the TLS verification (`verification.none`) is not supported. +<6> Optional, defaults to no authentication +<7> The token endpoint of the OAuth2 server, see <>. + It takes the same `hostname`, `port`, `path` and `tls` fields as the REST catalog. +<8> Name of a Secret containing the `clientId` and `clientSecret` keys, which are exchanged for a token using the OAuth2 client credentials flow. Alternatively, use `tokenSecretName` to pass a Secret containing a static bearer token in the `token` key. The operator only supports a subset of the https://trino.io/docs/current/object-storage/metastores.html#rest-catalog[REST catalog properties]. Use `configOverrides` to set additional ones. -[#oauth2-server-uri] -=== OAuth2 server URI +[#oauth2-server] +=== OAuth2 server -`serverUri` is the token endpoint of the OAuth2 server. +`oAuth2.server` points to the token endpoint of the OAuth2 server. What it is used for depends on the credential: * `clientCredentialsSecretName`: Trino fetches its token from this endpoint on startup and refreshes it there before it expires. @@ -66,8 +85,8 @@ What it is used for depends on the credential: If the refresh fails, Trino logs a warning and keeps using the current token. A token that isn't a JWT is never refreshed, so the endpoint is never called. -`serverUri` is required even for tokens that are never refreshed. -Without it, the Iceberg client used by Trino would fall back to the deprecated `/v1/oauth/tokens` endpoint of the REST catalog, which is planned to be removed (see https://github.com/apache/iceberg/issues/10537[apache/iceberg#10537]). +The OAuth2 server is required even for tokens that are never refreshed. +Without it, the Iceberg client used by Trino would fall back to the deprecated `/v1/oauth/tokens` endpoint of the REST catalog, which is planned to be removed (see https://github.com/apache/iceberg/issues/10537[apache/iceberg#10537]). == Example Iceberg Hive metastore configuration diff --git a/extra/crds.yaml b/extra/crds.yaml index 0280bc51a..26f96facd 100644 --- a/extra/crds.yaml +++ b/extra/crds.yaml @@ -4120,19 +4120,85 @@ spec: The Secret needs to contain the `clientId` and `clientSecret` keys. type: string - serverUri: + server: description: |- - The token endpoint of the OAuth2 server. It is used to + The OAuth2 server endpoint, which needs to point to the token endpoint. + It is used to * fetch a token using the client credentials (`clientCredentialsSecretName`) and * refresh the token before it expires. A static token (`tokenSecretName`) is only refreshed if it is a JWT with an `exp` claim, otherwise the endpoint is never called. It is required nevertheless, as without it the Iceberg client would fall back to the - deprecated `/v1/oauth/tokens` endpoint of the REST catalog, which is planned to be + deprecated `/v1/oauth/tokens` endpoint of the REST catalog, which is planned to be removed (see ). - format: uri - type: string + properties: + hostname: + description: |- + Hostname of the server without any protocol, port or path. + For example: `iceberg-rest-catalog.example.com`. + type: string + path: + default: / + description: Path of the endpoint on the server, e.g. `/catalog`. Defaults to `/`. + type: string + port: + description: |- + Port the server listens on. + Defaults to 443 if TLS is used and to 80 otherwise. + format: uint16 + maximum: 65535.0 + minimum: 0.0 + nullable: true + type: integer + tls: + description: Use a TLS connection. If not specified no TLS will be used. + nullable: true + properties: + verification: + description: The verification method used to verify the certificates of the server and/or the client. + oneOf: + - required: + - none + - required: + - server + properties: + none: + description: Use TLS but don't verify certificates. + type: object + server: + description: Use TLS and a CA certificate to verify the server. + properties: + caCert: + description: CA cert to verify the server. + oneOf: + - required: + - webPki + - required: + - secretClass + properties: + secretClass: + description: |- + Name of the [SecretClass](https://docs.stackable.tech/home/nightly/secret-operator/secretclass) which will provide the CA certificate. + Note that a SecretClass does not need to have a key but can also work with just a CA certificate, + so if you got provided with a CA cert but don't have access to the key you can still use this method. + type: string + webPki: + description: |- + Use TLS and the CA certificates trusted by the common web browsers to verify the server. + This can be useful when you e.g. use public AWS S3 or other public available services. + type: object + type: object + required: + - caCert + type: object + type: object + required: + - verification + type: object + required: + - hostname + type: object tokenSecretName: description: |- Authenticate using a bearer token. @@ -4141,15 +4207,74 @@ spec: The Secret needs to contain the `token` key. type: string required: - - serverUri + - server type: object type: object - uri: - description: URL of the rest catalog server. - format: uri + hostname: + description: |- + Hostname of the server without any protocol, port or path. + For example: `iceberg-rest-catalog.example.com`. type: string + path: + default: / + description: Path of the endpoint on the server, e.g. `/catalog`. Defaults to `/`. + type: string + port: + description: |- + Port the server listens on. + Defaults to 443 if TLS is used and to 80 otherwise. + format: uint16 + maximum: 65535.0 + minimum: 0.0 + nullable: true + type: integer + tls: + description: Use a TLS connection. If not specified no TLS will be used. + nullable: true + properties: + verification: + description: The verification method used to verify the certificates of the server and/or the client. + oneOf: + - required: + - none + - required: + - server + properties: + none: + description: Use TLS but don't verify certificates. + type: object + server: + description: Use TLS and a CA certificate to verify the server. + properties: + caCert: + description: CA cert to verify the server. + oneOf: + - required: + - webPki + - required: + - secretClass + properties: + secretClass: + description: |- + Name of the [SecretClass](https://docs.stackable.tech/home/nightly/secret-operator/secretclass) which will provide the CA certificate. + Note that a SecretClass does not need to have a key but can also work with just a CA certificate, + so if you got provided with a CA cert but don't have access to the key you can still use this method. + type: string + webPki: + description: |- + Use TLS and the CA certificates trusted by the common web browsers to verify the server. + This can be useful when you e.g. use public AWS S3 or other public available services. + type: object + type: object + required: + - caCert + type: object + type: object + required: + - verification + type: object required: - - uri + - hostname type: object userProvided: description: |- diff --git a/rust/operator-binary/src/catalog/commons.rs b/rust/operator-binary/src/catalog/commons.rs index d4955c113..05185471b 100644 --- a/rust/operator-binary/src/catalog/commons.rs +++ b/rust/operator-binary/src/catalog/commons.rs @@ -102,7 +102,7 @@ impl ExtendCatalogConfig for s3::v1alpha1::InlineConnectionOrReference { } catalog_config.init_container_extra_start_commands.extend( - config::s3::s3_tls_truststore_commands(&s3.tls) + config::tls::tls_truststore_commands(&s3.tls) .map_err(|_| S3TlsNoVerificationNotSupportedSnafu.build())?, ); diff --git a/rust/operator-binary/src/catalog/iceberg.rs b/rust/operator-binary/src/catalog/iceberg.rs index 8be7a66a1..ac3adc1a7 100644 --- a/rust/operator-binary/src/catalog/iceberg.rs +++ b/rust/operator-binary/src/catalog/iceberg.rs @@ -1,4 +1,5 @@ use async_trait::async_trait; +use snafu::ResultExt; use stackable_operator::{ client::Client, k8s_openapi::api::core::v1::SecretKeySelector, v2::types::kubernetes::NamespaceName, @@ -8,11 +9,16 @@ use crate::{ catalog::{ ExtendCatalogConfig, FromTrinoCatalogError, ToCatalogConfig, config::{CatalogConfig, calculate_env_name}, + from_trino_catalog_error::{ + BuildIcebergRestUrlSnafu, ConfigureIcebergRestTlsSnafu, + IcebergRestTlsNoVerificationNotSupportedSnafu, + }, }, + config, crd::catalog::{ TrinoCatalogName, iceberg::{ - IcebergCatalogConnection, IcebergRestCatalogAuthentication, + HttpEndpoint, IcebergCatalogConnection, IcebergRestCatalogAuthentication, IcebergRestCatalogConnection, IcebergRestCatalogOAuthCredential, }, v1alpha2::IcebergConnector, @@ -78,22 +84,24 @@ impl ExtendCatalogConfig for IcebergRestCatalogConnection { _client: &Client, ) -> Result<(), FromTrinoCatalogError> { catalog_config.add_property("iceberg.catalog.type", "rest"); - catalog_config.add_property("iceberg.rest-catalog.uri", self.uri.as_str()); + catalog_config.add_property( + "iceberg.rest-catalog.uri", + self.endpoint.url().context(BuildIcebergRestUrlSnafu)?, + ); + add_endpoint_tls(catalog_config, &self.endpoint)?; // We explicitly use a match here to catch further additions match &self.authentication { IcebergRestCatalogAuthentication::None {} => { catalog_config.add_property("iceberg.rest-catalog.security", "NONE"); } - IcebergRestCatalogAuthentication::OAuth2 { - server_uri, - credential, - } => { + IcebergRestCatalogAuthentication::OAuth2 { server, credential } => { catalog_config.add_property("iceberg.rest-catalog.security", "OAUTH2"); catalog_config.add_property( "iceberg.rest-catalog.oauth2.server-uri", - server_uri.as_str(), + server.url().context(BuildIcebergRestUrlSnafu)?, ); + add_endpoint_tls(catalog_config, server)?; match credential { IcebergRestCatalogOAuthCredential::ClientCredentialsSecretName(secret_name) => { // We can't use `add_env_property_from_secret`, as we need to concatenate @@ -144,3 +152,23 @@ impl ExtendCatalogConfig for IcebergRestCatalogConnection { Ok(()) } } + +/// Adds the CA certificate of the given endpoint (if any) to the truststore of Trino. +fn add_endpoint_tls( + catalog_config: &mut CatalogConfig, + endpoint: &HttpEndpoint, +) -> Result<(), FromTrinoCatalogError> { + let (volumes, mounts) = endpoint + .tls + .volumes_and_mounts() + .context(ConfigureIcebergRestTlsSnafu)?; + catalog_config.volumes.extend(volumes); + catalog_config.volume_mounts.extend(mounts); + + catalog_config.init_container_extra_start_commands.extend( + config::tls::tls_truststore_commands(&endpoint.tls) + .map_err(|_| IcebergRestTlsNoVerificationNotSupportedSnafu.build())?, + ); + + Ok(()) +} diff --git a/rust/operator-binary/src/catalog/mod.rs b/rust/operator-binary/src/catalog/mod.rs index 2f5586e63..ff90bde77 100644 --- a/rust/operator-binary/src/catalog/mod.rs +++ b/rust/operator-binary/src/catalog/mod.rs @@ -51,6 +51,23 @@ pub enum FromTrinoCatalogError { GetPostgresConnectionDetails { source: stackable_operator::database_connections::Error, }, + + #[snafu(display("failed to build the URL of the Iceberg REST catalog or its OAuth2 server"))] + BuildIcebergRestUrl { + source: crate::crd::catalog::iceberg::HttpEndpointError, + }, + + #[snafu(display( + "failed to configure the TLS volumes of the Iceberg REST catalog or its OAuth2 server" + ))] + ConfigureIcebergRestTls { + source: stackable_operator::commons::tls_verification::TlsClientDetailsError, + }, + + #[snafu(display( + "Trino does not support disabling the TLS verification of the Iceberg REST catalog or its OAuth2 server" + ))] + IcebergRestTlsNoVerificationNotSupported, } #[async_trait] diff --git a/rust/operator-binary/src/config/mod.rs b/rust/operator-binary/src/config/mod.rs index 152d50804..efef727e8 100644 --- a/rust/operator-binary/src/config/mod.rs +++ b/rust/operator-binary/src/config/mod.rs @@ -2,3 +2,4 @@ pub mod client_protocol; pub mod fault_tolerant_execution; pub mod jvm; pub mod s3; +pub mod tls; diff --git a/rust/operator-binary/src/config/s3.rs b/rust/operator-binary/src/config/s3.rs index 4705bb448..5d9afe336 100644 --- a/rust/operator-binary/src/config/s3.rs +++ b/rust/operator-binary/src/config/s3.rs @@ -3,12 +3,11 @@ use std::collections::BTreeMap; use snafu::{ResultExt, Snafu}; use stackable_operator::{ client::Client, - commons::tls_verification::{CaCert, TlsClientDetails, TlsServerVerification, TlsVerification}, crd::s3, k8s_openapi::api::core::v1::{Volume, VolumeMount}, }; -use crate::{controller::build::command, crd::STACKABLE_CLIENT_TLS_DIR}; +use crate::config::tls::tls_truststore_commands; #[derive(Snafu, Debug)] pub enum Error { @@ -21,37 +20,6 @@ pub enum Error { S3TlsNoVerificationNotSupported, } -/// Returned by [`s3_tls_truststore_commands`] when an S3 connection disables TLS verification, -/// which Trino does not support. -#[derive(Debug)] -pub struct S3TlsVerificationDisabled; - -/// Build the init-container commands that add an S3 server's CA certificate to the client -/// truststore. -/// -/// Returns an empty list when no extra trust setup is needed (TLS disabled, or WebPKI -/// verification), and [`S3TlsVerificationDisabled`] when TLS verification is turned off (which -/// Trino rejects). Shared by the spooling/exchange S3 config and the S3 catalog connection. -pub fn s3_tls_truststore_commands( - tls: &TlsClientDetails, -) -> Result, S3TlsVerificationDisabled> { - let Some(tls_config) = tls.tls.as_ref() else { - return Ok(Vec::new()); - }; - match &tls_config.verification { - TlsVerification::None {} => Err(S3TlsVerificationDisabled), - TlsVerification::Server(TlsServerVerification { - ca_cert: CaCert::WebPki {}, - }) => Ok(Vec::new()), - TlsVerification::Server(TlsServerVerification { - ca_cert: CaCert::SecretClass(_), - }) => Ok(tls - .tls_ca_cert_mount_path() - .map(|ca_cert| command::add_cert_to_truststore(&ca_cert, STACKABLE_CLIENT_TLS_DIR)) - .unwrap_or_default()), - } -} - pub struct ResolvedS3Config { /// Properties to add to config.properties pub properties: BTreeMap, @@ -123,54 +91,10 @@ impl ResolvedS3Config { } resolved_config.init_container_extra_start_commands.extend( - s3_tls_truststore_commands(&s3_connection.tls) + tls_truststore_commands(&s3_connection.tls) .map_err(|_| Error::S3TlsNoVerificationNotSupported)?, ); Ok(resolved_config) } } - -#[cfg(test)] -mod tests { - use stackable_operator::commons::tls_verification::Tls; - - use super::*; - - fn tls_details(verification: Option) -> TlsClientDetails { - TlsClientDetails { - tls: verification.map(|verification| Tls { verification }), - } - } - - #[test] - fn no_tls_yields_no_truststore_commands() { - assert!( - s3_tls_truststore_commands(&tls_details(None)) - .unwrap() - .is_empty() - ); - } - - #[test] - fn webpki_verification_yields_no_truststore_commands() { - let details = tls_details(Some(TlsVerification::Server(TlsServerVerification { - ca_cert: CaCert::WebPki {}, - }))); - assert!(s3_tls_truststore_commands(&details).unwrap().is_empty()); - } - - #[test] - fn secret_class_verification_yields_truststore_commands() { - let details = tls_details(Some(TlsVerification::Server(TlsServerVerification { - ca_cert: CaCert::SecretClass("tls".to_string()), - }))); - assert!(!s3_tls_truststore_commands(&details).unwrap().is_empty()); - } - - #[test] - fn disabled_verification_is_rejected() { - let details = tls_details(Some(TlsVerification::None {})); - assert!(s3_tls_truststore_commands(&details).is_err()); - } -} diff --git a/rust/operator-binary/src/config/tls.rs b/rust/operator-binary/src/config/tls.rs new file mode 100644 index 000000000..46517f89a --- /dev/null +++ b/rust/operator-binary/src/config/tls.rs @@ -0,0 +1,80 @@ +use stackable_operator::commons::tls_verification::{ + CaCert, TlsClientDetails, TlsServerVerification, TlsVerification, +}; + +use crate::{controller::build::command, crd::STACKABLE_CLIENT_TLS_DIR}; + +/// Returned by [`tls_truststore_commands`] when a connection disables TLS verification, which +/// Trino does not support. +#[derive(Debug)] +pub struct TlsVerificationDisabled; + +/// Build the init-container commands that add a server's CA certificate to the client truststore. +/// +/// Returns an empty list when no extra trust setup is needed (TLS disabled, or WebPKI +/// verification), and [`TlsVerificationDisabled`] when TLS verification is turned off (which +/// Trino rejects). Shared by the spooling/exchange S3 config, the S3 catalog connection and the +/// Iceberg REST catalog connection. +pub fn tls_truststore_commands( + tls: &TlsClientDetails, +) -> Result, TlsVerificationDisabled> { + let Some(tls_config) = tls.tls.as_ref() else { + return Ok(Vec::new()); + }; + match &tls_config.verification { + TlsVerification::None {} => Err(TlsVerificationDisabled), + TlsVerification::Server(TlsServerVerification { + ca_cert: CaCert::WebPki {}, + }) => Ok(Vec::new()), + TlsVerification::Server(TlsServerVerification { + ca_cert: CaCert::SecretClass(_), + }) => Ok(tls + .tls_ca_cert_mount_path() + .map(|ca_cert| command::add_cert_to_truststore(&ca_cert, STACKABLE_CLIENT_TLS_DIR)) + .unwrap_or_default()), + } +} + +#[cfg(test)] +mod tests { + use stackable_operator::commons::tls_verification::Tls; + + use super::*; + + fn tls_details(verification: Option) -> TlsClientDetails { + TlsClientDetails { + tls: verification.map(|verification| Tls { verification }), + } + } + + #[test] + fn no_tls_yields_no_truststore_commands() { + assert!( + tls_truststore_commands(&tls_details(None)) + .unwrap() + .is_empty() + ); + } + + #[test] + fn webpki_verification_yields_no_truststore_commands() { + let details = tls_details(Some(TlsVerification::Server(TlsServerVerification { + ca_cert: CaCert::WebPki {}, + }))); + assert!(tls_truststore_commands(&details).unwrap().is_empty()); + } + + #[test] + fn secret_class_verification_yields_truststore_commands() { + let details = tls_details(Some(TlsVerification::Server(TlsServerVerification { + ca_cert: CaCert::SecretClass("tls".to_string()), + }))); + assert!(!tls_truststore_commands(&details).unwrap().is_empty()); + } + + #[test] + fn disabled_verification_is_rejected() { + let details = tls_details(Some(TlsVerification::None {})); + assert!(tls_truststore_commands(&details).is_err()); + } +} diff --git a/rust/operator-binary/src/crd/catalog/iceberg.rs b/rust/operator-binary/src/crd/catalog/iceberg.rs index 44349747b..516119ed5 100644 --- a/rust/operator-binary/src/crd/catalog/iceberg.rs +++ b/rust/operator-binary/src/crd/catalog/iceberg.rs @@ -1,9 +1,25 @@ use serde::{Deserialize, Serialize}; -use stackable_operator::schemars::{self, JsonSchema}; +use snafu::{ResultExt, Snafu}; +use stackable_operator::{ + commons::{networking::HostName, tls_verification::TlsClientDetails}, + schemars::{self, JsonSchema}, +}; use url::Url; use super::commons::HiveMetastoreConnection; +#[derive(Debug, Snafu)] +pub enum HttpEndpointError { + #[snafu(display("failed to parse endpoint URL {endpoint:?}"))] + ParseEndpointUrl { + source: url::ParseError, + endpoint: String, + }, + + #[snafu(display("failed to set scheme {scheme:?} for endpoint URL {endpoint}"))] + SetEndpointScheme { scheme: String, endpoint: Url }, +} + #[derive(Clone, Debug, Deserialize, Eq, JsonSchema, PartialEq, Serialize)] #[serde(rename_all = "camelCase")] pub enum IcebergCatalogConnection { @@ -21,8 +37,9 @@ pub enum IcebergCatalogConnection { #[derive(Clone, Debug, Deserialize, Eq, JsonSchema, PartialEq, Serialize)] #[serde(rename_all = "camelCase")] pub struct IcebergRestCatalogConnection { - /// URL of the rest catalog server. - pub uri: Url, + /// The endpoint of the REST catalog server. + #[serde(flatten)] + pub endpoint: HttpEndpoint, /// How to authenticate against the REST catalog. #[serde(default)] @@ -41,16 +58,17 @@ pub enum IcebergRestCatalogAuthentication { /// `configOverrides` to be able to set all [available properties](https://trino.io/docs/current/object-storage/metastores.html#iceberg-specific-metastores). #[serde(rename_all = "camelCase")] OAuth2 { - /// The token endpoint of the OAuth2 server. It is used to + /// The OAuth2 server endpoint, which needs to point to the token endpoint. + /// It is used to /// /// * fetch a token using the client credentials (`clientCredentialsSecretName`) and /// * refresh the token before it expires. A static token (`tokenSecretName`) is only /// refreshed if it is a JWT with an `exp` claim, otherwise the endpoint is never called. /// /// It is required nevertheless, as without it the Iceberg client would fall back to the - /// deprecated `/v1/oauth/tokens` endpoint of the REST catalog, which is planned to be + /// deprecated `/v1/oauth/tokens` endpoint of the REST catalog, which is planned to be /// removed (see ). - server_uri: Url, + server: HttpEndpoint, // No docs will show up. #[serde(flatten)] @@ -79,3 +97,93 @@ pub enum IcebergRestCatalogOAuthCredential { /// The Secret needs to contain the `clientId` and `clientSecret` keys. ClientCredentialsSecretName(String), } + +#[derive(Clone, Debug, Deserialize, Eq, JsonSchema, PartialEq, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct HttpEndpoint { + /// Hostname of the server without any protocol, port or path. + /// For example: `iceberg-rest-catalog.example.com`. + pub hostname: HostName, + + /// Port the server listens on. + /// Defaults to 443 if TLS is used and to 80 otherwise. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub port: Option, + + /// Path of the endpoint on the server, e.g. `/catalog`. Defaults to `/`. + #[serde(default = "HttpEndpoint::default_path")] + pub path: String, + + /// Use a TLS connection. If not specified no TLS will be used. + #[serde(flatten)] + pub tls: TlsClientDetails, +} + +impl HttpEndpoint { + /// Builds the endpoint [`Url`] without a trailing slash in the path. + pub fn url(&self) -> Result { + let endpoint = format!( + "http://{host}:{port}", + host = self.hostname.as_url_host(), + port = self.port() + ); + let mut url = Url::parse(&endpoint).context(ParseEndpointUrlSnafu { endpoint })?; + + if self.tls.uses_tls() { + url.set_scheme("https").map_err(|()| { + SetEndpointSchemeSnafu { + scheme: "https".to_string(), + endpoint: url.clone(), + } + .build() + })?; + } + + // Same as for OIDC, as some tools can not cope with a trailing slash + url.set_path(self.path.trim_end_matches('/')); + + Ok(url) + } + + /// Returns the port to be used, which is either user configured or defaulted based upon TLS usage + pub fn port(&self) -> u16 { + self.port + .unwrap_or_else(|| if self.tls.uses_tls() { 443 } else { 80 }) + } + + fn default_path() -> String { + "/".to_owned() + } +} + +#[cfg(test)] +mod tests { + use rstest::rstest; + + use super::*; + + #[rstest] + #[case::defaults_without_tls("hostname: rest-catalog", "http://rest-catalog/")] + #[case::defaults_with_tls( + "{hostname: rest-catalog, tls: {verification: {server: {caCert: {webPki: {}}}}}}", + "https://rest-catalog/" + )] + #[case::port_and_path_without_tls( + "{hostname: rest-catalog, port: 9001, path: /catalog}", + "http://rest-catalog:9001/catalog" + )] + #[case::port_and_path_with_tls( + "{hostname: rest-catalog, port: 8443, path: /catalog, tls: {verification: {server: {caCert: {secretClass: tls}}}}}", + "https://rest-catalog:8443/catalog" + )] + #[case::trailing_slashes( + "{hostname: idp.example.com, path: /realms/test/protocol/openid-connect/token//}", + "http://idp.example.com/realms/test/protocol/openid-connect/token" + )] + #[case::ipv6("{hostname: '::1', port: 9001}", "http://[::1]:9001/")] + fn http_endpoint_url(#[case] input: &str, #[case] expected: &str) { + let endpoint: HttpEndpoint = + stackable_operator::utils::yaml_from_str_singleton_map(input).unwrap(); + assert_eq!(endpoint.url().unwrap().as_str(), expected); + } +} diff --git a/rust/operator-binary/src/crd/catalog/mod.rs b/rust/operator-binary/src/crd/catalog/mod.rs index 1bbda65fa..4c2e87372 100644 --- a/rust/operator-binary/src/crd/catalog/mod.rs +++ b/rust/operator-binary/src/crd/catalog/mod.rs @@ -383,33 +383,68 @@ mod tests { iceberg: catalog: rest: - uri: https://my.rest.com/iceberg + hostname: my.rest.com - connector: iceberg: catalog: rest: - uri: https://my.secure.rest + hostname: my.rest.com + port: 9001 + path: /iceberg + - connector: + iceberg: + catalog: + rest: + hostname: my.secure.rest + tls: + verification: + server: + caCert: + secretClass: tls authentication: oAuth2: - serverUri: https://keycloak.default.svc.cluster.local:8443/realms/test/protocol/openid-connect/token + server: + hostname: keycloak.default.svc.cluster.local + port: 8443 + path: /realms/test/protocol/openid-connect/token + tls: + verification: + server: + caCert: + secretClass: tls clientCredentialsSecretName: my-keycloak-credentials - connector: iceberg: catalog: rest: - uri: https://my.secure.rest + hostname: my.secure.rest + tls: + verification: + server: + caCert: + webPki: {} authentication: oAuth2: - serverUri: https://keycloak.default.svc.cluster.local:8443/realms/test/protocol/openid-connect/token + server: + hostname: idp.example.com + path: /oauth2/token + tls: + verification: + server: + caCert: + webPki: {} tokenSecretName: my-keycloak-token - connector: iceberg: catalog: rest: - uri: https://my.secure.rest + hostname: my.secure.rest authentication: oAuth2: - serverUri: https://keycloak.default.svc.cluster.local:8443/realms/test/protocol/openid-connect/token + server: + hostname: keycloak.default.svc.cluster.local + port: 8080 + path: /realms/test/protocol/openid-connect/token clientCredentialsSecretName: my-keycloak-credentials # Note that we specify clientCredentialsSecretName and tokenSecretName, which Kubernetes would reject at the same time tokenSecretName: my-keycloak-token From 76f2f83fde18dc604ee4d130b5183d9e51b6fd2f Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Fri, 30 Oct 2026 15:26:59 +0100 Subject: [PATCH 32/34] chore: Default TLS to webPki --- docs/modules/trino/pages/index.adoc | 2 +- .../pages/usage-guide/catalogs/iceberg.adoc | 10 ++--- extra/crds.yaml | 20 ++++++++- rust/operator-binary/src/catalog/iceberg.rs | 14 ++++--- .../src/crd/catalog/iceberg.rs | 41 ++++++++----------- rust/operator-binary/src/crd/catalog/mod.rs | 1 + 6 files changed, 47 insertions(+), 41 deletions(-) diff --git a/docs/modules/trino/pages/index.adoc b/docs/modules/trino/pages/index.adoc index d4254a928..c3660116e 100644 --- a/docs/modules/trino/pages/index.adoc +++ b/docs/modules/trino/pages/index.adoc @@ -5,7 +5,7 @@ :github: https://github.com/stackabletech/trino-operator/ :crd: {crd-ref}{crd-ref-release}&operator=trino-operator :crd-trinocluster: {crd-ref}/trino.stackable.tech/v1alpha1/trinocluster{crd-ref-release} -:crd-trinocatalog: {crd-ref}/trino.stackable.tech/v1alpha1/trinocatalog{crd-ref-release} +:crd-trinocatalog: {crd-ref}/trino.stackable.tech/v1alpha2/trinocatalog{crd-ref-release} :feature-tracker: https://features.stackable.tech/unified :k8s-crs: https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/ diff --git a/docs/modules/trino/pages/usage-guide/catalogs/iceberg.adoc b/docs/modules/trino/pages/usage-guide/catalogs/iceberg.adoc index 37a9f99aa..d2be048e9 100644 --- a/docs/modules/trino/pages/usage-guide/catalogs/iceberg.adoc +++ b/docs/modules/trino/pages/usage-guide/catalogs/iceberg.adoc @@ -36,11 +36,6 @@ spec: server: # <7> hostname: idp.example.com path: /oauth2/token - tls: - verification: - server: - caCert: - webPki: {} clientCredentialsSecretName: trino-iceberg-client # <8> s3: inline: @@ -63,10 +58,11 @@ stringData: <3> Optional, defaults to 443 if TLS is used and to 80 otherwise <4> Optional, defaults to `/` <5> Optional, uses the same TLS configuration as xref:usage-guide/s3.adoc#tls[S3 connections]. - If not specified, no TLS is used. Disabling the TLS verification (`verification.none`) is not supported. + If not specified, TLS is used and the server certificate is verified against the web PKI (`webPki`). + Set `tls: null` to connect without TLS. Disabling the TLS verification (`verification.none`) is not supported. <6> Optional, defaults to no authentication <7> The token endpoint of the OAuth2 server, see <>. - It takes the same `hostname`, `port`, `path` and `tls` fields as the REST catalog. + It takes the same `hostname`, `port`, `path` and `tls` fields as the REST catalog, so it uses TLS with `webPki` verification by default. <8> Name of a Secret containing the `clientId` and `clientSecret` keys, which are exchanged for a token using the OAuth2 client credentials flow. Alternatively, use `tokenSecretName` to pass a Secret containing a static bearer token in the `token` key. diff --git a/extra/crds.yaml b/extra/crds.yaml index 26f96facd..0acfe1880 100644 --- a/extra/crds.yaml +++ b/extra/crds.yaml @@ -4119,6 +4119,9 @@ spec: Mutually exclusive with `tokenSecretName`. The Secret needs to contain the `clientId` and `clientSecret` keys. + maxLength: 253 + minLength: 1 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ type: string server: description: |- @@ -4152,7 +4155,12 @@ spec: nullable: true type: integer tls: - description: Use a TLS connection. If not specified no TLS will be used. + default: + verification: + server: + caCert: + webPki: {} + description: Configure a TLS connection. If not specified it will default to webPki validation. nullable: true properties: verification: @@ -4205,6 +4213,9 @@ spec: Mutually exclusive with `clientCredentialsSecretName`. The Secret needs to contain the `token` key. + maxLength: 253 + minLength: 1 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ type: string required: - server @@ -4229,7 +4240,12 @@ spec: nullable: true type: integer tls: - description: Use a TLS connection. If not specified no TLS will be used. + default: + verification: + server: + caCert: + webPki: {} + description: Configure a TLS connection. If not specified it will default to webPki validation. nullable: true properties: verification: diff --git a/rust/operator-binary/src/catalog/iceberg.rs b/rust/operator-binary/src/catalog/iceberg.rs index ac3adc1a7..4e1415851 100644 --- a/rust/operator-binary/src/catalog/iceberg.rs +++ b/rust/operator-binary/src/catalog/iceberg.rs @@ -1,7 +1,9 @@ use async_trait::async_trait; use snafu::ResultExt; use stackable_operator::{ - client::Client, k8s_openapi::api::core::v1::SecretKeySelector, + client::Client, + crd::authentication::oidc::{CLIENT_ID_SECRET_KEY, CLIENT_SECRET_SECRET_KEY}, + k8s_openapi::api::core::v1::SecretKeySelector, v2::types::kubernetes::NamespaceName, }; @@ -121,16 +123,16 @@ impl ExtendCatalogConfig for IcebergRestCatalogConnection { catalog_config.add_env_from_secret( client_id_env_name, SecretKeySelector { - name: secret_name.to_owned(), - key: "clientId".to_owned(), + name: secret_name.to_string(), + key: CLIENT_ID_SECRET_KEY.to_owned(), ..Default::default() }, ); catalog_config.add_env_from_secret( client_secret_env_name, SecretKeySelector { - name: secret_name.to_owned(), - key: "clientSecret".to_owned(), + name: secret_name.to_string(), + key: CLIENT_SECRET_SECRET_KEY.to_owned(), ..Default::default() }, ); @@ -139,7 +141,7 @@ impl ExtendCatalogConfig for IcebergRestCatalogConnection { catalog_config.add_env_property_from_secret( "iceberg.rest-catalog.oauth2.token", SecretKeySelector { - name: secret_name.to_owned(), + name: secret_name.to_string(), key: "token".to_owned(), ..Default::default() }, diff --git a/rust/operator-binary/src/crd/catalog/iceberg.rs b/rust/operator-binary/src/crd/catalog/iceberg.rs index 516119ed5..63a2c8dea 100644 --- a/rust/operator-binary/src/crd/catalog/iceberg.rs +++ b/rust/operator-binary/src/crd/catalog/iceberg.rs @@ -1,8 +1,9 @@ use serde::{Deserialize, Serialize}; use snafu::{ResultExt, Snafu}; use stackable_operator::{ - commons::{networking::HostName, tls_verification::TlsClientDetails}, + commons::{networking::HostName, tls_verification::TlsClientDetailsWithSecureDefaults}, schemars::{self, JsonSchema}, + v2::types::kubernetes::SecretName, }; use url::Url; @@ -15,9 +16,6 @@ pub enum HttpEndpointError { source: url::ParseError, endpoint: String, }, - - #[snafu(display("failed to set scheme {scheme:?} for endpoint URL {endpoint}"))] - SetEndpointScheme { scheme: String, endpoint: Url }, } #[derive(Clone, Debug, Deserialize, Eq, JsonSchema, PartialEq, Serialize)] @@ -89,13 +87,13 @@ pub enum IcebergRestCatalogOAuthCredential { /// Mutually exclusive with `clientCredentialsSecretName`. /// /// The Secret needs to contain the `token` key. - TokenSecretName(String), + TokenSecretName(SecretName), /// The credentials to exchange for a token in the OAuth2 client credentials flow with the server. /// Mutually exclusive with `tokenSecretName`. /// /// The Secret needs to contain the `clientId` and `clientSecret` keys. - ClientCredentialsSecretName(String), + ClientCredentialsSecretName(SecretName), } #[derive(Clone, Debug, Deserialize, Eq, JsonSchema, PartialEq, Serialize)] @@ -114,31 +112,23 @@ pub struct HttpEndpoint { #[serde(default = "HttpEndpoint::default_path")] pub path: String, - /// Use a TLS connection. If not specified no TLS will be used. + /// Configure a TLS connection. If not specified, it defaults to webPki verification. + /// Set it to `null` to not use TLS. #[serde(flatten)] - pub tls: TlsClientDetails, + pub tls: TlsClientDetailsWithSecureDefaults, } impl HttpEndpoint { - /// Builds the endpoint [`Url`] without a trailing slash in the path. + /// Builds the endpoint [`Url`], with trailing slashes removed from the configured path. pub fn url(&self) -> Result { let endpoint = format!( - "http://{host}:{port}", + "{scheme}://{host}:{port}", + scheme = if self.tls.uses_tls() { "https" } else { "http" }, host = self.hostname.as_url_host(), port = self.port() ); let mut url = Url::parse(&endpoint).context(ParseEndpointUrlSnafu { endpoint })?; - if self.tls.uses_tls() { - url.set_scheme("https").map_err(|()| { - SetEndpointSchemeSnafu { - scheme: "https".to_string(), - endpoint: url.clone(), - } - .build() - })?; - } - // Same as for OIDC, as some tools can not cope with a trailing slash url.set_path(self.path.trim_end_matches('/')); @@ -163,13 +153,14 @@ mod tests { use super::*; #[rstest] - #[case::defaults_without_tls("hostname: rest-catalog", "http://rest-catalog/")] - #[case::defaults_with_tls( + #[case::defaults("hostname: rest-catalog", "https://rest-catalog/")] + #[case::without_tls("{hostname: rest-catalog, tls: null}", "http://rest-catalog/")] + #[case::explicit_web_pki( "{hostname: rest-catalog, tls: {verification: {server: {caCert: {webPki: {}}}}}}", "https://rest-catalog/" )] #[case::port_and_path_without_tls( - "{hostname: rest-catalog, port: 9001, path: /catalog}", + "{hostname: rest-catalog, port: 9001, path: /catalog, tls: null}", "http://rest-catalog:9001/catalog" )] #[case::port_and_path_with_tls( @@ -178,9 +169,9 @@ mod tests { )] #[case::trailing_slashes( "{hostname: idp.example.com, path: /realms/test/protocol/openid-connect/token//}", - "http://idp.example.com/realms/test/protocol/openid-connect/token" + "https://idp.example.com/realms/test/protocol/openid-connect/token" )] - #[case::ipv6("{hostname: '::1', port: 9001}", "http://[::1]:9001/")] + #[case::ipv6("{hostname: '::1', port: 9001}", "https://[::1]:9001/")] fn http_endpoint_url(#[case] input: &str, #[case] expected: &str) { let endpoint: HttpEndpoint = stackable_operator::utils::yaml_from_str_singleton_map(input).unwrap(); diff --git a/rust/operator-binary/src/crd/catalog/mod.rs b/rust/operator-binary/src/crd/catalog/mod.rs index 4c2e87372..991b0cdf5 100644 --- a/rust/operator-binary/src/crd/catalog/mod.rs +++ b/rust/operator-binary/src/crd/catalog/mod.rs @@ -391,6 +391,7 @@ mod tests { hostname: my.rest.com port: 9001 path: /iceberg + tls: null - connector: iceberg: catalog: From a08e9cb1aa2ec5f6fee9e932925ba1ab520b466c Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Fri, 30 Oct 2026 15:52:36 +0100 Subject: [PATCH 33/34] feat: Remodel CRD to take scopes list --- .../pages/usage-guide/catalogs/iceberg.adoc | 16 +- extra/crds.yaml | 59 ++++--- rust/operator-binary/src/catalog/iceberg.rs | 147 ++++++++++-------- .../src/crd/catalog/iceberg.rs | 31 ++-- rust/operator-binary/src/crd/catalog/mod.rs | 17 +- .../kuttl/smoke/10-install-trino.yaml.j2 | 2 + 6 files changed, 169 insertions(+), 103 deletions(-) diff --git a/docs/modules/trino/pages/usage-guide/catalogs/iceberg.adoc b/docs/modules/trino/pages/usage-guide/catalogs/iceberg.adoc index d2be048e9..7fe058f5a 100644 --- a/docs/modules/trino/pages/usage-guide/catalogs/iceberg.adoc +++ b/docs/modules/trino/pages/usage-guide/catalogs/iceberg.adoc @@ -36,7 +36,10 @@ spec: server: # <7> hostname: idp.example.com path: /oauth2/token - clientCredentialsSecretName: trino-iceberg-client # <8> + clientCredentials: # <8> + secretName: trino-iceberg-client # <9> + scopes: # <10> + - lakehouse s3: inline: host: test-minio @@ -63,8 +66,11 @@ stringData: <6> Optional, defaults to no authentication <7> The token endpoint of the OAuth2 server, see <>. It takes the same `hostname`, `port`, `path` and `tls` fields as the REST catalog, so it uses TLS with `webPki` verification by default. -<8> Name of a Secret containing the `clientId` and `clientSecret` keys, which are exchanged for a token using the OAuth2 client credentials flow. - Alternatively, use `tokenSecretName` to pass a Secret containing a static bearer token in the `token` key. +<8> The client credentials are exchanged for a token using the OAuth2 client credentials flow. + Alternatively, use `token.secretName` to pass a Secret containing a static bearer token in the `token` key. +<9> Name of a Secret containing the `clientId` and `clientSecret` keys +<10> Optional, the scopes to request from the OAuth2 server. + If not specified, the `catalog` scope is requested. Specifying scopes replaces this default. The operator only supports a subset of the https://trino.io/docs/current/object-storage/metastores.html#rest-catalog[REST catalog properties]. Use `configOverrides` to set additional ones. @@ -75,8 +81,8 @@ Use `configOverrides` to set additional ones. `oAuth2.server` points to the token endpoint of the OAuth2 server. What it is used for depends on the credential: -* `clientCredentialsSecretName`: Trino fetches its token from this endpoint on startup and refreshes it there before it expires. -* `tokenSecretName`: Trino uses the token as is. +* `clientCredentials`: Trino fetches its token from this endpoint on startup and refreshes it there before it expires. +* `token`: Trino uses the token as is. If the token is a JWT with an `exp` claim, Trino tries to refresh it before it expires by exchanging it at this endpoint (OAuth2 token exchange). If the refresh fails, Trino logs a warning and keeps using the current token. A token that isn't a JWT is never refreshed, so the endpoint is never called. diff --git a/extra/crds.yaml b/extra/crds.yaml index 0acfe1880..bf5ba5c0f 100644 --- a/extra/crds.yaml +++ b/extra/crds.yaml @@ -4109,27 +4109,40 @@ spec: `configOverrides` to be able to set all [available properties](https://trino.io/docs/current/object-storage/metastores.html#iceberg-specific-metastores). oneOf: - required: - - tokenSecretName + - token - required: - - clientCredentialsSecretName + - clientCredentials properties: - clientCredentialsSecretName: + clientCredentials: description: |- The credentials to exchange for a token in the OAuth2 client credentials flow with the server. - Mutually exclusive with `tokenSecretName`. - - The Secret needs to contain the `clientId` and `clientSecret` keys. - maxLength: 253 - minLength: 1 - pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ - type: string + Mutually exclusive with `token`. + properties: + scopes: + description: |- + The scopes to request from the server. + If not specified, the `catalog` scope is requested. Specifying scopes replaces this default. + items: + type: string + type: array + secretName: + description: |- + Name of the Secret containing the client credentials. + The Secret needs to contain the `clientId` and `clientSecret` keys. + maxLength: 253 + minLength: 1 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ + type: string + required: + - secretName + type: object server: description: |- The OAuth2 server endpoint, which needs to point to the token endpoint. It is used to - * fetch a token using the client credentials (`clientCredentialsSecretName`) and - * refresh the token before it expires. A static token (`tokenSecretName`) is only + * fetch a token using the client credentials (`clientCredentials`) and + * refresh the token before it expires. A static token (`token`) is only refreshed if it is a JWT with an `exp` claim, otherwise the endpoint is never called. It is required nevertheless, as without it the Iceberg client would fall back to the @@ -4207,16 +4220,22 @@ spec: required: - hostname type: object - tokenSecretName: + token: description: |- Authenticate using a bearer token. - Mutually exclusive with `clientCredentialsSecretName`. - - The Secret needs to contain the `token` key. - maxLength: 253 - minLength: 1 - pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ - type: string + Mutually exclusive with `clientCredentials`. + properties: + secretName: + description: |- + Name of the Secret containing the token. + The Secret needs to contain the `token` key. + maxLength: 253 + minLength: 1 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ + type: string + required: + - secretName + type: object required: - server type: object diff --git a/rust/operator-binary/src/catalog/iceberg.rs b/rust/operator-binary/src/catalog/iceberg.rs index 4e1415851..ce03d1783 100644 --- a/rust/operator-binary/src/catalog/iceberg.rs +++ b/rust/operator-binary/src/catalog/iceberg.rs @@ -85,74 +85,95 @@ impl ExtendCatalogConfig for IcebergRestCatalogConnection { _catalog_namespace: &NamespaceName, _client: &Client, ) -> Result<(), FromTrinoCatalogError> { - catalog_config.add_property("iceberg.catalog.type", "rest"); - catalog_config.add_property( - "iceberg.rest-catalog.uri", - self.endpoint.url().context(BuildIcebergRestUrlSnafu)?, - ); - add_endpoint_tls(catalog_config, &self.endpoint)?; - - // We explicitly use a match here to catch further additions - match &self.authentication { - IcebergRestCatalogAuthentication::None {} => { - catalog_config.add_property("iceberg.rest-catalog.security", "NONE"); - } - IcebergRestCatalogAuthentication::OAuth2 { server, credential } => { - catalog_config.add_property("iceberg.rest-catalog.security", "OAUTH2"); - catalog_config.add_property( - "iceberg.rest-catalog.oauth2.server-uri", - server.url().context(BuildIcebergRestUrlSnafu)?, - ); - add_endpoint_tls(catalog_config, server)?; - match credential { - IcebergRestCatalogOAuthCredential::ClientCredentialsSecretName(secret_name) => { - // We can't use `add_env_property_from_secret`, as we need to concatenate - // clientId and clientSecret in the Trino configuration. So instead we come - // up with our own envs and bind them. - let property = "iceberg.rest-catalog.oauth2.credential"; - let base_env_name = calculate_env_name(catalog_name, property); - let client_id_env_name = format!("{base_env_name}_CLIENT_ID"); - let client_secret_env_name = format!("{base_env_name}_CLIENT_SECRET"); - catalog_config.add_property( - property, - format!( - "${{ENV:{client_id_env_name}}}:${{ENV:{client_secret_env_name}}}" - ), - ); - - catalog_config.add_env_from_secret( - client_id_env_name, - SecretKeySelector { - name: secret_name.to_string(), - key: CLIENT_ID_SECRET_KEY.to_owned(), - ..Default::default() - }, - ); - catalog_config.add_env_from_secret( - client_secret_env_name, - SecretKeySelector { - name: secret_name.to_string(), - key: CLIENT_SECRET_SECRET_KEY.to_owned(), - ..Default::default() - }, - ); - } - IcebergRestCatalogOAuthCredential::TokenSecretName(secret_name) => { - catalog_config.add_env_property_from_secret( - "iceberg.rest-catalog.oauth2.token", - SecretKeySelector { - name: secret_name.to_string(), - key: "token".to_owned(), - ..Default::default() - }, - ) + add_rest_catalog_config(self, catalog_config, catalog_name) + } +} + +/// Adds the configuration of the given REST catalog. Split out of +/// [`ExtendCatalogConfig::extend_catalog_config`], as it doesn't need a [`Client`], which makes it +/// testable. +fn add_rest_catalog_config( + rest_catalog: &IcebergRestCatalogConnection, + catalog_config: &mut CatalogConfig, + catalog_name: &TrinoCatalogName, +) -> Result<(), FromTrinoCatalogError> { + catalog_config.add_property("iceberg.catalog.type", "rest"); + catalog_config.add_property( + "iceberg.rest-catalog.uri", + rest_catalog + .endpoint + .url() + .context(BuildIcebergRestUrlSnafu)?, + ); + add_endpoint_tls(catalog_config, &rest_catalog.endpoint)?; + + // We explicitly use a match here to catch further additions + match &rest_catalog.authentication { + IcebergRestCatalogAuthentication::None {} => { + catalog_config.add_property("iceberg.rest-catalog.security", "NONE"); + } + IcebergRestCatalogAuthentication::OAuth2 { server, credential } => { + catalog_config.add_property("iceberg.rest-catalog.security", "OAUTH2"); + catalog_config.add_property( + "iceberg.rest-catalog.oauth2.server-uri", + server.url().context(BuildIcebergRestUrlSnafu)?, + ); + add_endpoint_tls(catalog_config, server)?; + match credential { + IcebergRestCatalogOAuthCredential::ClientCredentials { + secret_name, + scopes, + } => { + // We can't use `add_env_property_from_secret`, as we need to concatenate + // clientId and clientSecret in the Trino configuration. So instead we come + // up with our own envs and bind them. + let property = "iceberg.rest-catalog.oauth2.credential"; + let base_env_name = calculate_env_name(catalog_name, property); + let client_id_env_name = format!("{base_env_name}_CLIENT_ID"); + let client_secret_env_name = format!("{base_env_name}_CLIENT_SECRET"); + catalog_config.add_property( + property, + format!("${{ENV:{client_id_env_name}}}:${{ENV:{client_secret_env_name}}}"), + ); + + catalog_config.add_env_from_secret( + client_id_env_name, + SecretKeySelector { + name: secret_name.to_string(), + key: CLIENT_ID_SECRET_KEY.to_owned(), + ..Default::default() + }, + ); + catalog_config.add_env_from_secret( + client_secret_env_name, + SecretKeySelector { + name: secret_name.to_string(), + key: CLIENT_SECRET_SECRET_KEY.to_owned(), + ..Default::default() + }, + ); + + // Trino only accepts a scope in combination with client credentials. + // OAuth2 (and the Iceberg client) separate multiple scopes by spaces. + if !scopes.is_empty() { + catalog_config + .add_property("iceberg.rest-catalog.oauth2.scope", scopes.join(" ")); } } + IcebergRestCatalogOAuthCredential::Token { secret_name } => catalog_config + .add_env_property_from_secret( + "iceberg.rest-catalog.oauth2.token", + SecretKeySelector { + name: secret_name.to_string(), + key: "token".to_owned(), + ..Default::default() + }, + ), } } - - Ok(()) } + + Ok(()) } /// Adds the CA certificate of the given endpoint (if any) to the truststore of Trino. diff --git a/rust/operator-binary/src/crd/catalog/iceberg.rs b/rust/operator-binary/src/crd/catalog/iceberg.rs index 63a2c8dea..ad67e2d99 100644 --- a/rust/operator-binary/src/crd/catalog/iceberg.rs +++ b/rust/operator-binary/src/crd/catalog/iceberg.rs @@ -59,8 +59,8 @@ pub enum IcebergRestCatalogAuthentication { /// The OAuth2 server endpoint, which needs to point to the token endpoint. /// It is used to /// - /// * fetch a token using the client credentials (`clientCredentialsSecretName`) and - /// * refresh the token before it expires. A static token (`tokenSecretName`) is only + /// * fetch a token using the client credentials (`clientCredentials`) and + /// * refresh the token before it expires. A static token (`token`) is only /// refreshed if it is a JWT with an `exp` claim, otherwise the endpoint is never called. /// /// It is required nevertheless, as without it the Iceberg client would fall back to the @@ -84,16 +84,27 @@ impl Default for IcebergRestCatalogAuthentication { #[serde(rename_all = "camelCase")] pub enum IcebergRestCatalogOAuthCredential { /// Authenticate using a bearer token. - /// Mutually exclusive with `clientCredentialsSecretName`. - /// - /// The Secret needs to contain the `token` key. - TokenSecretName(SecretName), + /// Mutually exclusive with `clientCredentials`. + #[serde(rename_all = "camelCase")] + Token { + /// Name of the Secret containing the token. + /// The Secret needs to contain the `token` key. + secret_name: SecretName, + }, /// The credentials to exchange for a token in the OAuth2 client credentials flow with the server. - /// Mutually exclusive with `tokenSecretName`. - /// - /// The Secret needs to contain the `clientId` and `clientSecret` keys. - ClientCredentialsSecretName(SecretName), + /// Mutually exclusive with `token`. + #[serde(rename_all = "camelCase")] + ClientCredentials { + /// Name of the Secret containing the client credentials. + /// The Secret needs to contain the `clientId` and `clientSecret` keys. + secret_name: SecretName, + + /// The scopes to request from the server. + /// If not specified, the `catalog` scope is requested. Specifying scopes replaces this default. + #[serde(default, skip_serializing_if = "Vec::is_empty")] + scopes: Vec, + }, } #[derive(Clone, Debug, Deserialize, Eq, JsonSchema, PartialEq, Serialize)] diff --git a/rust/operator-binary/src/crd/catalog/mod.rs b/rust/operator-binary/src/crd/catalog/mod.rs index 991b0cdf5..22c708de2 100644 --- a/rust/operator-binary/src/crd/catalog/mod.rs +++ b/rust/operator-binary/src/crd/catalog/mod.rs @@ -413,7 +413,11 @@ mod tests { server: caCert: secretClass: tls - clientCredentialsSecretName: my-keycloak-credentials + clientCredentials: + secretName: my-keycloak-credentials + scopes: + - lakehouse + - read - connector: iceberg: catalog: @@ -434,7 +438,8 @@ mod tests { server: caCert: webPki: {} - tokenSecretName: my-keycloak-token + token: + secretName: my-keycloak-token - connector: iceberg: catalog: @@ -446,9 +451,11 @@ mod tests { hostname: keycloak.default.svc.cluster.local port: 8080 path: /realms/test/protocol/openid-connect/token - clientCredentialsSecretName: my-keycloak-credentials - # Note that we specify clientCredentialsSecretName and tokenSecretName, which Kubernetes would reject at the same time - tokenSecretName: my-keycloak-token + clientCredentials: + secretName: my-keycloak-credentials + # Note that we specify clientCredentials and token, which Kubernetes would reject at the same time + token: + secretName: my-keycloak-token - connector: iceberg: catalog: diff --git a/tests/templates/kuttl/smoke/10-install-trino.yaml.j2 b/tests/templates/kuttl/smoke/10-install-trino.yaml.j2 index eb16365a2..c89348959 100644 --- a/tests/templates/kuttl/smoke/10-install-trino.yaml.j2 +++ b/tests/templates/kuttl/smoke/10-install-trino.yaml.j2 @@ -75,6 +75,8 @@ spec: database: hive credentialsSecretName: my-postgresql-credentials-secret --- +# Deliberately kept at v1alpha1: All other TrinoCatalogs use the storage version v1alpha2, so this is +# the only one that goes through the conversion webhook. apiVersion: trino.stackable.tech/v1alpha1 kind: TrinoCatalog metadata: From 7148bd1a2ccd685f0b28aefc480d28863f79174c Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Fri, 30 Oct 2026 15:54:03 +0100 Subject: [PATCH 34/34] test: Simplify test --- rust/operator-binary/src/crd/catalog/mod.rs | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/rust/operator-binary/src/crd/catalog/mod.rs b/rust/operator-binary/src/crd/catalog/mod.rs index 22c708de2..e2fdf32be 100644 --- a/rust/operator-binary/src/crd/catalog/mod.rs +++ b/rust/operator-binary/src/crd/catalog/mod.rs @@ -440,22 +440,6 @@ mod tests { webPki: {} token: secretName: my-keycloak-token - - connector: - iceberg: - catalog: - rest: - hostname: my.secure.rest - authentication: - oAuth2: - server: - hostname: keycloak.default.svc.cluster.local - port: 8080 - path: /realms/test/protocol/openid-connect/token - clientCredentials: - secretName: my-keycloak-credentials - # Note that we specify clientCredentials and token, which Kubernetes would reject at the same time - token: - secretName: my-keycloak-token - connector: iceberg: catalog: