Skip to content

Commit 05e6f29

Browse files
committed
refactor: move logging & discovery to build step
1 parent 523a376 commit 05e6f29

10 files changed

Lines changed: 123 additions & 130 deletions

File tree

rust/operator-binary/src/container.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,13 @@ use crate::{
6161
self,
6262
jvm::{construct_global_jvm_args, construct_role_specific_jvm_args},
6363
},
64+
controller::build::properties::logging::{
65+
FORMAT_NAMENODES_LOG4J_CONFIG_FILE, FORMAT_ZOOKEEPER_LOG4J_CONFIG_FILE,
66+
HDFS_LOG4J_CONFIG_FILE, MAX_FORMAT_NAMENODE_LOG_FILE_SIZE,
67+
MAX_FORMAT_ZOOKEEPER_LOG_FILE_SIZE, MAX_HDFS_LOG_FILE_SIZE,
68+
MAX_WAIT_NAMENODES_LOG_FILE_SIZE, MAX_ZKFC_LOG_FILE_SIZE, STACKABLE_LOG_DIR,
69+
WAIT_FOR_NAMENODES_LOG4J_CONFIG_FILE, ZKFC_LOG4J_CONFIG_FILE,
70+
},
6471
crd::{
6572
AnyNodeConfig, DataNodeContainer, HdfsNodeRole, HdfsPodRef, NameNodeContainer,
6673
UpgradeState,
@@ -77,13 +84,6 @@ use crate::{
7784
storage::DataNodeStorageConfig,
7885
v1alpha1,
7986
},
80-
product_logging::{
81-
FORMAT_NAMENODES_LOG4J_CONFIG_FILE, FORMAT_ZOOKEEPER_LOG4J_CONFIG_FILE,
82-
HDFS_LOG4J_CONFIG_FILE, MAX_FORMAT_NAMENODE_LOG_FILE_SIZE,
83-
MAX_FORMAT_ZOOKEEPER_LOG_FILE_SIZE, MAX_HDFS_LOG_FILE_SIZE,
84-
MAX_WAIT_NAMENODES_LOG_FILE_SIZE, MAX_ZKFC_LOG_FILE_SIZE, STACKABLE_LOG_DIR,
85-
WAIT_FOR_NAMENODES_LOG4J_CONFIG_FILE, ZKFC_LOG4J_CONFIG_FILE,
86-
},
8787
security::kerberos::KERBEROS_CONTAINER_PATH,
8888
};
8989

rust/operator-binary/src/controller/build/config_map.rs

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,19 @@ use snafu::{OptionExt, ResultExt, Snafu};
66
use stackable_operator::{
77
builder::{configmap::ConfigMapBuilder, meta::ObjectMetaBuilder},
88
k8s_openapi::api::core::v1::ConfigMap,
9+
product_logging::framework::VECTOR_CONFIG_FILE,
910
role_utils::RoleGroupRef,
1011
utils::cluster_info::KubernetesClusterInfo,
1112
};
1213

1314
use crate::{
1415
config::writer::PropertiesWriterError,
1516
controller::build::properties::{
16-
ConfigFileName, core_site, hadoop_policy, hdfs_site, security_properties, ssl_client,
17-
ssl_server,
17+
ConfigFileName, core_site, hadoop_policy, hdfs_site, logging, security_properties,
18+
ssl_client, ssl_server,
1819
},
1920
crd::{HdfsNodeRole, v1alpha1},
2021
hdfs_controller::ValidatedCluster,
21-
product_logging::extend_role_group_config_map,
2222
};
2323

2424
#[derive(Snafu, Debug)]
@@ -41,12 +41,6 @@ pub enum Error {
4141
rolegroup: String,
4242
},
4343

44-
#[snafu(display("failed to add the logging configuration to the ConfigMap {cm_name:?}"))]
45-
InvalidLoggingConfig {
46-
source: crate::product_logging::Error,
47-
cm_name: String,
48-
},
49-
5044
#[snafu(display("cannot build config map for role {role:?} and role group {role_group:?}"))]
5145
Assemble {
5246
source: stackable_operator::builder::configmap::Error,
@@ -122,11 +116,12 @@ pub fn build_rolegroup_config_map(
122116
)?,
123117
);
124118

