Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
819 changes: 448 additions & 371 deletions Cargo.lock

Large diffs are not rendered by default.

129 changes: 68 additions & 61 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,95 +9,102 @@ edition = "2024"
repository = "https://github.com/stackabletech/operator-rs"

[workspace.dependencies]
arc-swap = "1.7.0"
async-trait = "0.1.89"
axum = { version = "0.8.1", features = ["http2"] }
base64 = "0.22"
arc-swap = "1.9.2"
async-trait = "0.1.91"
axum = { version = "0.8.9", features = ["http2"] }
base64 = "0.23"
built = "0.8.1"
clap = { version = "4.5.17", features = ["derive", "cargo", "env"] }
const_format = "0.2.33"
# Pinned to the old RustCrypto generation: const-oid 0.10 requires x509-cert 0.3,
# which is not released yet. Tracking: https://github.com/RustCrypto/formats/issues/1289
# See also the rand/rand_core and sha2/signature pins below.
clap = { version = "4.6.5", features = ["derive", "cargo", "env"] }
const_format = "0.2.36"
# Pinned to the old RustCrypto generation (const-oid 0.9 / digest 0.10 / signature 2.x / spki 0.7).
# `stackable-certs` builds certificates for both ECDSA and RSA keypairs, so ecdsa/p256 and rsa have
# to agree with x509-cert on the generation of the shared der/spki/signature crates. rsa is the
# laggard: 0.9 is still its only stable release line and it is on the old generation, so const-oid,
# ecdsa, p256, rand_core, sha2, signature and x509-cert all have to stay behind with it. Bumping any
# of them individually splits the dependency graph into two incompatible halves and rsa's key and
# signature types stop satisfying x509-cert's spki traits.
# Unblocked once rsa 0.10 (currently at 0.10.0-rc.18) is released: https://github.com/RustCrypto/RSA
# See also the ecdsa, p256, rand_core, sha2, signature and x509-cert pins below.
const-oid = { version = "0.9.6", features = ["db"] }
convert_case = "0.11.0"
convert_case_extras = "0.2.0"
darling = "0.23.0"
delegate = "0.13.0"
darling = "0.24.0"
delegate = "0.13.5"
dockerfile-parser = "0.9.0"
# Pinned to the old RustCrypto generation, see the const-oid comment above.
ecdsa = { version = "0.16.9", features = ["digest", "pem"] }
educe = { version = "0.6.0", default-features = false, features = ["Clone", "Debug", "Default", "PartialEq", "Eq"] }
either = "1.13.0"
futures = "0.3.30"
futures-util = "0.3.30"
educe = { version = "0.7.6", default-features = false, features = ["Clone", "Debug", "Default", "PartialEq", "Eq"] }
either = "1.17.0"
futures = "0.3.33"
futures-util = "0.3.33"
hickory-resolver = "0.26.1"
http = "1.3.1"
humantime = "2.1.0"
indexmap = "2.5.0"
indoc = "2.0.6"
jiff = "0.2.18"
http = "1.5.0"
humantime = "2.4.0"
indexmap = "2.14.0"
indoc = "2.0.7"
jiff = "0.2.35"
insta = { version = "1.48.0", features = ["glob"] }
hyper = { version = "1.4.1", features = ["full"] }
hyper-util = "0.1.8"
hyper = { version = "1.11.0", features = ["full"] }
hyper-util = "0.1.20"
itertools = "0.15.0"
java-properties = "2.0"
json-patch = "4.0.0"
java-properties = "2.0.0"
json-patch = "4.2.0"
k8s-openapi = { version = "0.28.0", default-features = false, features = ["schemars", "v1_36"] }
# We use rustls instead of openssl for easier portability, e.g. so that we can build stackablectl without the need to vendor (build from source) openssl
# We use ring instead of aws-lc-rs, as this currently fails to build in "make run-dev"
kube = { version = "4.0.0", default-features = false, features = ["client", "jsonpatch", "runtime", "derive", "admission", "rustls-tls", "ring"] }
kube = { version = "4.2.0", default-features = false, features = ["client", "jsonpatch", "runtime", "derive", "admission", "rustls-tls", "ring"] }
local-ip-address = "0.6.13"
opentelemetry = "0.32.0"
opentelemetry_sdk = { version = "0.32.0", features = ["rt-tokio"] }
opentelemetry_sdk = { version = "0.32.1", features = ["rt-tokio"] }
opentelemetry-appender-tracing = "0.32.0"
opentelemetry-otlp = "0.32.0"
opentelemetry-semantic-conventions = "0.32.0"
opentelemetry-semantic-conventions = "0.32.1"
# Pinned to the old RustCrypto generation, see the const-oid comment above.
p256 = { version = "0.13.2", features = ["ecdsa"] }
paste = "1.0.15"
pin-project = "1.1.5"
prettyplease = "0.2.22"
proc-macro2 = "1.0.86"
quote = "1.0.37"
# Pinned to the old RustCrypto generation: rand_core 0.9+ (and the matching rand) pulls
# in the new digest/signature ecosystem that rsa 0.9 and x509-cert 0.2 do not support yet.
# Bumping splits the graph into duplicate, incompatible crate versions.
# Unblocked once rsa 0.10 (currently in RC) lands: https://github.com/RustCrypto/RSA
rand = "0.9.0"
pin-project = "1.1.13"
prettyplease = "0.3.0"
proc-macro2 = "1.0.107"
quote = "1.0.47"
rand = "0.10.2"
# Pinned to the old RustCrypto generation, see the const-oid comment above. This is the rand_core
# that rsa 0.9 and ecdsa 0.16 take their RNG from; it is independent of the `rand` version above,
# which is only used to generate random Secrets in stackable-operator.
rand_core = "0.6.4"
regex = "1.12.4"
rsa = { version = "0.9.6", features = ["sha2"] }
regex = "1.13.1"
rsa = { version = "0.9.10", features = ["sha2"] }
rstest = "0.26.1"
rstest_reuse = "0.7.0"
schemars = { version = "1.0.0", features = ["url2"] }
semver = "1.0.23"
serde = { version = "1.0.210", features = ["derive"] }
serde_json = "1.0.128"
schemars = { version = "1.2.2", features = ["url2"] }
semver = "1.0.28"
serde = { version = "1.0.229", features = ["derive"] }
serde_json = "1.0.151"
serde_yaml = "0.9.34" # This is the last available version, see https://github.com/dtolnay/serde-yaml/releases/tag/0.9.34 for details
# Pinned to the old RustCrypto generation (digest 0.10 / signature 2.x): sha2 0.11 uses
# digest 0.11 and signature 3.0, which rsa 0.9 and x509-cert 0.2 do not support yet.
# Unblocked once rsa 0.10 (currently in RC) lands: https://github.com/RustCrypto/RSA
sha2 = { version = "0.10.8", features = ["oid"] }
# Pinned to the old RustCrypto generation, see the const-oid comment above. sha2 0.11 uses
# digest 0.11 and signature 3.0, which rsa 0.9 does not support.
sha2 = { version = "0.10.9", features = ["oid"] }
signature = "2.2.0"
snafu = "0.9.1"
snafu = "0.9.2"
stackable-operator-derive = { path = "stackable-operator-derive" }
strum = { version = "0.28.0", features = ["derive"] }
syn = "2.0.118"
sysinfo = "0.39.5"
time = { version = "0.3.49" }
tokio = { version = "1.40.0", features = ["macros", "rt-multi-thread", "fs"] }
syn = "3.0.3"
sysinfo = "0.39.6"
time = { version = "0.3.55" }
tokio = { version = "1.53.1", features = ["macros", "rt-multi-thread", "fs"] }
# We use ring instead of aws-lc-rs, as this currently fails to build in "make run-dev"
tokio-rustls = { version = "0.26.0", default-features = false, features = ["ring", "logging", "tls12"] }
tokio-test = "0.4.4"
tower = { version = "0.5.1", features = ["util"] }
tokio-rustls = { version = "0.26.4", default-features = false, features = ["ring", "logging", "tls12"] }
tokio-test = "0.4.5"
tower = { version = "0.5.3", features = ["util"] }
tower-http = { version = "0.7.0", features = ["trace"] } # We don't actually use this crate, but we need to enable the `trace` feature
tracing = "0.1.40"
tracing-appender = "0.2.3"
tracing = "0.1.44"
tracing-appender = "0.2.5"
tracing-opentelemetry = "0.33.0"
tracing-subscriber = { version = "0.3.18", features = ["env-filter", "json"] }
trybuild = "1.0.99"
url = { version = "2.5.2", features = ["serde"] }
uuid = "1.23.0"
winnow = "1.0.3"
tracing-subscriber = { version = "0.3.23", features = ["env-filter", "json"] }
trybuild = "1.0.120"
url = { version = "2.5.8", features = ["serde"] }
uuid = "1.24.0"
winnow = "1.0.4"
# Pinned to the old RustCrypto generation, see the const-oid comment above.
x509-cert = { version = "0.2.5", features = ["builder"] }
xml = "1.3.0"
zeroize = "1.9.0"
Expand Down
3 changes: 3 additions & 0 deletions crates/stackable-operator/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,11 @@ All notable changes to this project will be documented in this file.
- BREAKING: `PodSecurityContextBuilder::run_as_non_root` now takes a `bool` instead of assuming consumers always want to set it to `true` ([#1205]).
This is needed to allow users setting it to `false` in case the new `with_stackable_defaults` function sets it to `true`.
- BREAKING: `SecurityContextBuilder::run_as_root` has been removed ([#1205]).
- BREAKING: Bump `kube` to `4.2.0` ([#1257]).
- This fixes a long-standing issue, where `additionalPrinterColumns`, `categories` and `shortNames` where always included in the CRD, which lead to ArgoCD thinking the CRs where out of sync.

[#1205]: https://github.com/stackabletech/operator-rs/pull/1205
[#1257]: https://github.com/stackabletech/operator-rs/pull/1257

## [0.114.0] - 2026-07-22

Expand Down
6 changes: 1 addition & 5 deletions crates/stackable-operator/crds/AuthenticationClass.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,12 @@ metadata:
spec:
group: authentication.stackable.tech
names:
categories: []
kind: AuthenticationClass
plural: authenticationclasses
shortNames: []
singular: authenticationclass
scope: Cluster
versions:
- additionalPrinterColumns: []
name: v1alpha1
- name: v1alpha1
schema:
openAPIV3Schema:
description: The Stackable Platform uses the AuthenticationClass as a central mechanism to handle user authentication across supported products.
Expand Down Expand Up @@ -355,4 +352,3 @@ spec:
type: object
served: true
storage: true
subresources: {}
5 changes: 1 addition & 4 deletions crates/stackable-operator/crds/DummyCluster.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,12 @@ metadata:
spec:
group: dummy.stackable.tech
names:
categories: []
kind: DummyCluster
plural: dummyclusters
shortNames: []
singular: dummycluster
scope: Namespaced
versions:
- additionalPrinterColumns: []
name: v1alpha1
- name: v1alpha1
schema:
openAPIV3Schema:
description: A DummyCluster is a test-only resource used by operator-rs to exercise CRD generation. It is not backed by a real operator.
Expand Down
5 changes: 1 addition & 4 deletions crates/stackable-operator/crds/Listener.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,12 @@ metadata:
spec:
group: listeners.stackable.tech
names:
categories: []
kind: Listener
plural: listeners
shortNames: []
singular: listener
scope: Namespaced
versions:
- additionalPrinterColumns: []
name: v1alpha1
- name: v1alpha1
schema:
openAPIV3Schema:
description: Exposes a set of Pods to the outside world.
Expand Down
6 changes: 1 addition & 5 deletions crates/stackable-operator/crds/ListenerClass.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,12 @@ metadata:
spec:
group: listeners.stackable.tech
names:
categories: []
kind: ListenerClass
plural: listenerclasses
shortNames: []
singular: listenerclass
scope: Cluster
versions:
- additionalPrinterColumns: []
name: v1alpha1
- name: v1alpha1
schema:
openAPIV3Schema:
description: Defines a policy for how Listeners should be exposed.
Expand Down Expand Up @@ -119,4 +116,3 @@ spec:
type: object
served: true
storage: true
subresources: {}
6 changes: 1 addition & 5 deletions crates/stackable-operator/crds/PodListeners.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,12 @@ metadata:
spec:
group: listeners.stackable.tech
names:
categories: []
kind: PodListeners
plural: podlisteners
shortNames: []
singular: podlisteners
scope: Namespaced
versions:
- additionalPrinterColumns: []
name: v1alpha1
- name: v1alpha1
schema:
openAPIV3Schema:
description: Informs users about Listeners that are bound by a given Pod.
Expand Down Expand Up @@ -85,4 +82,3 @@ spec:
type: object
served: true
storage: true
subresources: {}
6 changes: 1 addition & 5 deletions crates/stackable-operator/crds/S3Bucket.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,12 @@ metadata:
spec:
group: s3.stackable.tech
names:
categories: []
kind: S3Bucket
plural: s3buckets
shortNames: []
singular: s3bucket
scope: Namespaced
versions:
- additionalPrinterColumns: []
name: v1alpha1
- name: v1alpha1
schema:
openAPIV3Schema:
description: S3 bucket specification containing the bucket name and an inlined or referenced connection specification.
Expand Down Expand Up @@ -185,4 +182,3 @@ spec:
type: object
served: true
storage: true
subresources: {}
6 changes: 1 addition & 5 deletions crates/stackable-operator/crds/S3Connection.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,12 @@ metadata:
spec:
group: s3.stackable.tech
names:
categories: []
kind: S3Connection
plural: s3connections
shortNames: []
singular: s3connection
scope: Namespaced
versions:
- additionalPrinterColumns: []
name: v1alpha1
- name: v1alpha1
schema:
openAPIV3Schema:
description: A reusable definition of a connection to an S3 endpoint.
Expand Down Expand Up @@ -162,4 +159,3 @@ spec:
type: object
served: true
storage: true
subresources: {}
5 changes: 1 addition & 4 deletions crates/stackable-operator/crds/Scaler.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,12 @@ metadata:
spec:
group: autoscaling.stackable.tech
names:
categories: []
kind: Scaler
plural: scalers
shortNames: []
singular: scaler
scope: Namespaced
versions:
- additionalPrinterColumns: []
name: v1alpha1
- name: v1alpha1
schema:
openAPIV3Schema:
description: Controls the replica count of a Stackable component, integrating with the Kubernetes scale subresource to enable horizontal autoscaling.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use std::collections::BTreeMap;
use base64::Engine;
use k8s_openapi::api::core::v1::Secret;
use kube::{Api, Resource, ResourceExt, api::DeleteParams};
use rand::{RngCore, SeedableRng, rngs::StdRng};
use rand::{Rng, rngs::StdRng};
use snafu::{OptionExt, ResultExt, Snafu};

use crate::{builder::meta::ObjectMetaBuilder, client::Client};
Expand Down Expand Up @@ -125,9 +125,9 @@ where

/// Generates a cryptographically secure base64 String with the specified size in bytes.
fn get_random_base64(size_bytes: usize) -> String {
// As we are using the OS rng, we are using `getrandom`, which should be cryptographically
// secure
let mut rng = StdRng::from_os_rng();
// As `make_rng` takes its entropy from the OS rng, we are using `getrandom`, which should be
// cryptographically secure
let mut rng: StdRng = rand::make_rng();

let mut bytes = vec![0u8; size_bytes];
rng.fill_bytes(&mut bytes);
Expand Down
8 changes: 7 additions & 1 deletion crates/stackable-operator/src/crd/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,13 @@ pub mod scaler;
///
/// `namespace`'s defaulting only applies when retrieved via [`ClusterRef::namespace_relative_from`]
#[derive(Deserialize, Serialize, JsonSchema, Educe)]
#[educe(Clone(bound()), Debug(bound()), Default(bound()), PartialEq(bound()))]
#[educe(
Clone(bound()),
Debug(bound()),
Default(bound()),
PartialEq(bound()),
Eq(bound())
)]
pub struct ClusterRef<K> {
/// The name of the cluster
pub name: Option<String>,
Expand Down
2 changes: 2 additions & 0 deletions crates/stackable-versioned-macros/src/codegen/item/variant.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ impl VersionedVariant {
// data and as such, we just use the never type here. During codegen, we just re-emit the
// variant data as is.
let ty = Type::Never(TypeNever {
attrs: Vec::new(),
bang_token: Not([Span::call_site()]),
});
let changes = variant_attributes.common.into_changeset(&idents, ty);
Expand All @@ -52,6 +53,7 @@ impl VersionedVariant {
if let Some(changes) = &mut self.changes {
// FIXME (@Techassi): Support enum variants with data
let ty = Type::Never(TypeNever {
attrs: Vec::new(),
bang_token: Not([Span::call_site()]),
});

Expand Down
Loading