From 2306d6ed7ca850bf491a7f9b7d3729316ff2bc47 Mon Sep 17 00:00:00 2001 From: Techassi Date: Tue, 31 Oct 2023 14:29:09 +0100 Subject: [PATCH] Use updated product-config --- Cargo.lock | 185 +++++++++++++++++-- Cargo.toml | 9 +- rust/crd/Cargo.toml | 1 + rust/crd/src/lib.rs | 36 ++-- rust/operator-binary/Cargo.toml | 1 + rust/operator-binary/src/druid_controller.rs | 102 ++++++---- 6 files changed, 268 insertions(+), 66 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f28ebc14..69f9801a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -195,6 +195,15 @@ version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + [[package]] name = "built" version = "0.6.1" @@ -347,6 +356,15 @@ version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" +[[package]] +name = "cpufeatures" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" +dependencies = [ + "libc", +] + [[package]] name = "crossbeam-channel" version = "0.5.8" @@ -366,6 +384,16 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + [[package]] name = "darling" version = "0.14.4" @@ -447,12 +475,36 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + [[package]] name = "doc-comment" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" +[[package]] +name = "dockerfile-parser" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75799314f5fa405629a365a1f97d80f81edd17f22a0fc9c8ddb3ad191ad8dc08" +dependencies = [ + "enquote", + "lazy_static", + "pest", + "pest_derive", + "regex", + "snafu 0.6.10", +] + [[package]] name = "dyn-clone" version = "1.0.14" @@ -474,6 +526,15 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "enquote" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06c36cb11dbde389f4096111698d8b567c0720e3452fd5ac3e6b4e47e1939932" +dependencies = [ + "thiserror", +] + [[package]] name = "equivalent" version = "1.0.1" @@ -622,6 +683,16 @@ dependencies = [ "slab", ] +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + [[package]] name = "getrandom" version = "0.2.10" @@ -1361,6 +1432,51 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" +[[package]] +name = "pest" +version = "2.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae9cee2a55a544be8b89dc6848072af97a20f2422603c10865be2a42b580fff5" +dependencies = [ + "memchr", + "thiserror", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81d78524685f5ef2a3b3bd1cafbc9fcabb036253d9b1463e726a91cd16e2dfc2" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68bd1206e71118b5356dae5ddc61c8b11e28b09ef6a31acbd15ea48a28e0c227" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.37", +] + +[[package]] +name = "pest_meta" +version = "2.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c747191d4ad9e4a4ab9c8798f1e82a39affe7ef9648390b7e5548d18e099de6" +dependencies = [ + "once_cell", + "pest", + "sha2", +] + [[package]] name = "pin-project" version = "1.1.3" @@ -1416,8 +1532,8 @@ dependencies = [ [[package]] name = "product-config" -version = "0.5.0" -source = "git+https://github.com/stackabletech/product-config.git?tag=0.5.0#439869d9e6a72fb6d912f6e494649a2f74f41d25" +version = "0.6.0" +source = "git+https://github.com/stackabletech/product-config.git?tag=0.6.0#ad2c3ea6a291e415d978eb4271fb309e75861ef0" dependencies = [ "fancy-regex", "java-properties", @@ -1426,7 +1542,7 @@ dependencies = [ "serde", "serde_json", "serde_yaml", - "thiserror", + "snafu 0.7.5", "xml-rs", ] @@ -1808,6 +1924,17 @@ dependencies = [ "unsafe-libyaml", ] +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + [[package]] name = "sharded-slab" version = "0.1.4" @@ -1841,6 +1968,16 @@ version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a" +[[package]] +name = "snafu" +version = "0.6.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eab12d3c261b2308b0d80c26fffb58d17eba81a4be97890101f416b478c79ca7" +dependencies = [ + "doc-comment", + "snafu-derive 0.6.10", +] + [[package]] name = "snafu" version = "0.7.5" @@ -1848,7 +1985,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4de37ad025c587a29e8f3f5605c00f70b98715ef90b9061a815b9e59e9042d6" dependencies = [ "doc-comment", - "snafu-derive", + "snafu-derive 0.7.5", +] + +[[package]] +name = "snafu-derive" +version = "0.6.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1508efa03c362e23817f96cde18abed596a25219a8b2c66e8db33c03543d315b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] @@ -1895,12 +2043,13 @@ version = "0.0.0-dev" dependencies = [ "indoc", "lazy_static", + "product-config", "rstest", "semver", "serde", "serde_json", "serde_yaml", - "snafu", + "snafu 0.7.5", "stackable-operator", "strum", "tracing", @@ -1919,12 +2068,13 @@ dependencies = [ "lazy_static", "openssl", "pin-project", + "product-config", "rstest", "semver", "serde", "serde_json", "serde_yaml", - "snafu", + "snafu 0.7.5", "stackable-druid-crd", "stackable-operator", "strum", @@ -1934,13 +2084,14 @@ dependencies = [ [[package]] name = "stackable-operator" -version = "0.55.0" -source = "git+https://github.com/stackabletech/operator-rs.git?tag=0.55.0#bfbc23d3819f815413cb4135e0835acd76aecf97" +version = "0.56.0" +source = "git+https://github.com/stackabletech/operator-rs.git?tag=0.56.0#1acaac4dacf302cc068b4294c8a1d4c2928977c0" dependencies = [ "chrono", "clap", "const_format", "derivative", + "dockerfile-parser", "either", "futures 0.3.28", "json-patch", @@ -1956,7 +2107,7 @@ dependencies = [ "serde", "serde_json", "serde_yaml", - "snafu", + "snafu 0.7.5", "stackable-operator-derive", "strum", "thiserror", @@ -1968,8 +2119,8 @@ dependencies = [ [[package]] name = "stackable-operator-derive" -version = "0.55.0" -source = "git+https://github.com/stackabletech/operator-rs.git?tag=0.55.0#bfbc23d3819f815413cb4135e0835acd76aecf97" +version = "0.56.0" +source = "git+https://github.com/stackabletech/operator-rs.git?tag=0.56.0#1acaac4dacf302cc068b4294c8a1d4c2928977c0" dependencies = [ "darling 0.20.3", "proc-macro2", @@ -2348,6 +2499,18 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "ucd-trie" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" + [[package]] name = "unicode-bidi" version = "0.3.13" diff --git a/Cargo.toml b/Cargo.toml index 011e7eb9..1f126666 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,5 @@ [workspace] -members = [ - "rust/crd", "rust/operator-binary" -] +members = ["rust/crd", "rust/operator-binary"] [workspace.package] version = "0.0.0-dev" @@ -12,7 +10,7 @@ repository = "https://github.com/stackabletech/druid-operator" [workspace.dependencies] anyhow = "1.0" -built = { version = "0.6", features = ["chrono", "git2"] } +built = { version = "0.6", features = ["chrono", "git2"] } clap = "4.3" fnv = "1.0" futures = { version = "0.3", features = ["compat"] } @@ -26,7 +24,8 @@ serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" serde_yaml = "0.9" snafu = "0.7" -stackable-operator = { git = "https://github.com/stackabletech/operator-rs.git", tag = "0.55.0" } +stackable-operator = { git = "https://github.com/stackabletech/operator-rs.git", tag = "0.56.0" } +product-config = { git = "https://github.com/stackabletech/product-config.git", tag = "0.6.0" } strum = { version = "0.25", features = ["derive"] } tokio = { version = "1.29", features = ["full"] } tracing = "0.1" diff --git a/rust/crd/Cargo.toml b/rust/crd/Cargo.toml index 463aae1c..24143dd2 100644 --- a/rust/crd/Cargo.toml +++ b/rust/crd/Cargo.toml @@ -13,6 +13,7 @@ semver.workspace = true serde.workspace = true serde_json.workspace = true stackable-operator.workspace = true +product-config.workspace = true strum.workspace = true tracing.workspace = true snafu.workspace = true diff --git a/rust/crd/src/lib.rs b/rust/crd/src/lib.rs index 3796a6f9..cd75fd5a 100644 --- a/rust/crd/src/lib.rs +++ b/rust/crd/src/lib.rs @@ -1,18 +1,6 @@ -pub mod affinity; -pub mod authentication; -pub mod authorization; -pub mod memory; -pub mod resource; -pub mod security; -pub mod storage; -pub mod tls; - -use crate::authentication::DruidAuthentication; -use crate::tls::DruidTls; +use std::collections::{BTreeMap, HashMap}; -use affinity::{get_affinity, migrate_legacy_selector}; -use authorization::DruidAuthorization; -use resource::RoleResource; +use product_config::types::PropertyNameKind; use serde::{Deserialize, Serialize}; use snafu::{OptionExt, ResultExt, Snafu}; use stackable_operator::{ @@ -36,16 +24,30 @@ use stackable_operator::{ kube::{CustomResource, ResourceExt}, labels::ObjectLabels, memory::{BinaryMultiple, MemoryQuantity}, - product_config::types::PropertyNameKind, product_config_utils::{ConfigError, Configuration}, product_logging::{self, spec::Logging}, role_utils::{CommonConfiguration, GenericRoleConfig, Role, RoleGroup}, schemars::{self, JsonSchema}, status::condition::{ClusterCondition, HasStatusCondition}, }; -use std::collections::{BTreeMap, HashMap}; use strum::{Display, EnumDiscriminants, EnumIter, EnumString, IntoStaticStr}; -use tls::default_druid_tls; + +use crate::{ + affinity::{get_affinity, migrate_legacy_selector}, + authentication::DruidAuthentication, + authorization::DruidAuthorization, + resource::RoleResource, + tls::{default_druid_tls, DruidTls}, +}; + +pub mod affinity; +pub mod authentication; +pub mod authorization; +pub mod memory; +pub mod resource; +pub mod security; +pub mod storage; +pub mod tls; pub const APP_NAME: &str = "druid"; pub const OPERATOR_NAME: &str = "druid.stackable.tech"; diff --git a/rust/operator-binary/Cargo.toml b/rust/operator-binary/Cargo.toml index 23e76af4..da1751c1 100644 --- a/rust/operator-binary/Cargo.toml +++ b/rust/operator-binary/Cargo.toml @@ -23,6 +23,7 @@ serde.workspace = true serde_json.workspace = true snafu.workspace = true stackable-operator.workspace = true +product-config.workspace = true strum.workspace = true tokio.workspace = true tracing.workspace = true diff --git a/rust/operator-binary/src/druid_controller.rs b/rust/operator-binary/src/druid_controller.rs index c728878c..bd747a31 100644 --- a/rust/operator-binary/src/druid_controller.rs +++ b/rust/operator-binary/src/druid_controller.rs @@ -1,16 +1,16 @@ //! Ensures that `Pod`s are configured and running for each [`DruidCluster`] -use crate::{ - config::get_jvm_config, - discovery::{self, build_discovery_configmaps}, - extensions::get_extension_list, - internal_secret::{ - build_shared_internal_secret_name, create_shared_internal_secret, env_var_from_secret, - }, - operations::pdb::add_pdbs, - product_logging::{extend_role_group_config_map, resolve_vector_aggregator_address}, - OPERATOR_NAME, +use std::{ + collections::{BTreeMap, HashMap}, + ops::Deref, + str::FromStr, + sync::Arc, }; +use product_config::{ + types::PropertyNameKind, + writer::{to_java_properties_string, PropertiesWriterError}, + ProductConfigManager, +}; use snafu::{OptionExt, ResultExt, Snafu}; use stackable_druid_crd::{ authentication::ldap::DruidLdapSettings, @@ -24,14 +24,11 @@ use stackable_druid_crd::{ MAX_DRUID_LOG_FILES_SIZE, RUNTIME_PROPS, RW_CONFIG_DIRECTORY, S3_ENDPOINT_URL, S3_PATH_STYLE_ACCESS, S3_SECRET_DIR_NAME, ZOOKEEPER_CONNECTION_STRING, }; -use stackable_operator::{ - builder::resources::ResourceRequirementsBuilder, k8s_openapi::DeepMerge, - product_config::writer::to_java_properties_string, -}; use stackable_operator::{ builder::{ - ConfigMapBuilder, ContainerBuilder, ObjectMetaBuilder, PodBuilder, - PodSecurityContextBuilder, SecretOperatorVolumeSourceBuilder, VolumeBuilder, + resources::ResourceRequirementsBuilder, ConfigMapBuilder, ContainerBuilder, + ObjectMetaBuilder, PodBuilder, PodSecurityContextBuilder, + SecretOperatorVolumeSourceBuilder, VolumeBuilder, }, cluster_resources::{ClusterResourceApplyStrategy, ClusterResources}, commons::{ @@ -47,6 +44,7 @@ use stackable_operator::{ core::v1::{ConfigMap, EnvVar, Service, ServiceSpec}, }, apimachinery::pkg::apis::meta::v1::LabelSelector, + DeepMerge, }, kube::{ runtime::{controller::Action, reflector::ObjectRef}, @@ -54,7 +52,6 @@ use stackable_operator::{ }, labels::{role_group_selector_labels, role_selector_labels}, logging::controller::ReconcilerError, - product_config::{types::PropertyNameKind, ProductConfigManager}, product_config_utils::{transform_all_roles_to_config, validate_all_roles_and_groups_config}, product_logging::{ self, @@ -70,14 +67,20 @@ use stackable_operator::{ }, time::Duration, }; -use std::{ - collections::{BTreeMap, HashMap}, - ops::Deref, - str::FromStr, - sync::Arc, -}; use strum::{EnumDiscriminants, IntoStaticStr}; +use crate::{ + config::get_jvm_config, + discovery::{self, build_discovery_configmaps}, + extensions::get_extension_list, + internal_secret::{ + build_shared_internal_secret_name, create_shared_internal_secret, env_var_from_secret, + }, + operations::pdb::add_pdbs, + product_logging::{extend_role_group_config_map, resolve_vector_aggregator_address}, + OPERATOR_NAME, +}; + pub const DRUID_CONTROLLER_NAME: &str = "druidcluster"; const DRUID_UID: i64 = 1000; @@ -104,34 +107,41 @@ pub enum Error { ApplyRoleService { source: stackable_operator::error::Error, }, + #[snafu(display("failed to apply Service for {}", rolegroup))] ApplyRoleGroupService { source: stackable_operator::error::Error, rolegroup: RoleGroupRef, }, + #[snafu(display("failed to build ConfigMap for {}", rolegroup))] BuildRoleGroupConfig { source: stackable_operator::error::Error, rolegroup: RoleGroupRef, }, + #[snafu(display("failed to apply ConfigMap for {}", rolegroup))] ApplyRoleGroupConfig { source: stackable_operator::error::Error, rolegroup: RoleGroupRef, }, + #[snafu(display("failed to apply StatefulSet for {}", rolegroup))] ApplyRoleGroupStatefulSet { source: stackable_operator::error::Error, rolegroup: RoleGroupRef, }, + #[snafu(display("invalid product config"))] InvalidProductConfig { source: stackable_operator::error::Error, }, + #[snafu(display("object is missing metadata to build owner reference"))] ObjectMissingMetadataForOwnerRef { source: stackable_operator::error::Error, }, + #[snafu(display( "failed to get ZooKeeper discovery config map for cluster: {}", cm_name @@ -140,6 +150,7 @@ pub enum Error { source: stackable_operator::error::Error, cm_name: String, }, + #[snafu(display( "failed to get OPA discovery config map and/or connection string for cluster: {}", cm_name @@ -148,114 +159,141 @@ pub enum Error { source: stackable_operator::error::Error, cm_name: String, }, + #[snafu(display("failed to get valid S3 connection"))] GetS3Connection { source: stackable_druid_crd::Error }, + #[snafu(display("failed to get deep storage bucket"))] GetDeepStorageBucket { source: stackable_operator::error::Error, }, + #[snafu(display( "failed to get ZooKeeper connection string from config map {}", cm_name ))] MissingZookeeperConnString { cm_name: String }, + #[snafu(display("failed to transform configs"))] ProductConfigTransform { source: stackable_operator::product_config_utils::ConfigError, }, + #[snafu(display("failed to format runtime properties"))] - PropertiesWriteError { - source: stackable_operator::product_config::writer::PropertiesWriterError, - }, + PropertiesWriteError { source: PropertiesWriterError }, + #[snafu(display("failed to build discovery ConfigMap"))] BuildDiscoveryConfig { source: discovery::Error }, + #[snafu(display("failed to apply discovery ConfigMap"))] ApplyDiscoveryConfig { source: stackable_operator::error::Error, }, + #[snafu(display("failed to apply cluster status"))] ApplyStatus { source: stackable_operator::error::Error, }, + #[snafu(display( "Druid does not support skipping the verification of the tls enabled S3 server" ))] S3TlsNoVerificationNotSupported, + #[snafu(display("could not parse Druid role [{role}]"))] UnidentifiedDruidRole { source: strum::ParseError, role: String, }, + #[snafu(display("failed to resolve and merge config for role and role group"))] FailedToResolveConfig { source: stackable_druid_crd::Error }, + #[snafu(display("invalid configuration"))] InvalidConfiguration { source: stackable_druid_crd::Error }, + #[snafu(display("failed to create cluster resources"))] CreateClusterResources { source: stackable_operator::error::Error, }, + #[snafu(display("failed to delete orphaned resources"))] DeleteOrphanedResources { source: stackable_operator::error::Error, }, + #[snafu(display("failed to create container builder with name [{name}]"))] FailedContainerBuilderCreation { source: stackable_operator::error::Error, name: String, }, + #[snafu(display("object defines no namespace"))] ObjectHasNoNamespace, + #[snafu(display("failed to initialize security context"))] FailedToInitializeSecurityContext { source: stackable_druid_crd::security::Error, }, + #[snafu(display("failed to get JVM config"))] GetJvmConfig { source: crate::config::Error }, + #[snafu(display("failed to derive Druid memory settings from resources"))] DeriveMemorySettings { source: stackable_druid_crd::resource::Error, }, + #[snafu(display("failed to update Druid config from resources"))] UpdateDruidConfigFromResources { source: stackable_druid_crd::resource::Error, }, + #[snafu(display("failed to retrieve secret for internal communications"))] FailedInternalSecretCreation { source: crate::internal_secret::Error, }, + #[snafu(display( "failed to access bind credentials although they are required for LDAP to work" ))] LdapBindCredentialsAreRequired, + #[snafu(display("failed to resolve the Vector aggregator address"))] ResolveVectorAggregatorAddress { source: crate::product_logging::Error, }, + #[snafu(display("failed to add the logging configuration to the ConfigMap [{cm_name}]"))] InvalidLoggingConfig { source: crate::product_logging::Error, cm_name: String, }, + #[snafu(display("failed to create RBAC service account"))] ApplyServiceAccount { source: stackable_operator::error::Error, }, + #[snafu(display("failed to create RBAC role binding"))] ApplyRoleBinding { source: stackable_operator::error::Error, }, + #[snafu(display("failed to build RBAC resources"))] BuildRbacResources { source: stackable_operator::error::Error, }, + #[snafu(display( "failed to serialize [{JVM_SECURITY_PROPERTIES_FILE}] for {}", rolegroup ))] JvmSecurityProperties { - source: stackable_operator::product_config::writer::PropertiesWriterError, + source: PropertiesWriterError, rolegroup: String, }, + #[snafu(display("failed to create PodDisruptionBudget"))] FailedToCreatePdb { source: crate::operations::pdb::Error, @@ -649,10 +687,7 @@ fn build_rolegroup_config_map( conf.extend(transformed_config); let runtime_properties = - stackable_operator::product_config::writer::to_java_properties_string( - conf.iter(), - ) - .context(PropertiesWriteSnafu)?; + to_java_properties_string(conf.iter()).context(PropertiesWriteSnafu)?; cm_conf_data.insert(RUNTIME_PROPS.to_string(), runtime_properties); } PropertyNameKind::File(file_name) if file_name == JVM_CONFIG => { @@ -1149,11 +1184,12 @@ pub fn error_policy(_obj: Arc, _error: &Error, _ctx: Arc) -> #[cfg(test)] mod test { use super::*; + + use product_config::{writer, ProductConfigManager}; use rstest::*; use stackable_druid_crd::{ authentication::ResolvedAuthenticationClasses, PROP_SEGMENT_CACHE_LOCATIONS, }; - use stackable_operator::product_config::{writer, ProductConfigManager}; #[derive(Snafu, Debug, EnumDiscriminants)] #[strum_discriminants(derive(IntoStaticStr))] @@ -1163,7 +1199,7 @@ mod test { Controller { source: super::Error }, #[snafu(display("product config error"))] ProductConfig { - source: stackable_operator::product_config::error::Error, + source: product_config::error::Error, }, #[snafu(display("product config utils error"))] ProductConfigUtils {