125-
extend_role_group_config_map(rolegroup_ref, merged_config, &mut builder).context(
126-
InvalidLoggingConfigSnafu {
127-
cm_name: rolegroup_ref.object_name(),
128-
},
129-
)?;
119+
for (log_config_file, log4j_config) in logging::build_log4j_configs(merged_config) {
120+
builder.add_data(log_config_file, log4j_config);
121+
}
122+
if let Some(vector_config) = logging::build_vector_config(rolegroup_ref, merged_config) {
123+
builder.add_data(VECTOR_CONFIG_FILE, vector_config);
124+
}
130125

131126
builder.build().with_context(|_| AssembleSnafu {
132127
role: rolegroup_ref.role.clone(),

rust/operator-binary/src/discovery.rs renamed to rust/operator-binary/src/controller/build/discovery.rs

Lines changed: 35 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1+
//! Build the discovery `ConfigMap` for the HdfsCluster.
2+
13
use snafu::{ResultExt, Snafu};
24
use stackable_operator::{
35
builder::{configmap::ConfigMapBuilder, meta::ObjectMetaBuilder},
4-
commons::product_image_selection::ResolvedProductImage,
56
k8s_openapi::api::core::v1::ConfigMap,
6-
kube::{ResourceExt, runtime::reflector::ObjectRef},
7+
kube::runtime::reflector::ObjectRef,
78
utils::cluster_info::KubernetesClusterInfo,
89
};
910

@@ -12,6 +13,7 @@ use crate::{
1213
config::{CoreSiteConfigBuilder, HdfsSiteConfigBuilder},
1314
controller::build::properties::ConfigFileName,
1415
crd::{HdfsNodeRole, HdfsPodRef, v1alpha1},
16+
hdfs_controller::{HDFS_CONTROLLER_NAME, ValidatedCluster},
1517
security::kerberos::{self, KerberosConfig},
1618
};
1719

@@ -42,23 +44,26 @@ pub enum Error {
4244

4345
/// Creates a discovery config map containing the `hdfs-site.xml` and `core-site.xml`
4446
/// for clients.
45-
pub fn build_discovery_configmap(
46-
hdfs: &v1alpha1::HdfsCluster,
47+
///
48+
/// The rendered content comes entirely from `cluster` (with the externally-resolved
49+
/// `cluster_info` and `namenode_podrefs`); `owner_ref` is retained only for the ConfigMap
50+
/// ObjectMeta / owner reference.
51+
pub fn build_discovery_config_map(
52+
cluster: &ValidatedCluster,
4753
cluster_info: &KubernetesClusterInfo,
48-
controller: &str,
4954
namenode_podrefs: &[HdfsPodRef],
50-
resolved_product_image: &ResolvedProductImage,
55+
owner_ref: &v1alpha1::HdfsCluster,
5156
) -> Result<ConfigMap> {
5257
let metadata = ObjectMetaBuilder::new()
53-
.name_and_namespace(hdfs)
54-
.ownerreference_from_resource(hdfs, None, Some(true))
58+
.name_and_namespace(owner_ref)
59+
.ownerreference_from_resource(owner_ref, None, Some(true))
5560
.context(ObjectMissingMetadataForOwnerRefSnafu {
56-
hdfs: ObjectRef::from_obj(hdfs),
61+
hdfs: ObjectRef::from_obj(owner_ref),
5762
})?
5863
.with_recommended_labels(&build_recommended_labels(
59-
hdfs,
60-
controller,
61-
&resolved_product_image.app_version_label_value,
64+
owner_ref,
65+
HDFS_CONTROLLER_NAME,
66+
&cluster.image.app_version_label_value,
6267
&HdfsNodeRole::Name.to_string(),
6368
"discovery",
6469
))
@@ -69,47 +74,48 @@ pub fn build_discovery_configmap(
6974
.metadata(metadata)
7075
.add_data(
7176
ConfigFileName::HdfsSite.to_string(),
72-
build_discovery_hdfs_site_xml(hdfs, cluster_info, hdfs.name_any(), namenode_podrefs),
77+
build_discovery_hdfs_site_xml(cluster, cluster_info, namenode_podrefs),
7378
)
7479
.add_data(
7580
ConfigFileName::CoreSite.to_string(),
76-
build_discovery_core_site_xml(hdfs, cluster_info, hdfs.name_any())?,
81+
build_discovery_core_site_xml(cluster, cluster_info)?,
7782
)
7883
.build()
7984
.context(BuildConfigMapSnafu)
8085
}
8186

8287
fn build_discovery_hdfs_site_xml(
83-
hdfs: &v1alpha1::HdfsCluster,
88+
cluster: &ValidatedCluster,
8489
cluster_info: &KubernetesClusterInfo,
85-
logical_name: String,
8690
namenode_podrefs: &[HdfsPodRef],
8791
) -> String {
88-
HdfsSiteConfigBuilder::new(logical_name)
92+
HdfsSiteConfigBuilder::new(cluster.name.as_ref().to_owned())
8993
.dfs_name_services()
9094
.dfs_ha_namenodes(namenode_podrefs)
9195
.dfs_namenode_rpc_address_ha(cluster_info, namenode_podrefs)
92-
.dfs_namenode_http_address_ha(hdfs.has_https_enabled(), cluster_info, namenode_podrefs)
96+
.dfs_namenode_http_address_ha(
97+
cluster.cluster_config.https_enabled,
98+
cluster_info,
99+
namenode_podrefs,
100+
)
93101
.dfs_client_failover_proxy_provider()
94-
.security_discovery_config(hdfs.has_kerberos_enabled())
102+
.security_discovery_config(cluster.cluster_config.kerberos_enabled)
95103
.build_as_xml()
96104
}
97105

98106
fn build_discovery_core_site_xml(
99-
hdfs: &v1alpha1::HdfsCluster,
107+
cluster: &ValidatedCluster,
100108
cluster_info: &KubernetesClusterInfo,
101-
logical_name: String,
102109
) -> Result<String> {
103-
let cluster_name = hdfs.name_any();
104-
let cluster_namespace = hdfs.namespace();
110+
let cluster_config = &cluster.cluster_config;
105111
let kerberos = KerberosConfig {
106-
cluster_name: &cluster_name,
107-
cluster_namespace: cluster_namespace.as_deref(),
108-
authentication_enabled: hdfs.authentication_config().is_some(),
109-
kerberos_enabled: hdfs.has_kerberos_enabled(),
110-
authorization_enabled: hdfs.has_authorization_enabled(),
112+
cluster_name: cluster.name.as_ref(),
113+
cluster_namespace: cluster.namespace.as_deref(),
114+
authentication_enabled: cluster_config.authentication_enabled,
115+
kerberos_enabled: cluster_config.kerberos_enabled,
116+
authorization_enabled: cluster_config.authorization_enabled,
111117
};
112-
Ok(CoreSiteConfigBuilder::new(logical_name)
118+
Ok(CoreSiteConfigBuilder::new(cluster.name.as_ref().to_owned())
113119
.fs_default_fs()
114120
.security_discovery_config(&kerberos, cluster_info)
115121
.context(BuildSecurityDiscoveryConfigMapSnafu)?
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
pub mod config_map;
2+
pub mod discovery;
23
pub mod properties;

rust/operator-binary/src/controller/build/properties/core_site.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ pub fn build(
3232
let cluster_config = &cluster.cluster_config;
3333
let kerberos = KerberosConfig {
3434
cluster_name: cluster.name.as_ref(),
35-
cluster_namespace: cluster_config.namespace.as_deref(),
35+
cluster_namespace: cluster.namespace.as_deref(),
3636
authentication_enabled: cluster_config.authentication_enabled,
3737
kerberos_enabled: cluster_config.kerberos_enabled,
3838
authorization_enabled: cluster_config.authorization_enabled,

0 commit comments

Comments
 (0)