From 9707daf3462c387b13690f1aeda9b63a71379428 Mon Sep 17 00:00:00 2001 From: Nick Larsen Date: Tue, 20 May 2025 13:00:05 +0200 Subject: [PATCH 1/4] chore: Bump stackable_operator to 0.93.0 Note: Common CRD structs are now versioned. The CRD descriptions will be improved once changes like https://github.com/stackabletech/operator-rs/pull/1040 --- Cargo.lock | 197 +++--- Cargo.nix | 596 ++++++++---------- Cargo.toml | 2 +- crate-hashes.json | 14 +- deploy/helm/druid-operator/crds/crds.yaml | 15 +- .../src/authentication/ldap.rs | 18 +- .../operator-binary/src/authentication/mod.rs | 32 +- .../src/authentication/oidc.rs | 40 +- .../operator-binary/src/crd/authentication.rs | 80 ++- rust/operator-binary/src/crd/mod.rs | 23 +- rust/operator-binary/src/druid_controller.rs | 24 +- rust/operator-binary/src/extensions.rs | 9 +- 12 files changed, 510 insertions(+), 540 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 679439c9..6ac03fbf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -173,40 +173,13 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" -[[package]] -name = "axum" -version = "0.7.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" -dependencies = [ - "async-trait", - "axum-core 0.4.5", - "bytes", - "futures-util", - "http", - "http-body", - "http-body-util", - "itoa", - "matchit 0.7.3", - "memchr", - "mime", - "percent-encoding", - "pin-project-lite", - "rustversion", - "serde", - "sync_wrapper", - "tower 0.5.2", - "tower-layer", - "tower-service", -] - [[package]] name = "axum" version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "de45108900e1f9b9242f7f2e254aa3e2c029c921c258fe9e6b4217eeebd54288" dependencies = [ - "axum-core 0.5.2", + "axum-core", "bytes", "form_urlencoded", "futures-util", @@ -216,7 +189,7 @@ dependencies = [ "hyper", "hyper-util", "itoa", - "matchit 0.8.4", + "matchit", "memchr", "mime", "percent-encoding", @@ -234,26 +207,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "axum-core" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" -dependencies = [ - "async-trait", - "bytes", - "futures-util", - "http", - "http-body", - "http-body-util", - "mime", - "pin-project-lite", - "rustversion", - "sync_wrapper", - "tower-layer", - "tower-service", -] - [[package]] name = "axum-core" version = "0.5.2" @@ -602,6 +555,26 @@ dependencies = [ "powerfmt", ] +[[package]] +name = "derive_more" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + [[package]] name = "digest" version = "0.10.7" @@ -1482,22 +1455,21 @@ dependencies = [ [[package]] name = "k8s-openapi" -version = "0.24.0" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c75b990324f09bef15e791606b7b7a296d02fc88a344f6eba9390970a870ad5" +checksum = "aa60a41b57ae1a0a071af77dbcf89fc9819cfe66edaf2beeb204c34459dcf0b2" dependencies = [ "base64 0.22.1", "chrono", "schemars", "serde", - "serde-value", "serde_json", ] [[package]] name = "k8s-version" -version = "0.1.2" -source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.92.0#5fdc47a10de685e4eea49fd0a3f6c3a15a4966c1" +version = "0.1.3" +source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.93.0#38d1665a81c8be8d86e0c55efc06d5fad769ae45" dependencies = [ "darling", "regex", @@ -1506,9 +1478,9 @@ dependencies = [ [[package]] name = "kube" -version = "0.99.0" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a4eb20010536b48abe97fec37d23d43069bcbe9686adcf9932202327bc5ca6e" +checksum = "1b49c39074089233c2bb7b1791d1b6c06c84dbab26757491fad9d233db0d432f" dependencies = [ "k8s-openapi", "kube-client", @@ -1519,9 +1491,9 @@ dependencies = [ [[package]] name = "kube-client" -version = "0.99.0" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fc2ed952042df20d15ac2fe9614d0ec14b6118eab89633985d4b36e688dccf1" +checksum = "e199797b1b08865041c9c698f0d11a91de0a8143e808b71e250cd4a1d7ce2b9f" dependencies = [ "base64 0.22.1", "bytes", @@ -1556,11 +1528,12 @@ dependencies = [ [[package]] name = "kube-core" -version = "0.99.0" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff0d0793db58e70ca6d689489183816cb3aa481673e7433dc618cf7e8007c675" +checksum = "1bdefbba89dea2d99ea822a1d7cd6945535efbfb10b790056ee9284bf9e698e7" dependencies = [ "chrono", + "derive_more", "form_urlencoded", "http", "json-patch", @@ -1574,9 +1547,9 @@ dependencies = [ [[package]] name = "kube-derive" -version = "0.99.0" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c562f58dc9f7ca5feac8a6ee5850ca221edd6f04ce0dd2ee873202a88cd494c9" +checksum = "8e609a3633689a50869352a3c16e01d863b6137863c80eeb038383d5ab9f83bf" dependencies = [ "darling", "proc-macro2", @@ -1588,14 +1561,13 @@ dependencies = [ [[package]] name = "kube-runtime" -version = "0.99.0" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88f34cfab9b4bd8633062e0e85edb81df23cb09f159f2e31c60b069ae826ffdc" +checksum = "1d4bd8a4554786f8f9a87bfa977fb7dbaa1d7f102a30477338b044b65de29d8e" dependencies = [ "ahash", "async-broadcast", "async-stream", - "async-trait", "backon", "educe", "futures 0.3.31", @@ -1681,12 +1653,6 @@ dependencies = [ "regex-automata 0.1.10", ] -[[package]] -name = "matchit" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" - [[package]] name = "matchit" version = "0.8.4" @@ -1811,9 +1777,9 @@ dependencies = [ [[package]] name = "opentelemetry" -version = "0.28.0" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "236e667b670a5cdf90c258f5a55794ec5ac5027e960c224bff8367a59e1e6426" +checksum = "9e87237e2775f74896f9ad219d26a2081751187eb7c9f5c58dde20a23b95d16c" dependencies = [ "futures-core", "futures-sink", @@ -1825,9 +1791,9 @@ dependencies = [ [[package]] name = "opentelemetry-appender-tracing" -version = "0.28.1" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c513c7af3bec30113f3d4620134ff923295f1e9c580fda2b8abe0831f925ddc0" +checksum = "e716f864eb23007bdd9dc4aec381e188a1cee28eecf22066772b5fd822b9727d" dependencies = [ "opentelemetry", "tracing", @@ -1837,9 +1803,9 @@ dependencies = [ [[package]] name = "opentelemetry-http" -version = "0.28.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8863faf2910030d139fb48715ad5ff2f35029fc5f244f6d5f689ddcf4d26253" +checksum = "46d7ab32b827b5b495bd90fa95a6cb65ccc293555dcc3199ae2937d2d237c8ed" dependencies = [ "async-trait", "bytes", @@ -1851,11 +1817,10 @@ dependencies = [ [[package]] name = "opentelemetry-otlp" -version = "0.28.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bef114c6d41bea83d6dc60eb41720eedd0261a67af57b66dd2b84ac46c01d91" +checksum = "d899720fe06916ccba71c01d04ecd77312734e2de3467fd30d9d580c8ce85656" dependencies = [ - "async-trait", "futures-core", "http", "opentelemetry", @@ -1872,9 +1837,9 @@ dependencies = [ [[package]] name = "opentelemetry-proto" -version = "0.28.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f8870d3024727e99212eb3bb1762ec16e255e3e6f58eeb3dc8db1aa226746d" +checksum = "8c40da242381435e18570d5b9d50aca2a4f4f4d8e146231adb4e7768023309b3" dependencies = [ "opentelemetry", "opentelemetry_sdk", @@ -1884,18 +1849,17 @@ dependencies = [ [[package]] name = "opentelemetry_sdk" -version = "0.28.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84dfad6042089c7fc1f6118b7040dc2eb4ab520abbf410b79dc481032af39570" +checksum = "afdefb21d1d47394abc1ba6c57363ab141be19e27cc70d0e422b7f303e4d290b" dependencies = [ - "async-trait", "futures-channel", "futures-executor", "futures-util", "glob", "opentelemetry", "percent-encoding", - "rand", + "rand 0.9.1", "serde_json", "thiserror 2.0.12", "tokio", @@ -2140,8 +2104,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha", - "rand_core", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.3", ] [[package]] @@ -2151,7 +2125,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.3", ] [[package]] @@ -2163,6 +2147,15 @@ dependencies = [ "getrandom 0.2.15", ] +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom 0.3.2", +] + [[package]] name = "redox_syscall" version = "0.5.11" @@ -2722,8 +2715,8 @@ dependencies = [ [[package]] name = "stackable-operator" -version = "0.92.0" -source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.92.0#5fdc47a10de685e4eea49fd0a3f6c3a15a4966c1" +version = "0.93.0" +source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.93.0#38d1665a81c8be8d86e0c55efc06d5fad769ae45" dependencies = [ "chrono", "clap", @@ -2760,7 +2753,7 @@ dependencies = [ [[package]] name = "stackable-operator-derive" version = "0.3.1" -source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.92.0#5fdc47a10de685e4eea49fd0a3f6c3a15a4966c1" +source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.93.0#38d1665a81c8be8d86e0c55efc06d5fad769ae45" dependencies = [ "darling", "proc-macro2", @@ -2771,7 +2764,7 @@ dependencies = [ [[package]] name = "stackable-shared" version = "0.0.1" -source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.92.0#5fdc47a10de685e4eea49fd0a3f6c3a15a4966c1" +source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.93.0#38d1665a81c8be8d86e0c55efc06d5fad769ae45" dependencies = [ "kube", "semver", @@ -2783,9 +2776,9 @@ dependencies = [ [[package]] name = "stackable-telemetry" version = "0.6.0" -source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.92.0#5fdc47a10de685e4eea49fd0a3f6c3a15a4966c1" +source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.93.0#38d1665a81c8be8d86e0c55efc06d5fad769ae45" dependencies = [ - "axum 0.8.3", + "axum", "clap", "futures-util", "opentelemetry", @@ -2806,7 +2799,7 @@ dependencies = [ [[package]] name = "stackable-versioned" version = "0.7.1" -source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.92.0#5fdc47a10de685e4eea49fd0a3f6c3a15a4966c1" +source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.93.0#38d1665a81c8be8d86e0c55efc06d5fad769ae45" dependencies = [ "stackable-versioned-macros", ] @@ -2814,7 +2807,7 @@ dependencies = [ [[package]] name = "stackable-versioned-macros" version = "0.7.1" -source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.92.0#5fdc47a10de685e4eea49fd0a3f6c3a15a4966c1" +source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.93.0#38d1665a81c8be8d86e0c55efc06d5fad769ae45" dependencies = [ "convert_case", "darling", @@ -3081,13 +3074,10 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52" dependencies = [ - "async-stream", "async-trait", - "axum 0.7.9", "base64 0.22.1", "bytes", "flate2", - "h2", "http", "http-body", "http-body-util", @@ -3097,7 +3087,6 @@ dependencies = [ "percent-encoding", "pin-project", "prost", - "socket2", "tokio", "tokio-stream", "tower 0.4.13", @@ -3117,7 +3106,7 @@ dependencies = [ "indexmap 1.9.3", "pin-project", "pin-project-lite", - "rand", + "rand 0.8.5", "slab", "tokio", "tokio-util", @@ -3231,9 +3220,9 @@ dependencies = [ [[package]] name = "tracing-opentelemetry" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "721f2d2569dce9f3dfbbddee5906941e953bfcdf736a62da3377f5751650cc36" +checksum = "fd8e764bd6f5813fd8bebc3117875190c5b0415be8f7f8059bffb6ecd979c444" dependencies = [ "js-sys", "once_cell", diff --git a/Cargo.nix b/Cargo.nix index 8ff566b5..93c65ebb 100644 --- a/Cargo.nix +++ b/Cargo.nix @@ -516,123 +516,7 @@ rec { ]; }; - "axum 0.7.9" = rec { - crateName = "axum"; - version = "0.7.9"; - edition = "2021"; - sha256 = "07z7wqczi9i8xb4460rvn39p4wjqwr32hx907crd1vwb2fy8ijpd"; - dependencies = [ - { - name = "async-trait"; - packageId = "async-trait"; - } - { - name = "axum-core"; - packageId = "axum-core 0.4.5"; - } - { - name = "bytes"; - packageId = "bytes"; - } - { - name = "futures-util"; - packageId = "futures-util"; - usesDefaultFeatures = false; - features = [ "alloc" ]; - } - { - name = "http"; - packageId = "http"; - } - { - name = "http-body"; - packageId = "http-body"; - } - { - name = "http-body-util"; - packageId = "http-body-util"; - } - { - name = "itoa"; - packageId = "itoa"; - } - { - name = "matchit"; - packageId = "matchit 0.7.3"; - } - { - name = "memchr"; - packageId = "memchr"; - } - { - name = "mime"; - packageId = "mime"; - } - { - name = "percent-encoding"; - packageId = "percent-encoding"; - } - { - name = "pin-project-lite"; - packageId = "pin-project-lite"; - } - { - name = "rustversion"; - packageId = "rustversion"; - } - { - name = "serde"; - packageId = "serde"; - } - { - name = "sync_wrapper"; - packageId = "sync_wrapper"; - } - { - name = "tower"; - packageId = "tower 0.5.2"; - usesDefaultFeatures = false; - features = [ "util" ]; - } - { - name = "tower-layer"; - packageId = "tower-layer"; - } - { - name = "tower-service"; - packageId = "tower-service"; - } - ]; - devDependencies = [ - { - name = "serde"; - packageId = "serde"; - features = [ "derive" ]; - } - { - name = "tower"; - packageId = "tower 0.5.2"; - rename = "tower"; - features = [ "util" "timeout" "limit" "load-shed" "steer" "filter" ]; - } - ]; - features = { - "__private_docs" = [ "axum-core/__private_docs" "tower/full" "dep:tower-http" ]; - "default" = [ "form" "http1" "json" "matched-path" "original-uri" "query" "tokio" "tower-log" "tracing" ]; - "form" = [ "dep:serde_urlencoded" ]; - "http1" = [ "dep:hyper" "hyper?/http1" "hyper-util?/http1" ]; - "http2" = [ "dep:hyper" "hyper?/http2" "hyper-util?/http2" ]; - "json" = [ "dep:serde_json" "dep:serde_path_to_error" ]; - "macros" = [ "dep:axum-macros" ]; - "multipart" = [ "dep:multer" ]; - "query" = [ "dep:serde_urlencoded" ]; - "tokio" = [ "dep:hyper-util" "dep:tokio" "tokio/net" "tokio/rt" "tower/make" "tokio/macros" ]; - "tower-log" = [ "tower/log" ]; - "tracing" = [ "dep:tracing" "axum-core/tracing" ]; - "ws" = [ "dep:hyper" "tokio" "dep:tokio-tungstenite" "dep:sha1" "dep:base64" ]; - }; - }; - "axum 0.8.3" = rec { + "axum" = rec { crateName = "axum"; version = "0.8.3"; edition = "2021"; @@ -640,7 +524,7 @@ rec { dependencies = [ { name = "axum-core"; - packageId = "axum-core 0.5.2"; + packageId = "axum-core"; } { name = "bytes"; @@ -686,7 +570,7 @@ rec { } { name = "matchit"; - packageId = "matchit 0.8.4"; + packageId = "matchit"; } { name = "memchr"; @@ -811,78 +695,7 @@ rec { }; resolvedDefaultFeatures = [ "default" "form" "http1" "json" "matched-path" "original-uri" "query" "tokio" "tower-log" "tracing" ]; }; - "axum-core 0.4.5" = rec { - crateName = "axum-core"; - version = "0.4.5"; - edition = "2021"; - sha256 = "16b1496c4gm387q20hkv5ic3k5bd6xmnvk50kwsy6ymr8rhvvwh9"; - libName = "axum_core"; - dependencies = [ - { - name = "async-trait"; - packageId = "async-trait"; - } - { - name = "bytes"; - packageId = "bytes"; - } - { - name = "futures-util"; - packageId = "futures-util"; - usesDefaultFeatures = false; - features = [ "alloc" ]; - } - { - name = "http"; - packageId = "http"; - } - { - name = "http-body"; - packageId = "http-body"; - } - { - name = "http-body-util"; - packageId = "http-body-util"; - } - { - name = "mime"; - packageId = "mime"; - } - { - name = "pin-project-lite"; - packageId = "pin-project-lite"; - } - { - name = "rustversion"; - packageId = "rustversion"; - } - { - name = "sync_wrapper"; - packageId = "sync_wrapper"; - } - { - name = "tower-layer"; - packageId = "tower-layer"; - } - { - name = "tower-service"; - packageId = "tower-service"; - } - ]; - devDependencies = [ - { - name = "futures-util"; - packageId = "futures-util"; - usesDefaultFeatures = false; - features = [ "alloc" ]; - } - ]; - features = { - "__private_docs" = [ "dep:tower-http" ]; - "tracing" = [ "dep:tracing" ]; - }; - }; - "axum-core 0.5.2" = rec { + "axum-core" = rec { crateName = "axum-core"; version = "0.5.2"; edition = "2021"; @@ -1901,6 +1714,94 @@ rec { }; resolvedDefaultFeatures = [ "alloc" "powerfmt" "std" ]; }; + "derive_more" = rec { + crateName = "derive_more"; + version = "2.0.1"; + edition = "2021"; + sha256 = "0y3n97cc7rsvgnj211p92y1ppzh6jzvq5kvk6340ghkhfp7l4ch9"; + authors = [ + "Jelte Fennema " + ]; + dependencies = [ + { + name = "derive_more-impl"; + packageId = "derive_more-impl"; + } + ]; + features = { + "add" = [ "derive_more-impl/add" ]; + "add_assign" = [ "derive_more-impl/add_assign" ]; + "as_ref" = [ "derive_more-impl/as_ref" ]; + "constructor" = [ "derive_more-impl/constructor" ]; + "debug" = [ "derive_more-impl/debug" ]; + "default" = [ "std" ]; + "deref" = [ "derive_more-impl/deref" ]; + "deref_mut" = [ "derive_more-impl/deref_mut" ]; + "display" = [ "derive_more-impl/display" ]; + "error" = [ "derive_more-impl/error" ]; + "from" = [ "derive_more-impl/from" ]; + "from_str" = [ "derive_more-impl/from_str" ]; + "full" = [ "add" "add_assign" "as_ref" "constructor" "debug" "deref" "deref_mut" "display" "error" "from" "from_str" "index" "index_mut" "into" "into_iterator" "is_variant" "mul" "mul_assign" "not" "sum" "try_from" "try_into" "try_unwrap" "unwrap" ]; + "index" = [ "derive_more-impl/index" ]; + "index_mut" = [ "derive_more-impl/index_mut" ]; + "into" = [ "derive_more-impl/into" ]; + "into_iterator" = [ "derive_more-impl/into_iterator" ]; + "is_variant" = [ "derive_more-impl/is_variant" ]; + "mul" = [ "derive_more-impl/mul" ]; + "mul_assign" = [ "derive_more-impl/mul_assign" ]; + "not" = [ "derive_more-impl/not" ]; + "sum" = [ "derive_more-impl/sum" ]; + "testing-helpers" = [ "derive_more-impl/testing-helpers" "dep:rustc_version" ]; + "try_from" = [ "derive_more-impl/try_from" ]; + "try_into" = [ "derive_more-impl/try_into" ]; + "try_unwrap" = [ "derive_more-impl/try_unwrap" ]; + "unwrap" = [ "derive_more-impl/unwrap" ]; + }; + resolvedDefaultFeatures = [ "default" "from" "std" ]; + }; + "derive_more-impl" = rec { + crateName = "derive_more-impl"; + version = "2.0.1"; + edition = "2021"; + sha256 = "1wqxcb7d5lzvpplz9szp4rwy1r23f5wmixz0zd2vcjscqknji9mx"; + procMacro = true; + libName = "derive_more_impl"; + authors = [ + "Jelte Fennema " + ]; + dependencies = [ + { + name = "proc-macro2"; + packageId = "proc-macro2"; + } + { + name = "quote"; + packageId = "quote"; + } + { + name = "syn"; + packageId = "syn 2.0.100"; + } + ]; + features = { + "as_ref" = [ "syn/extra-traits" "syn/visit" ]; + "debug" = [ "syn/extra-traits" "dep:unicode-xid" ]; + "display" = [ "syn/extra-traits" "dep:unicode-xid" ]; + "error" = [ "syn/extra-traits" ]; + "from" = [ "syn/extra-traits" ]; + "full" = [ "add" "add_assign" "as_ref" "constructor" "debug" "deref" "deref_mut" "display" "error" "from" "from_str" "index" "index_mut" "into" "into_iterator" "is_variant" "mul" "mul_assign" "not" "sum" "try_from" "try_into" "try_unwrap" "unwrap" ]; + "into" = [ "syn/extra-traits" ]; + "is_variant" = [ "dep:convert_case" ]; + "mul" = [ "syn/extra-traits" ]; + "mul_assign" = [ "syn/extra-traits" ]; + "not" = [ "syn/extra-traits" ]; + "testing-helpers" = [ "dep:rustc_version" ]; + "try_into" = [ "syn/extra-traits" ]; + "try_unwrap" = [ "dep:convert_case" ]; + "unwrap" = [ "dep:convert_case" ]; + }; + resolvedDefaultFeatures = [ "default" "from" ]; + }; "digest" = rec { crateName = "digest"; version = "0.10.7"; @@ -3788,7 +3689,7 @@ rec { "tokio" = [ "dep:tokio" "tokio/net" "tokio/rt" "tokio/time" ]; "tracing" = [ "dep:tracing" ]; }; - resolvedDefaultFeatures = [ "client" "client-legacy" "default" "http1" "http2" "server" "server-auto" "service" "tokio" ]; + resolvedDefaultFeatures = [ "client" "client-legacy" "default" "http1" "server" "service" "tokio" "tracing" ]; }; "iana-time-zone" = rec { crateName = "iana-time-zone"; @@ -4641,10 +4542,10 @@ rec { }; "k8s-openapi" = rec { crateName = "k8s-openapi"; - version = "0.24.0"; + version = "0.25.0"; edition = "2021"; - links = "k8s-openapi-0.24.0"; - sha256 = "1m8ahw59g44kp9p4yd4ar0px15m2nyvhc5krbvqvw2ag6a8bjx9c"; + links = "k8s-openapi-0.25.0"; + sha256 = "1cphvicl9hq4nbp2pbzdcvz9r0f9kzwbqzgp383hl6mfawds8q5a"; libName = "k8s_openapi"; authors = [ "Arnav Singh " @@ -4673,11 +4574,6 @@ rec { packageId = "serde"; usesDefaultFeatures = false; } - { - name = "serde-value"; - packageId = "serde-value"; - usesDefaultFeatures = false; - } { name = "serde_json"; packageId = "serde_json"; @@ -4686,21 +4582,22 @@ rec { } ]; features = { - "earliest" = [ "v1_28" ]; - "latest" = [ "v1_32" ]; + "default" = [ "std" ]; + "earliest" = [ "v1_30" ]; + "latest" = [ "v1_33" ]; "schemars" = [ "dep:schemars" ]; }; - resolvedDefaultFeatures = [ "schemars" "v1_32" ]; + resolvedDefaultFeatures = [ "schemars" "v1_33" ]; }; "k8s-version" = rec { crateName = "k8s-version"; - version = "0.1.2"; + version = "0.1.3"; edition = "2024"; workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech/operator-rs.git"; - rev = "5fdc47a10de685e4eea49fd0a3f6c3a15a4966c1"; - sha256 = "0li9smdrz7danqz17lfkl0j9zl2i84csgc7d01lxs5qi8jcs9fzw"; + rev = "38d1665a81c8be8d86e0c55efc06d5fad769ae45"; + sha256 = "1dv5vgilcpj1h88pdzzb94aj85nrm5bm0qkpplwd5b0m857b6rmp"; }; libName = "k8s_version"; authors = [ @@ -4723,14 +4620,15 @@ rec { ]; features = { "darling" = [ "dep:darling" ]; + "serde" = [ "dep:serde" ]; }; resolvedDefaultFeatures = [ "darling" ]; }; "kube" = rec { crateName = "kube"; - version = "0.99.0"; + version = "1.0.0"; edition = "2021"; - sha256 = "0vnaqmxk40i2jgwxqsk8x75rn1j37p93gv3zx6mlhssk200b4kls"; + sha256 = "0bs31pdk7lnrza8p8x96mgdq8v60nv8r25vvpg1374h8fj8c6j8v"; authors = [ "clux " "Natalie Klestrup Röijezon " @@ -4801,9 +4699,9 @@ rec { }; "kube-client" = rec { crateName = "kube-client"; - version = "0.99.0"; + version = "1.0.0"; edition = "2021"; - sha256 = "1wfciml6xcylhlwn72dbiq8vc57cs0a9dzn2bb8j1ps242ayvhkz"; + sha256 = "17rbrvbs3m0c4lgbf2788f0hmpli3b8z1666r50m11h83dxpk6g1"; libName = "kube_client"; authors = [ "clux " @@ -4886,7 +4784,7 @@ rec { name = "hyper-util"; packageId = "hyper-util"; optional = true; - features = [ "client" "client-legacy" "http1" "tokio" ]; + features = [ "client" "client-legacy" "http1" "tokio" "tracing" ]; } { name = "jsonpath-rust"; @@ -5042,9 +4940,9 @@ rec { }; "kube-core" = rec { crateName = "kube-core"; - version = "0.99.0"; + version = "1.0.0"; edition = "2021"; - sha256 = "0xf60y07xkqqqqyl7rvk2r4amcvch61r2j49ssk0rrsqvf9hf3gz"; + sha256 = "1rwqwvwlna79dq2r1dqhzgxmwls5d76xg892m2gdk8nyi6xgpphv"; libName = "kube_core"; authors = [ "clux " @@ -5058,6 +4956,11 @@ rec { usesDefaultFeatures = false; features = [ "now" ]; } + { + name = "derive_more"; + packageId = "derive_more"; + features = [ "from" ]; + } { name = "form_urlencoded"; packageId = "form_urlencoded"; @@ -5119,9 +5022,9 @@ rec { }; "kube-derive" = rec { crateName = "kube-derive"; - version = "0.99.0"; + version = "1.0.0"; edition = "2021"; - sha256 = "1jclsj6ah0ijhzpd43ff0ipxs7i2r985ivm6r3m5zjppr66zaqn5"; + sha256 = "1gw3kymxb0w30gmhxj33g09vcqyq05pc38sjjf3516k86cv9lq4f"; procMacro = true; libName = "kube_derive"; authors = [ @@ -5168,9 +5071,9 @@ rec { }; "kube-runtime" = rec { crateName = "kube-runtime"; - version = "0.99.0"; + version = "1.0.0"; edition = "2021"; - sha256 = "1p7z4vl9l1hbqqqjx7qmkyq3rwhxp3nqa3if0qrqdgdlp7x4rww8"; + sha256 = "13lxw9fvci5h71rlfc1a21zivanvnxzrgykvm3wzi1j7anjdhjqx"; libName = "kube_runtime"; authors = [ "clux " @@ -5190,10 +5093,6 @@ rec { name = "async-stream"; packageId = "async-stream"; } - { - name = "async-trait"; - packageId = "async-trait"; - } { name = "backon"; packageId = "backon"; @@ -5488,19 +5387,7 @@ rec { ]; }; - "matchit 0.7.3" = rec { - crateName = "matchit"; - version = "0.7.3"; - edition = "2021"; - sha256 = "156bgdmmlv4crib31qhgg49nsjk88dxkdqp80ha2pk2rk6n6ax0f"; - authors = [ - "Ibraheem Ahmed " - ]; - features = { - }; - resolvedDefaultFeatures = [ "default" ]; - }; - "matchit 0.8.4" = rec { + "matchit" = rec { crateName = "matchit"; version = "0.8.4"; edition = "2021"; @@ -5855,9 +5742,9 @@ rec { }; "opentelemetry" = rec { crateName = "opentelemetry"; - version = "0.28.0"; + version = "0.29.1"; edition = "2021"; - sha256 = "09k43sgaarw3zx5j434ngq1canpcjibsbxaqqa8dyp0acxxncvi3"; + sha256 = "0v6ijlxs486yip2zbjdpgqc525q8l8k9s8ddz6b4ixvm4xz271wy"; dependencies = [ { name = "futures-core"; @@ -5893,7 +5780,8 @@ rec { } ]; features = { - "default" = [ "trace" "metrics" "logs" "internal-logs" ]; + "default" = [ "trace" "metrics" "logs" "internal-logs" "futures" ]; + "futures" = [ "futures-core" "futures-sink" "pin-project-lite" ]; "futures-core" = [ "dep:futures-core" ]; "futures-sink" = [ "dep:futures-sink" ]; "internal-logs" = [ "tracing" ]; @@ -5901,16 +5789,16 @@ rec { "spec_unstable_logs_enabled" = [ "logs" ]; "testing" = [ "trace" ]; "thiserror" = [ "dep:thiserror" ]; - "trace" = [ "pin-project-lite" "futures-sink" "futures-core" "thiserror" ]; + "trace" = [ "futures" "thiserror" ]; "tracing" = [ "dep:tracing" ]; }; - resolvedDefaultFeatures = [ "default" "futures-core" "futures-sink" "internal-logs" "logs" "metrics" "pin-project-lite" "spec_unstable_logs_enabled" "thiserror" "trace" "tracing" ]; + resolvedDefaultFeatures = [ "default" "futures" "futures-core" "futures-sink" "internal-logs" "logs" "metrics" "pin-project-lite" "spec_unstable_logs_enabled" "thiserror" "trace" "tracing" ]; }; "opentelemetry-appender-tracing" = rec { crateName = "opentelemetry-appender-tracing"; - version = "0.28.1"; + version = "0.29.1"; edition = "2021"; - sha256 = "1h6x4pwk225yi8mxl3sqkhg5ya93z57i68267lzi2c7c7fpwf4y5"; + sha256 = "0zbjp4idhprbfxk21wpcivicx8c8w60w7bn4kpfpn013xdjgh5p7"; libName = "opentelemetry_appender_tracing"; dependencies = [ { @@ -5937,11 +5825,17 @@ rec { } ]; devDependencies = [ + { + name = "tracing"; + packageId = "tracing"; + usesDefaultFeatures = false; + features = [ "std" ]; + } { name = "tracing-subscriber"; packageId = "tracing-subscriber"; usesDefaultFeatures = false; - features = [ "registry" "std" "env-filter" ]; + features = [ "env-filter" "registry" "std" "fmt" ]; } ]; features = { @@ -5955,9 +5849,9 @@ rec { }; "opentelemetry-http" = rec { crateName = "opentelemetry-http"; - version = "0.28.0"; + version = "0.29.0"; edition = "2021"; - sha256 = "0lv2sbsdr7b8bxnly92zzhlm1wzjbynib1xlkw9hs0qh56pkz1m8"; + sha256 = "1vf86z9d4dr9msck3k2xan9w5k35rfk9bylhpnav9d97p0rapms6"; libName = "opentelemetry_http"; dependencies = [ { @@ -6006,15 +5900,11 @@ rec { }; "opentelemetry-otlp" = rec { crateName = "opentelemetry-otlp"; - version = "0.28.0"; + version = "0.29.0"; edition = "2021"; - sha256 = "148xq13ar11bvmk7pxbslrhh5pgf40bv83n6dlysigj1dm613vsv"; + sha256 = "0mjnx260qn4x1p9pyip35m7764kkszn087f0f6xcq5k9w07p56fq"; libName = "opentelemetry_otlp"; dependencies = [ - { - name = "async-trait"; - packageId = "async-trait"; - } { name = "futures-core"; packageId = "futures-core"; @@ -6089,6 +5979,12 @@ rec { usesDefaultFeatures = false; features = [ "macros" "rt-multi-thread" ]; } + { + name = "tonic"; + packageId = "tonic"; + usesDefaultFeatures = false; + features = [ "server" ]; + } ]; features = { "default" = [ "http-proto" "reqwest-blocking-client" "trace" "metrics" "logs" "internal-logs" ]; @@ -6125,9 +6021,9 @@ rec { }; "opentelemetry-proto" = rec { crateName = "opentelemetry-proto"; - version = "0.28.0"; + version = "0.29.0"; edition = "2021"; - sha256 = "0vbl4si1mny87pmqxxg6wday45pcc8bvpcrf46cpwwi4606qgy2n"; + sha256 = "1cq96c16hxsfvcd26ip1v3sg9952mi89snqdawc5whw14cjdlh4c"; libName = "opentelemetry_proto"; dependencies = [ { @@ -6157,7 +6053,7 @@ rec { "base64" = [ "dep:base64" ]; "default" = [ "full" ]; "full" = [ "gen-tonic" "trace" "logs" "metrics" "zpages" "with-serde" "internal-logs" ]; - "gen-tonic" = [ "gen-tonic-messages" "tonic/transport" ]; + "gen-tonic" = [ "gen-tonic-messages" "tonic/channel" ]; "gen-tonic-messages" = [ "tonic" "prost" ]; "hex" = [ "dep:hex" ]; "internal-logs" = [ "tracing" ]; @@ -6178,15 +6074,10 @@ rec { }; "opentelemetry_sdk" = rec { crateName = "opentelemetry_sdk"; - version = "0.28.0"; + version = "0.29.0"; edition = "2021"; - sha256 = "0w4mycm070f4knvi1x5v199apd1fvi0712qiyv0pz70889havpw4"; + sha256 = "02r99lz30zrb8870vivww8cvwhdi78v5fv5sq6mr8wyls4hzppmg"; dependencies = [ - { - name = "async-trait"; - packageId = "async-trait"; - optional = true; - } { name = "futures-channel"; packageId = "futures-channel"; @@ -6217,10 +6108,10 @@ rec { } { name = "rand"; - packageId = "rand"; + packageId = "rand 0.9.1"; optional = true; usesDefaultFeatures = false; - features = [ "std" "std_rng" "small_rng" ]; + features = [ "std" "std_rng" "small_rng" "os_rng" "thread_rng" ]; } { name = "serde_json"; @@ -6252,10 +6143,9 @@ rec { } ]; features = { - "async-std" = [ "dep:async-std" ]; - "async-trait" = [ "dep:async-trait" ]; "default" = [ "trace" "metrics" "logs" "internal-logs" ]; "experimental_logs_batch_log_processor_with_async_runtime" = [ "logs" ]; + "experimental_logs_concurrent_log_processor" = [ "logs" ]; "experimental_metrics_disable_name_validation" = [ "metrics" ]; "experimental_metrics_periodicreader_with_async_runtime" = [ "metrics" ]; "experimental_trace_batch_span_processor_with_async_runtime" = [ "trace" ]; @@ -6264,25 +6154,24 @@ rec { "internal-logs" = [ "tracing" ]; "jaeger_remote_sampler" = [ "trace" "opentelemetry-http" "http" "serde" "serde_json" "url" ]; "logs" = [ "opentelemetry/logs" "serde_json" ]; - "metrics" = [ "opentelemetry/metrics" "glob" "async-trait" ]; + "metrics" = [ "opentelemetry/metrics" "glob" ]; "opentelemetry-http" = [ "dep:opentelemetry-http" ]; "percent-encoding" = [ "dep:percent-encoding" ]; "rand" = [ "dep:rand" ]; - "rt-async-std" = [ "async-std" "experimental_async_runtime" ]; "rt-tokio" = [ "tokio" "tokio-stream" "experimental_async_runtime" ]; "rt-tokio-current-thread" = [ "tokio" "tokio-stream" "experimental_async_runtime" ]; "serde" = [ "dep:serde" ]; "serde_json" = [ "dep:serde_json" ]; "spec_unstable_logs_enabled" = [ "logs" "opentelemetry/spec_unstable_logs_enabled" ]; "spec_unstable_metrics_views" = [ "metrics" ]; - "testing" = [ "opentelemetry/testing" "trace" "metrics" "logs" "rt-async-std" "rt-tokio" "rt-tokio-current-thread" "tokio/macros" "tokio/rt-multi-thread" ]; + "testing" = [ "opentelemetry/testing" "trace" "metrics" "logs" "rt-tokio" "rt-tokio-current-thread" "tokio/macros" "tokio/rt-multi-thread" ]; "tokio" = [ "dep:tokio" ]; "tokio-stream" = [ "dep:tokio-stream" ]; "trace" = [ "opentelemetry/trace" "rand" "percent-encoding" ]; "tracing" = [ "dep:tracing" ]; "url" = [ "dep:url" ]; }; - resolvedDefaultFeatures = [ "async-trait" "default" "experimental_async_runtime" "glob" "internal-logs" "logs" "metrics" "percent-encoding" "rand" "rt-tokio" "serde_json" "spec_unstable_logs_enabled" "tokio" "tokio-stream" "trace" "tracing" ]; + resolvedDefaultFeatures = [ "default" "experimental_async_runtime" "glob" "internal-logs" "logs" "metrics" "percent-encoding" "rand" "rt-tokio" "serde_json" "spec_unstable_logs_enabled" "tokio" "tokio-stream" "trace" "tracing" ]; }; "ordered-float" = rec { crateName = "ordered-float"; @@ -6881,7 +6770,7 @@ rec { "rustc-dep-of-std" = [ "compiler_builtins/rustc-dep-of-std" "core" ]; }; }; - "rand" = rec { + "rand 0.8.5" = rec { crateName = "rand"; version = "0.8.5"; edition = "2018"; @@ -6900,13 +6789,13 @@ rec { } { name = "rand_chacha"; - packageId = "rand_chacha"; + packageId = "rand_chacha 0.3.1"; optional = true; usesDefaultFeatures = false; } { name = "rand_core"; - packageId = "rand_core"; + packageId = "rand_core 0.6.4"; } ]; features = { @@ -6925,7 +6814,40 @@ rec { }; resolvedDefaultFeatures = [ "alloc" "default" "getrandom" "libc" "rand_chacha" "small_rng" "std" "std_rng" ]; }; - "rand_chacha" = rec { + "rand 0.9.1" = rec { + crateName = "rand"; + version = "0.9.1"; + edition = "2021"; + sha256 = "15yxfcxbgmwba5cv7mjg9bhc1r5c9483dfcdfspg62x4jk8dkgwz"; + authors = [ + "The Rand Project Developers" + "The Rust Project Developers" + ]; + dependencies = [ + { + name = "rand_chacha"; + packageId = "rand_chacha 0.9.0"; + optional = true; + usesDefaultFeatures = false; + } + { + name = "rand_core"; + packageId = "rand_core 0.9.3"; + usesDefaultFeatures = false; + } + ]; + features = { + "default" = [ "std" "std_rng" "os_rng" "small_rng" "thread_rng" ]; + "log" = [ "dep:log" ]; + "os_rng" = [ "rand_core/os_rng" ]; + "serde" = [ "dep:serde" "rand_core/serde" ]; + "std" = [ "rand_core/std" "rand_chacha?/std" "alloc" ]; + "std_rng" = [ "dep:rand_chacha" ]; + "thread_rng" = [ "std" "std_rng" "os_rng" ]; + }; + 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"; @@ -6944,7 +6866,7 @@ rec { } { name = "rand_core"; - packageId = "rand_core"; + packageId = "rand_core 0.6.4"; } ]; features = { @@ -6955,7 +6877,44 @@ rec { }; resolvedDefaultFeatures = [ "std" ]; }; - "rand_core" = rec { + "rand_chacha 0.9.0" = rec { + crateName = "rand_chacha"; + version = "0.9.0"; + edition = "2021"; + sha256 = "1jr5ygix7r60pz0s1cv3ms1f6pd1i9pcdmnxzzhjc3zn3mgjn0nk"; + 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.9.3"; + } + ]; + devDependencies = [ + { + name = "rand_core"; + packageId = "rand_core 0.9.3"; + features = [ "os_rng" ]; + } + ]; + features = { + "default" = [ "std" ]; + "os_rng" = [ "rand_core/os_rng" ]; + "serde" = [ "dep:serde" ]; + "std" = [ "ppv-lite86/std" "rand_core/std" ]; + }; + resolvedDefaultFeatures = [ "std" ]; + }; + "rand_core 0.6.4" = rec { crateName = "rand_core"; version = "0.6.4"; edition = "2018"; @@ -6979,6 +6938,29 @@ rec { }; resolvedDefaultFeatures = [ "alloc" "getrandom" "std" ]; }; + "rand_core 0.9.3" = rec { + crateName = "rand_core"; + version = "0.9.3"; + edition = "2021"; + sha256 = "0f3xhf16yks5ic6kmgxcpv1ngdhp48mmfy4ag82i1wnwh8ws3ncr"; + authors = [ + "The Rand Project Developers" + "The Rust Project Developers" + ]; + dependencies = [ + { + name = "getrandom"; + packageId = "getrandom 0.3.2"; + optional = true; + } + ]; + features = { + "os_rng" = [ "dep:getrandom" ]; + "serde" = [ "dep:serde" ]; + "std" = [ "getrandom?/std" ]; + }; + resolvedDefaultFeatures = [ "os_rng" "std" ]; + }; "redox_syscall" = rec { crateName = "redox_syscall"; version = "0.5.11"; @@ -8832,13 +8814,13 @@ rec { }; "stackable-operator" = rec { crateName = "stackable-operator"; - version = "0.92.0"; + version = "0.93.0"; edition = "2024"; workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech/operator-rs.git"; - rev = "5fdc47a10de685e4eea49fd0a3f6c3a15a4966c1"; - sha256 = "0li9smdrz7danqz17lfkl0j9zl2i84csgc7d01lxs5qi8jcs9fzw"; + rev = "38d1665a81c8be8d86e0c55efc06d5fad769ae45"; + sha256 = "1dv5vgilcpj1h88pdzzb94aj85nrm5bm0qkpplwd5b0m857b6rmp"; }; libName = "stackable_operator"; authors = [ @@ -8893,7 +8875,7 @@ rec { name = "k8s-openapi"; packageId = "k8s-openapi"; usesDefaultFeatures = false; - features = [ "schemars" "v1_32" ]; + features = [ "schemars" "v1_33" ]; } { name = "kube"; @@ -8996,8 +8978,8 @@ rec { workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech/operator-rs.git"; - rev = "5fdc47a10de685e4eea49fd0a3f6c3a15a4966c1"; - sha256 = "0li9smdrz7danqz17lfkl0j9zl2i84csgc7d01lxs5qi8jcs9fzw"; + rev = "38d1665a81c8be8d86e0c55efc06d5fad769ae45"; + sha256 = "1dv5vgilcpj1h88pdzzb94aj85nrm5bm0qkpplwd5b0m857b6rmp"; }; procMacro = true; libName = "stackable_operator_derive"; @@ -9031,8 +9013,8 @@ rec { workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech/operator-rs.git"; - rev = "5fdc47a10de685e4eea49fd0a3f6c3a15a4966c1"; - sha256 = "0li9smdrz7danqz17lfkl0j9zl2i84csgc7d01lxs5qi8jcs9fzw"; + rev = "38d1665a81c8be8d86e0c55efc06d5fad769ae45"; + sha256 = "1dv5vgilcpj1h88pdzzb94aj85nrm5bm0qkpplwd5b0m857b6rmp"; }; libName = "stackable_shared"; authors = [ @@ -9072,8 +9054,8 @@ rec { workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech/operator-rs.git"; - rev = "5fdc47a10de685e4eea49fd0a3f6c3a15a4966c1"; - sha256 = "0li9smdrz7danqz17lfkl0j9zl2i84csgc7d01lxs5qi8jcs9fzw"; + rev = "38d1665a81c8be8d86e0c55efc06d5fad769ae45"; + sha256 = "1dv5vgilcpj1h88pdzzb94aj85nrm5bm0qkpplwd5b0m857b6rmp"; }; libName = "stackable_telemetry"; authors = [ @@ -9082,7 +9064,7 @@ rec { dependencies = [ { name = "axum"; - packageId = "axum 0.8.3"; + packageId = "axum"; } { name = "clap"; @@ -9177,8 +9159,8 @@ rec { workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech/operator-rs.git"; - rev = "5fdc47a10de685e4eea49fd0a3f6c3a15a4966c1"; - sha256 = "0li9smdrz7danqz17lfkl0j9zl2i84csgc7d01lxs5qi8jcs9fzw"; + rev = "38d1665a81c8be8d86e0c55efc06d5fad769ae45"; + sha256 = "1dv5vgilcpj1h88pdzzb94aj85nrm5bm0qkpplwd5b0m857b6rmp"; }; libName = "stackable_versioned"; authors = [ @@ -9203,8 +9185,8 @@ rec { workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech/operator-rs.git"; - rev = "5fdc47a10de685e4eea49fd0a3f6c3a15a4966c1"; - sha256 = "0li9smdrz7danqz17lfkl0j9zl2i84csgc7d01lxs5qi8jcs9fzw"; + rev = "38d1665a81c8be8d86e0c55efc06d5fad769ae45"; + sha256 = "1dv5vgilcpj1h88pdzzb94aj85nrm5bm0qkpplwd5b0m857b6rmp"; }; procMacro = true; libName = "stackable_versioned_macros"; @@ -9229,7 +9211,7 @@ rec { packageId = "k8s-openapi"; optional = true; usesDefaultFeatures = false; - features = [ "schemars" "v1_32" ]; + features = [ "schemars" "v1_33" ]; } { name = "k8s-version"; @@ -9261,7 +9243,7 @@ rec { name = "k8s-openapi"; packageId = "k8s-openapi"; usesDefaultFeatures = false; - features = [ "schemars" "v1_32" ]; + features = [ "schemars" "v1_33" ]; } ]; features = { @@ -9935,7 +9917,7 @@ rec { "time" = [ "tokio/time" ]; "tokio-util" = [ "dep:tokio-util" ]; }; - resolvedDefaultFeatures = [ "default" "net" "time" ]; + resolvedDefaultFeatures = [ "default" "time" ]; }; "tokio-util" = rec { crateName = "tokio-util"; @@ -10051,22 +10033,11 @@ rec { "Lucio Franco " ]; dependencies = [ - { - name = "async-stream"; - packageId = "async-stream"; - optional = true; - } { name = "async-trait"; packageId = "async-trait"; optional = true; } - { - name = "axum"; - packageId = "axum 0.7.9"; - optional = true; - usesDefaultFeatures = false; - } { name = "base64"; packageId = "base64 0.22.1"; @@ -10080,11 +10051,6 @@ rec { packageId = "flate2"; optional = true; } - { - name = "h2"; - packageId = "h2"; - optional = true; - } { name = "http"; packageId = "http"; @@ -10129,12 +10095,6 @@ rec { usesDefaultFeatures = false; features = [ "std" ]; } - { - name = "socket2"; - packageId = "socket2"; - optional = true; - features = [ "all" ]; - } { name = "tokio"; packageId = "tokio"; @@ -10192,7 +10152,7 @@ rec { "transport" = [ "server" "channel" ]; "zstd" = [ "dep:zstd" ]; }; - resolvedDefaultFeatures = [ "channel" "codegen" "gzip" "prost" "router" "server" "transport" ]; + resolvedDefaultFeatures = [ "channel" "codegen" "gzip" "prost" ]; }; "tower 0.4.13" = rec { crateName = "tower"; @@ -10232,7 +10192,7 @@ rec { } { name = "rand"; - packageId = "rand"; + packageId = "rand 0.8.5"; optional = true; features = [ "small_rng" ]; } @@ -10732,9 +10692,9 @@ rec { }; "tracing-opentelemetry" = rec { crateName = "tracing-opentelemetry"; - version = "0.29.0"; + version = "0.30.0"; edition = "2021"; - sha256 = "0dnca0b7bxbp6gd64skkvzy3p58yjh35kvnxpggz7sfwd4jjs7vj"; + sha256 = "0i64g7cyrdpzkc2zixz8bd0v1icha63ifcdwpvc3z0gmsr5pd3px"; libName = "tracing_opentelemetry"; dependencies = [ { diff --git a/Cargo.toml b/Cargo.toml index edd9ea37..d4268b07 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,7 +11,7 @@ repository = "https://github.com/stackabletech/druid-operator" [workspace.dependencies] product-config = { git = "https://github.com/stackabletech/product-config.git", tag = "0.7.0" } -stackable-operator = { git = "https://github.com/stackabletech/operator-rs.git", features = ["telemetry", "versioned"], tag = "stackable-operator-0.92.0" } +stackable-operator = { git = "https://github.com/stackabletech/operator-rs.git", features = ["telemetry", "versioned"], tag = "stackable-operator-0.93.0" } anyhow = "1.0" built = { version = "0.7", features = ["chrono", "git2"] } diff --git a/crate-hashes.json b/crate-hashes.json index 9dcf61ef..fe60e4fd 100644 --- a/crate-hashes.json +++ b/crate-hashes.json @@ -1,10 +1,10 @@ { - "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.92.0#k8s-version@0.1.2": "0li9smdrz7danqz17lfkl0j9zl2i84csgc7d01lxs5qi8jcs9fzw", - "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.92.0#stackable-operator-derive@0.3.1": "0li9smdrz7danqz17lfkl0j9zl2i84csgc7d01lxs5qi8jcs9fzw", - "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.92.0#stackable-operator@0.92.0": "0li9smdrz7danqz17lfkl0j9zl2i84csgc7d01lxs5qi8jcs9fzw", - "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.92.0#stackable-shared@0.0.1": "0li9smdrz7danqz17lfkl0j9zl2i84csgc7d01lxs5qi8jcs9fzw", - "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.92.0#stackable-telemetry@0.6.0": "0li9smdrz7danqz17lfkl0j9zl2i84csgc7d01lxs5qi8jcs9fzw", - "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.92.0#stackable-versioned-macros@0.7.1": "0li9smdrz7danqz17lfkl0j9zl2i84csgc7d01lxs5qi8jcs9fzw", - "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.92.0#stackable-versioned@0.7.1": "0li9smdrz7danqz17lfkl0j9zl2i84csgc7d01lxs5qi8jcs9fzw", + "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.93.0#k8s-version@0.1.3": "1dv5vgilcpj1h88pdzzb94aj85nrm5bm0qkpplwd5b0m857b6rmp", + "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.93.0#stackable-operator-derive@0.3.1": "1dv5vgilcpj1h88pdzzb94aj85nrm5bm0qkpplwd5b0m857b6rmp", + "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.93.0#stackable-operator@0.93.0": "1dv5vgilcpj1h88pdzzb94aj85nrm5bm0qkpplwd5b0m857b6rmp", + "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.93.0#stackable-shared@0.0.1": "1dv5vgilcpj1h88pdzzb94aj85nrm5bm0qkpplwd5b0m857b6rmp", + "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.93.0#stackable-telemetry@0.6.0": "1dv5vgilcpj1h88pdzzb94aj85nrm5bm0qkpplwd5b0m857b6rmp", + "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.93.0#stackable-versioned-macros@0.7.1": "1dv5vgilcpj1h88pdzzb94aj85nrm5bm0qkpplwd5b0m857b6rmp", + "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.93.0#stackable-versioned@0.7.1": "1dv5vgilcpj1h88pdzzb94aj85nrm5bm0qkpplwd5b0m857b6rmp", "git+https://github.com/stackabletech/product-config.git?tag=0.7.0#product-config@0.7.0": "0gjsm80g6r75pm3824dcyiz4ysq1ka4c1if6k1mjm9cnd5ym0gny" } \ No newline at end of file diff --git a/deploy/helm/druid-operator/crds/crds.yaml b/deploy/helm/druid-operator/crds/crds.yaml index d3df0746..3497dc58 100644 --- a/deploy/helm/druid-operator/crds/crds.yaml +++ b/deploy/helm/druid-operator/crds/crds.yaml @@ -519,10 +519,16 @@ spec: items: properties: authenticationClass: - description: Name of the [AuthenticationClass](https://docs.stackable.tech/home/nightly/concepts/authentication) used to authenticate users. + description: |- + Name of the [AuthenticationClass](https://docs.stackable.tech/home/nightly/concepts/authentication) used to authenticate users. + + To get the concrete [`AuthenticationClass`], we must resolve it. This resolution can be achieved by using [`ClientAuthenticationDetails::resolve_class`]. type: string oidc: - description: This field contains OIDC-specific configuration. It is only required in case OIDC is used. + description: |- + This field contains OIDC-specific configuration. It is only required in case OIDC is used. + + Use [`ClientAuthenticationDetails::oidc_or_error`] to get the value or report an error to the user. nullable: true properties: clientCredentialsSecret: @@ -530,7 +536,10 @@ spec: type: string extraScopes: default: [] - description: An optional list of extra scopes which get merged with the scopes defined in the [`AuthenticationClass`]. + description: |- + An optional list of extra scopes which get merged with the scopes defined in the [`AuthenticationClass`][1]. + + [1]: crate::crd::authentication::core::v1alpha1::AuthenticationClass items: type: string type: array diff --git a/rust/operator-binary/src/authentication/ldap.rs b/rust/operator-binary/src/authentication/ldap.rs index e81a407b..cae6ca72 100644 --- a/rust/operator-binary/src/authentication/ldap.rs +++ b/rust/operator-binary/src/authentication/ldap.rs @@ -3,18 +3,16 @@ use std::collections::BTreeMap; use snafu::ResultExt; use stackable_operator::{ builder::pod::{PodBuilder, container::ContainerBuilder}, - commons::authentication::ldap::AuthenticationProvider, + crd::authentication::ldap, }; -use crate::{ - authentication::{ - AddLdapVolumesSnafu, ConstructLdapEndpointUrlSnafu, Error, MissingLdapBindCredentialsSnafu, - }, - crd::security::{STACKABLE_TLS_DIR, TLS_STORE_PASSWORD, add_cert_to_trust_store_cmd}, +use super::{ + AddLdapVolumesSnafu, ConstructLdapEndpointUrlSnafu, Error, MissingLdapBindCredentialsSnafu, }; +use crate::crd::security::{STACKABLE_TLS_DIR, TLS_STORE_PASSWORD, add_cert_to_trust_store_cmd}; fn add_authenticator_config( - provider: &AuthenticationProvider, + provider: &ldap::v1alpha1::AuthenticationProvider, config: &mut BTreeMap>, ) -> Result<(), Error> { config.insert( @@ -88,7 +86,7 @@ fn add_authorizer_config(config: &mut BTreeMap>) { } pub fn generate_runtime_properties_config( - provider: &AuthenticationProvider, + provider: &ldap::v1alpha1::AuthenticationProvider, config: &mut BTreeMap>, ) -> Result<(), Error> { add_authenticator_config(provider, config)?; @@ -99,7 +97,7 @@ pub fn generate_runtime_properties_config( pub fn prepare_container_commands( auth_class_name: &String, - provider: &AuthenticationProvider, + provider: &ldap::v1alpha1::AuthenticationProvider, command: &mut Vec, ) { if let Some(tls_ca_cert_mount_path) = provider.tls.tls_ca_cert_mount_path() { @@ -113,7 +111,7 @@ pub fn prepare_container_commands( } pub fn add_volumes_and_mounts( - provider: &AuthenticationProvider, + provider: &ldap::v1alpha1::AuthenticationProvider, pb: &mut PodBuilder, cb_druid: &mut ContainerBuilder, cb_prepare: &mut ContainerBuilder, diff --git a/rust/operator-binary/src/authentication/mod.rs b/rust/operator-binary/src/authentication/mod.rs index 1e9d8371..dafb3779 100644 --- a/rust/operator-binary/src/authentication/mod.rs +++ b/rust/operator-binary/src/authentication/mod.rs @@ -3,15 +3,7 @@ use std::collections::BTreeMap; use snafu::Snafu; use stackable_operator::{ builder::pod::{PodBuilder, container::ContainerBuilder}, - commons::{ - authentication::{ - ldap::AuthenticationProvider as LdapAuthenticationProvider, - oidc::{ - AuthenticationProvider as OidcAuthenticationProvider, ClientAuthenticationOptions, - }, - }, - tls_verification::TlsClientDetailsError, - }, + crd::authentication, k8s_openapi::api::core::v1::EnvVar, }; @@ -34,21 +26,23 @@ type Result = std::result::Result; pub enum Error { #[snafu(display("failed to create LDAP endpoint url."))] ConstructLdapEndpointUrl { - source: stackable_operator::commons::authentication::ldap::Error, + source: stackable_operator::crd::authentication::ldap::v1alpha1::Error, }, #[snafu(display("failed to create the OIDC well-known url."))] ConstructOidcWellKnownUrl { - source: stackable_operator::commons::authentication::oidc::Error, + source: stackable_operator::crd::authentication::oidc::v1alpha1::Error, }, #[snafu(display("failed to add LDAP Volumes and VolumeMounts to the Pod and containers"))] AddLdapVolumes { - source: stackable_operator::commons::authentication::ldap::Error, + source: stackable_operator::crd::authentication::ldap::v1alpha1::Error, }, #[snafu(display("failed to add OIDC Volumes and VolumeMounts to the Pod and containers"))] - AddOidcVolumes { source: TlsClientDetailsError }, + AddOidcVolumes { + source: stackable_operator::commons::tls_verification::TlsClientDetailsError, + }, #[snafu(display( "failed to access bind credentials although they are required for LDAP to work" @@ -61,12 +55,12 @@ pub enum DruidAuthenticationConfig { Tls {}, Ldap { auth_class_name: String, - provider: LdapAuthenticationProvider, + provider: authentication::ldap::v1alpha1::AuthenticationProvider, }, Oidc { auth_class_name: String, - provider: OidcAuthenticationProvider, - oidc: ClientAuthenticationOptions, + provider: authentication::oidc::v1alpha1::AuthenticationProvider, + oidc: authentication::oidc::v1alpha1::ClientAuthenticationOptions, }, } @@ -252,8 +246,6 @@ impl DruidAuthenticationConfig { #[cfg(test)] mod test { - use stackable_operator::commons::authentication::ldap::AuthenticationProvider as LdapAuthenticationProvider; - use super::*; #[test] @@ -261,7 +253,9 @@ mod test { let auth_config = DruidAuthenticationConfig::try_from(AuthenticationClassesResolved { auth_classes: vec![AuthenticationClassResolved::Ldap { auth_class_name: "ldap".to_string(), - provider: serde_yaml::from_str::( + provider: serde_yaml::from_str::< + authentication::ldap::v1alpha1::AuthenticationProvider, + >( " hostname: openldap searchBase: ou=users,dc=example,dc=org diff --git a/rust/operator-binary/src/authentication/oidc.rs b/rust/operator-binary/src/authentication/oidc.rs index 2345ca9a..f61849db 100644 --- a/rust/operator-binary/src/authentication/oidc.rs +++ b/rust/operator-binary/src/authentication/oidc.rs @@ -3,20 +3,20 @@ use std::collections::BTreeMap; use snafu::ResultExt; use stackable_operator::{ builder::pod::{PodBuilder, container::ContainerBuilder}, - commons::authentication::oidc::{AuthenticationProvider, ClientAuthenticationOptions}, + crd::authentication::oidc, k8s_openapi::api::core::v1::EnvVar, }; +use super::{AddOidcVolumesSnafu, ConstructOidcWellKnownUrlSnafu, Error}; use crate::{ - authentication::{AddOidcVolumesSnafu, ConstructOidcWellKnownUrlSnafu, Error}, crd::{COOKIE_PASSPHRASE_ENV, DruidRole, security::add_cert_to_jvm_trust_store_cmd}, internal_secret::env_var_from_secret, }; /// Creates OIDC authenticator config using the pac4j extension for Druid: . fn add_authenticator_config( - provider: &AuthenticationProvider, - oidc: &ClientAuthenticationOptions, + provider: &oidc::v1alpha1::AuthenticationProvider, + oidc: &oidc::v1alpha1::ClientAuthenticationOptions, config: &mut BTreeMap>, ) -> Result<(), Error> { let well_known_url = &provider @@ -24,7 +24,9 @@ fn add_authenticator_config( .context(ConstructOidcWellKnownUrlSnafu)?; let (oidc_client_id_env, oidc_client_secret_env) = - AuthenticationProvider::client_credentials_env_names(&oidc.client_credentials_secret_ref); + oidc::v1alpha1::AuthenticationProvider::client_credentials_env_names( + &oidc.client_credentials_secret_ref, + ); let mut scopes = provider.scopes.clone(); scopes.extend_from_slice(&oidc.extra_scopes); @@ -84,8 +86,8 @@ fn add_authorizer_config(config: &mut BTreeMap>) { /// OIDC authentication is not configured on middlemanagers, because end users don't interact with them directly using the web console and /// turning on OIDC will lead to problems with the communication with coordinators during data ingest. pub fn generate_runtime_properties_config( - provider: &AuthenticationProvider, - oidc: &ClientAuthenticationOptions, + provider: &oidc::v1alpha1::AuthenticationProvider, + oidc: &oidc::v1alpha1::ClientAuthenticationOptions, role: &DruidRole, config: &mut BTreeMap>, ) -> Result<(), Error> { @@ -106,7 +108,7 @@ pub fn generate_runtime_properties_config( pub fn main_container_commands( auth_class_name: &String, - provider: &AuthenticationProvider, + provider: &oidc::v1alpha1::AuthenticationProvider, command: &mut Vec, ) { if let Some(tls_ca_cert_mount_path) = provider.tls.tls_ca_cert_mount_path() { @@ -121,16 +123,18 @@ pub fn main_container_commands( /// Not necessary on middlemanagers, because OIDC is not configured on them. pub fn get_env_var_mounts( role: &DruidRole, - oidc: &ClientAuthenticationOptions, + oidc: &oidc::v1alpha1::ClientAuthenticationOptions, internal_secret_name: &str, ) -> Vec { let mut envs = vec![]; match role { DruidRole::MiddleManager => (), _ => { - envs.extend(AuthenticationProvider::client_credentials_env_var_mounts( - oidc.client_credentials_secret_ref.to_owned(), - )); + envs.extend( + oidc::v1alpha1::AuthenticationProvider::client_credentials_env_var_mounts( + oidc.client_credentials_secret_ref.to_owned(), + ), + ); envs.push(env_var_from_secret( internal_secret_name, None, @@ -142,7 +146,7 @@ pub fn get_env_var_mounts( } pub fn add_volumes_and_mounts( - provider: &AuthenticationProvider, + provider: &oidc::v1alpha1::AuthenticationProvider, pb: &mut PodBuilder, cb_druid: &mut ContainerBuilder, cb_prepare: &mut ContainerBuilder, @@ -165,13 +169,13 @@ mod tests { #[case("/realms/sdp/")] #[case("/realms/sdp/////")] fn test_add_authenticator_config(#[case] root_path: String) { - use stackable_operator::commons::{ - authentication::oidc, - tls_verification::{CaCert, TlsServerVerification, TlsVerification}, + use stackable_operator::{ + commons::tls_verification::{CaCert, TlsServerVerification, TlsVerification}, + crd::authentication::oidc, }; let mut properties = BTreeMap::new(); - let provider = oidc::AuthenticationProvider::new( + let provider = oidc::v1alpha1::AuthenticationProvider::new( "keycloak.mycorp.org".to_owned().try_into().unwrap(), Some(443), root_path, @@ -186,7 +190,7 @@ mod tests { vec!["openid".to_owned()], None, ); - let oidc = ClientAuthenticationOptions { + let oidc = oidc::v1alpha1::ClientAuthenticationOptions { client_credentials_secret_ref: "nifi-keycloak-client".to_owned(), extra_scopes: vec![], product_specific_fields: (), diff --git a/rust/operator-binary/src/crd/authentication.rs b/rust/operator-binary/src/crd/authentication.rs index 0ade770c..1b477445 100644 --- a/rust/operator-binary/src/crd/authentication.rs +++ b/rust/operator-binary/src/crd/authentication.rs @@ -3,11 +3,7 @@ use std::future::Future; use snafu::{ResultExt, Snafu, ensure}; use stackable_operator::{ client::Client, - commons::authentication::{ - AuthenticationClass, AuthenticationClassProvider, ClientAuthenticationDetails, ldap, - oidc::{self, IdentityProviderHint}, - tls, - }, + crd::authentication::{core, ldap, oidc, tls}, kube::{ResourceExt, runtime::reflector::ObjectRef}, }; use tracing::info; @@ -17,9 +13,11 @@ use crate::crd::v1alpha1::DruidClusterConfig; type Result = std::result::Result; // The assumed OIDC provider if no hint is given in the AuthClass -pub const DEFAULT_OIDC_PROVIDER: IdentityProviderHint = IdentityProviderHint::Keycloak; +pub const DEFAULT_OIDC_PROVIDER: oidc::v1alpha1::IdentityProviderHint = + oidc::v1alpha1::IdentityProviderHint::Keycloak; -const SUPPORTED_OIDC_PROVIDERS: &[IdentityProviderHint] = &[IdentityProviderHint::Keycloak]; +const SUPPORTED_OIDC_PROVIDERS: &[oidc::v1alpha1::IdentityProviderHint] = + &[oidc::v1alpha1::IdentityProviderHint::Keycloak]; const SUPPORTED_AUTHENTICATION_CLASS_PROVIDERS: [&str; 3] = ["LDAP", "TLS", "OIDC"]; @@ -37,7 +35,7 @@ pub enum Error { ))] AuthenticationClassProviderNotSupported { authentication_class_provider: String, - authentication_class: ObjectRef, + authentication_class: ObjectRef, }, #[snafu(display( "LDAP authentication without bind credentials is currently not supported. See https://github.com/stackabletech/druid-operator/issues/383 for details" @@ -58,7 +56,7 @@ pub enum Error { }, #[snafu(display("invalid OIDC configuration"))] OidcConfigurationInvalid { - source: stackable_operator::commons::authentication::Error, + source: stackable_operator::crd::authentication::core::v1alpha1::Error, }, #[snafu(display( "the OIDC provider {oidc_provider:?} is not yet supported (AuthenticationClass {auth_class_name:?})" @@ -78,16 +76,16 @@ pub struct AuthenticationClassesResolved { pub enum AuthenticationClassResolved { /// An [AuthenticationClass](DOCS_BASE_URL_PLACEHOLDER/concepts/authentication) to use. Tls { - provider: tls::AuthenticationProvider, + provider: tls::v1alpha1::AuthenticationProvider, }, Ldap { auth_class_name: String, - provider: ldap::AuthenticationProvider, + provider: ldap::v1alpha1::AuthenticationProvider, }, Oidc { auth_class_name: String, - provider: oidc::AuthenticationProvider, - oidc: oidc::ClientAuthenticationOptions<()>, + provider: oidc::v1alpha1::AuthenticationProvider, + oidc: oidc::v1alpha1::ClientAuthenticationOptions<()>, }, } @@ -96,7 +94,7 @@ impl AuthenticationClassesResolved { cluster_config: &DruidClusterConfig, client: &Client, ) -> Result { - let resolve_auth_class = |auth_details: ClientAuthenticationDetails| async move { + let resolve_auth_class = |auth_details: core::v1alpha1::ClientAuthenticationDetails| async move { auth_details.resolve_class(client).await }; AuthenticationClassesResolved::resolve(cluster_config, resolve_auth_class).await @@ -105,10 +103,12 @@ impl AuthenticationClassesResolved { /// Retrieves all provided `AuthenticationClass` references and checks if the configuration (TLS settings, secret class, OIDC config, etc.) is valid. pub async fn resolve( cluster_config: &DruidClusterConfig, - resolve_auth_class: impl Fn(ClientAuthenticationDetails) -> R, + resolve_auth_class: impl Fn(core::v1alpha1::ClientAuthenticationDetails) -> R, ) -> Result where - R: Future>, + R: Future< + Output = Result, + >, { let mut resolved_auth_classes = vec![]; let auth_details = &cluster_config.authentication; @@ -130,7 +130,7 @@ impl AuthenticationClassesResolved { .and_then(|tls| tls.server_and_internal_secret_class.to_owned()); match &auth_class.spec.provider { - AuthenticationClassProvider::Tls(provider) => { + core::v1alpha1::AuthenticationClassProvider::Tls(provider) => { match &server_and_internal_secret_class { Some(server_and_internal_secret_class) => { if let Some(auth_class_secret_class) = @@ -153,7 +153,7 @@ impl AuthenticationClassesResolved { provider: provider.clone(), }) } - AuthenticationClassProvider::Ldap(provider) => { + core::v1alpha1::AuthenticationClassProvider::Ldap(provider) => { if server_and_internal_secret_class.is_none() { // We want the truststore to exist when using LDAP so that we can point to it return LdapAuthenticationWithoutServerTlsNotSupportedSnafu.fail(); @@ -167,12 +167,18 @@ impl AuthenticationClassesResolved { provider: provider.to_owned(), }) } - AuthenticationClassProvider::Oidc(provider) => resolved_auth_classes.push( - AuthenticationClassesResolved::from_oidc(&auth_class_name, provider, entry)?, - ), + core::v1alpha1::AuthenticationClassProvider::Oidc(provider) => { + resolved_auth_classes.push(AuthenticationClassesResolved::from_oidc( + &auth_class_name, + provider, + entry, + )?) + } _ => AuthenticationClassProviderNotSupportedSnafu { authentication_class_provider: auth_class.spec.provider.to_string(), - authentication_class: ObjectRef::::new(&auth_class_name), + authentication_class: ObjectRef::::new( + &auth_class_name, + ), } .fail()?, }; @@ -185,8 +191,8 @@ impl AuthenticationClassesResolved { fn from_oidc( auth_class_name: &str, - provider: &oidc::AuthenticationProvider, - auth_details: &ClientAuthenticationDetails, + provider: &oidc::v1alpha1::AuthenticationProvider, + auth_details: &core::v1alpha1::ClientAuthenticationDetails, ) -> Result { let oidc_provider = match &provider.provider_hint { None => { @@ -233,7 +239,7 @@ mod tests { use std::pin::Pin; use indoc::{formatdoc, indoc}; - use oidc::ClientAuthenticationOptions; + use oidc::v1alpha1::ClientAuthenticationOptions; use stackable_operator::kube; use super::*; @@ -281,7 +287,7 @@ zookeeperConfigMapName: zk-config-map AuthenticationClassesResolved { auth_classes: vec![AuthenticationClassResolved::Ldap { auth_class_name: "ldap".to_string(), - provider: serde_yaml::from_str::( + provider: serde_yaml::from_str::( " hostname: my.ldap.server port: 389 @@ -326,7 +332,7 @@ zookeeperConfigMapName: zk-config-map AuthenticationClassesResolved { auth_classes: vec![AuthenticationClassResolved::Oidc { auth_class_name: "oidc".to_string(), - provider: serde_yaml::from_str::( + provider: serde_yaml::from_str::( " hostname: my.oidc.server principalClaim: preferred_username @@ -369,7 +375,8 @@ zookeeperConfigMapName: zk-config-map assert_eq!( AuthenticationClassesResolved { auth_classes: vec![AuthenticationClassResolved::Tls { - provider: serde_yaml::from_str::("").unwrap(), + provider: serde_yaml::from_str::("") + .unwrap(), }] }, auth_classes_resolved @@ -648,7 +655,7 @@ zookeeperConfigMapName: zk-config-map /// Deserialize the given `AuthenticationClass` YAML documents. /// /// Fail if the given string cannot be deserialized. - fn deserialize_auth_classes(input: &str) -> Vec { + fn deserialize_auth_classes(input: &str) -> Vec { if input.is_empty() { Vec::new() } else { @@ -669,13 +676,20 @@ zookeeperConfigMapName: zk-config-map /// `stackable_operator::commons::authentication::ClientAuthenticationDetails` /// which requires a Kubernetes client. fn create_auth_class_resolver( - auth_classes: Vec, + auth_classes: Vec, ) -> impl Fn( - ClientAuthenticationDetails, + core::v1alpha1::ClientAuthenticationDetails, ) -> Pin< - Box>>, + Box< + dyn Future< + Output = Result< + core::v1alpha1::AuthenticationClass, + stackable_operator::client::Error, + >, + >, + >, > { - move |auth_details: ClientAuthenticationDetails| { + move |auth_details: core::v1alpha1::ClientAuthenticationDetails| { let auth_classes = auth_classes.clone(); Box::pin(async move { auth_classes diff --git a/rust/operator-binary/src/crd/mod.rs b/rust/operator-binary/src/crd/mod.rs index 4292cde7..7eb62742 100644 --- a/rust/operator-binary/src/crd/mod.rs +++ b/rust/operator-binary/src/crd/mod.rs @@ -8,18 +8,15 @@ use stackable_operator::{ client::Client, commons::{ affinity::StackableAffinity, - authentication::ClientAuthenticationDetails, cluster_operation::ClusterOperation, product_image_selection::ProductImage, resources::{NoRuntimeLimits, Resources}, - s3::{ - ResolvedS3Connection, S3BucketInlineOrReference, S3ConnectionInlineOrReference, S3Error, - }, }, config::{ fragment::{self, Fragment, FromFragment, ValidationError}, merge::Merge, }, + crd::{authentication::core, s3}, k8s_openapi::api::core::v1::{PodTemplateSpec, Volume}, kube::{CustomResource, ResourceExt}, kvp::ObjectLabels, @@ -160,10 +157,14 @@ pub enum Error { MissingSecretLifetime, #[snafu(display("failed to resolve S3 connection"))] - ResolveS3Connection { source: S3Error }, + ResolveS3Connection { + source: stackable_operator::crd::s3::v1alpha1::ConnectionError, + }, #[snafu(display("failed to resolve S3 bucket"))] - ResolveS3Bucket { source: S3Error }, + ResolveS3Bucket { + source: stackable_operator::crd::s3::v1alpha1::BucketError, + }, #[snafu(display("2 differing s3 connections were given, this is unsupported by Druid"))] IncompatibleS3Connections, @@ -243,7 +244,7 @@ pub mod versioned { /// For TLS: Please note that the SecretClass used to authenticate users needs to be the same /// as the SecretClass used for internal communication. #[serde(default)] - pub authentication: Vec, + pub authentication: Vec, /// Authorization settings for Druid like OPA #[serde(skip_serializing_if = "Option::is_none")] @@ -463,7 +464,7 @@ impl v1alpha1::DruidCluster { pub async fn get_s3_connection( &self, client: &Client, - ) -> Result, Error> { + ) -> Result, Error> { // retrieve connection for ingestion (can be None) let ingestion_conn = if let Some(ic) = self .spec @@ -982,7 +983,7 @@ impl DruidRole { pub fn main_container_prepare_commands( &self, - s3: Option<&ResolvedS3Connection>, + s3: Option<&s3::v1alpha1::ConnectionSpec>, ) -> Vec { let mut commands = vec![]; @@ -1123,7 +1124,7 @@ pub struct HdfsDeepStorageSpec { pub struct S3DeepStorageSpec { /// The S3 bucket to use for deep storage. Can either be defined inline or as a reference, /// read the [S3 bucket docs](DOCS_BASE_URL_PLACEHOLDER/concepts/s3) to learn more. - pub bucket: S3BucketInlineOrReference, + pub bucket: s3::v1alpha1::InlineBucketOrReference, /// The `baseKey` is similar to the `directory` in HDFS; it is the root key at which /// Druid will create its deep storage. If no `baseKey` is given, the bucket root @@ -1138,7 +1139,7 @@ pub struct IngestionSpec { /// However, the S3 connection has to be specified in advance and only a single S3 connection is supported. /// S3 connections can either be specified `inline` or as a `reference`. /// Read the [S3 resource concept docs](DOCS_BASE_URL_PLACEHOLDER/concepts/s3) to learn more. - pub s3connection: Option, + pub s3connection: Option, } #[derive(Clone, Debug, Default, Fragment, JsonSchema, PartialEq)] diff --git a/rust/operator-binary/src/druid_controller.rs b/rust/operator-binary/src/druid_controller.rs index 3185d9e5..d00ac0e0 100644 --- a/rust/operator-binary/src/druid_controller.rs +++ b/rust/operator-binary/src/druid_controller.rs @@ -26,12 +26,10 @@ use stackable_operator::{ }, cluster_resources::{ClusterResourceApplyStrategy, ClusterResources}, commons::{ - opa::OpaApiVersion, - product_image_selection::ResolvedProductImage, - rbac::build_rbac_resources, - s3::{S3AccessStyle, S3ConnectionSpec, S3Error}, - tls_verification::TlsClientDetailsError, + opa::OpaApiVersion, product_image_selection::ResolvedProductImage, + rbac::build_rbac_resources, tls_verification::TlsClientDetailsError, }, + crd::s3, k8s_openapi::{ DeepMerge, api::{ @@ -173,13 +171,17 @@ pub enum Error { GetS3Connection { source: crate::crd::Error }, #[snafu(display("failed to configure S3 connection"))] - ConfigureS3 { source: S3Error }, + ConfigureS3 { + source: stackable_operator::crd::s3::v1alpha1::ConnectionError, + }, #[snafu(display("failed to configure S3 TLS client details"))] ConfigureS3TlsClientDetails { source: TlsClientDetailsError }, #[snafu(display("failed to get deep storage bucket"))] - GetDeepStorageBucket { source: S3Error }, + GetDeepStorageBucket { + source: stackable_operator::crd::s3::v1alpha1::BucketError, + }, #[snafu(display( "failed to get ZooKeeper connection string from config map {}", @@ -675,7 +677,7 @@ fn build_rolegroup_config_map( merged_rolegroup_config: &CommonRoleGroupConfig, zk_connstr: &str, opa_connstr: Option<&str>, - s3_conn: Option<&S3ConnectionSpec>, + s3_conn: Option<&s3::v1alpha1::ConnectionSpec>, deep_storage_bucket_name: Option<&str>, druid_tls_security: &DruidTlsSecurity, druid_auth_config: &Option, @@ -754,7 +756,7 @@ fn build_rolegroup_config_map( conf.insert( S3_PATH_STYLE_ACCESS.to_string(), - Some((s3.access_style == S3AccessStyle::Path).to_string()), + Some((s3.access_style == s3::v1alpha1::S3AccessStyle::Path).to_string()), ); } conf.insert( @@ -917,7 +919,7 @@ fn build_rolegroup_statefulset( rolegroup_ref: &RoleGroupRef, rolegroup_config: &HashMap>, merged_rolegroup_config: &CommonRoleGroupConfig, - s3_conn: Option<&S3ConnectionSpec>, + s3_conn: Option<&s3::v1alpha1::ConnectionSpec>, druid_tls_security: &DruidTlsSecurity, druid_auth_config: &Option, service_account: &ServiceAccount, @@ -1206,7 +1208,7 @@ fn build_rolegroup_statefulset( ), ..LabelSelector::default() }, - service_name: rolegroup_ref.object_name(), + service_name: Some(rolegroup_ref.object_name()), template: pod_template, ..StatefulSetSpec::default() }), diff --git a/rust/operator-binary/src/extensions.rs b/rust/operator-binary/src/extensions.rs index aa5a5ebd..c50d7420 100644 --- a/rust/operator-binary/src/extensions.rs +++ b/rust/operator-binary/src/extensions.rs @@ -72,9 +72,8 @@ pub fn get_extension_list( #[cfg(test)] mod tests { - use stackable_operator::commons::{ - authentication::oidc::{AuthenticationProvider, ClientAuthenticationOptions}, - tls_verification::TlsClientDetails, + use stackable_operator::{ + commons::tls_verification::TlsClientDetails, crd::authentication::oidc, }; use super::*; @@ -108,7 +107,7 @@ mod tests { DruidAuthenticationConfig::try_from(AuthenticationClassesResolved { auth_classes: vec![AuthenticationClassResolved::Oidc { auth_class_name: "oidc".to_string(), - provider: AuthenticationProvider::new( + provider: oidc::v1alpha1::AuthenticationProvider::new( "my-oidc-provider".to_string().try_into().unwrap(), None, "".to_string(), @@ -117,7 +116,7 @@ mod tests { vec![], None ), - oidc: ClientAuthenticationOptions { + oidc: oidc::v1alpha1::ClientAuthenticationOptions { client_credentials_secret_ref: "".to_string(), extra_scopes: vec![], product_specific_fields: () From 4bdd12c125e0dbf68357d0a8ac53543bfc8b3ee0 Mon Sep 17 00:00:00 2001 From: Nick Larsen Date: Tue, 20 May 2025 13:03:04 +0200 Subject: [PATCH 2/4] chore: Replace docs URL with placeholder --- deploy/helm/druid-operator/crds/crds.yaml | 2 +- rust/operator-binary/src/crd/mod.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/deploy/helm/druid-operator/crds/crds.yaml b/deploy/helm/druid-operator/crds/crds.yaml index 3497dc58..935e575e 100644 --- a/deploy/helm/druid-operator/crds/crds.yaml +++ b/deploy/helm/druid-operator/crds/crds.yaml @@ -506,7 +506,7 @@ spec: properties: additionalExtensions: default: [] - description: Additional extensions to load in Druid. The operator will automatically load all extensions needed based on the cluster configuration, but for extra functionality which the operator cannot anticipate, it can sometimes be necessary to load additional extensions. Add configuration for additional extensions using [configuration override for Druid](https://docs.stackable.tech/home/stable/druid/usage-guide/overrides). + description: Additional extensions to load in Druid. The operator will automatically load all extensions needed based on the cluster configuration, but for extra functionality which the operator cannot anticipate, it can sometimes be necessary to load additional extensions. Add configuration for additional extensions using [configuration override for Druid](https://docs.stackable.tech/home/nightly/druid/usage-guide/overrides). items: type: string type: array diff --git a/rust/operator-binary/src/crd/mod.rs b/rust/operator-binary/src/crd/mod.rs index 7eb62742..406990bf 100644 --- a/rust/operator-binary/src/crd/mod.rs +++ b/rust/operator-binary/src/crd/mod.rs @@ -233,7 +233,7 @@ pub mod versioned { /// The operator will automatically load all extensions needed based on the cluster /// configuration, but for extra functionality which the operator cannot anticipate, it can /// sometimes be necessary to load additional extensions. - /// Add configuration for additional extensions using [configuration override for Druid](https://docs.stackable.tech/home/stable/druid/usage-guide/overrides). + /// Add configuration for additional extensions using [configuration override for Druid](DOCS_BASE_URL_PLACEHOLDER/druid/usage-guide/overrides). #[serde(default)] pub additional_extensions: HashSet, From 96562e94e14fc1dee25f5338814844de123d4ac3 Mon Sep 17 00:00:00 2001 From: Nick Larsen Date: Tue, 20 May 2025 13:05:14 +0200 Subject: [PATCH 3/4] chore: Update changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 303b23f1..f238c546 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,7 @@ All notable changes to this project will be documented in this file. - The defaults from the docker images itself will now apply, which will be different from 1000/0 going forward - This is marked as breaking because tools and policies might exist, which require these fields to be set - Deprecate support for `31.0.1` ([#722]). +- Use versioned common structs ([#725]). ### Fixed @@ -50,6 +51,7 @@ All notable changes to this project will be documented in this file. [#719]: https://github.com/stackabletech/druid-operator/pull/719 [#721]: https://github.com/stackabletech/druid-operator/pull/721 [#722]: https://github.com/stackabletech/druid-operator/pull/722 +[#725]: https://github.com/stackabletech/druid-operator/pull/725 ## [25.3.0] - 2025-03-21 From 23ffdc0a91e9b0a99c79ddd5ea068043d4d41743 Mon Sep 17 00:00:00 2001 From: Nick Larsen Date: Tue, 20 May 2025 13:24:53 +0200 Subject: [PATCH 4/4] chore: Bump built dep --- Cargo.lock | 4 ++-- Cargo.nix | 4 ++-- Cargo.toml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6ac03fbf..908a46cd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -297,9 +297,9 @@ dependencies = [ [[package]] name = "built" -version = "0.7.7" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ed6191a7e78c36abdb16ab65341eefd73d64d303fffccdbb00d51e4205967b" +checksum = "f4ad8f11f288f48ca24471bbd51ac257aaeaaa07adae295591266b792902ae64" dependencies = [ "chrono", "git2", diff --git a/Cargo.nix b/Cargo.nix index 93c65ebb..4cf11a86 100644 --- a/Cargo.nix +++ b/Cargo.nix @@ -972,9 +972,9 @@ rec { }; "built" = rec { crateName = "built"; - version = "0.7.7"; + version = "0.8.0"; edition = "2021"; - sha256 = "0ywn0m11xm80pg6zrzq3sdj3vmzg3qs6baqnvfmkd377ly8n3van"; + sha256 = "0r5f08lpjsr6j5ajkbmd0ymfmajpq8ddbfvi8ji8rx48y88qzbgl"; authors = [ "Lukas Lueg " ]; diff --git a/Cargo.toml b/Cargo.toml index d4268b07..d26eda34 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,7 +14,7 @@ product-config = { git = "https://github.com/stackabletech/product-config.git", stackable-operator = { git = "https://github.com/stackabletech/operator-rs.git", features = ["telemetry", "versioned"], tag = "stackable-operator-0.93.0" } anyhow = "1.0" -built = { version = "0.7", features = ["chrono", "git2"] } +built = { version = "0.8", features = ["chrono", "git2"] } clap = "4.5" const_format = "0.2" fnv = "1.0"